资讯专栏INFORMATION COLUMN

redis学习-第三节-集群搭建

cnio / 986人阅读

摘要:查看版本升级最新版本安装接口,成功安装,成功集群搭建有了执行环境,可以开始将之前的个实例组建成集群了。表示为集群的节点创建个副本。默认分配了个,当我们一个时,会用算法来取模得到所属的,然后将这个分到哈希槽区间的节点上,具体算法就是。

redis-集群搭建

Time : 20181019,通过这篇文章掌握 centos7 下redis的集群搭建

通过一台服务器进行Redis集群搭建,方式是通过不同的TCP端口启动实例,组成集群
环境
1. redis-3.2.8
2. CentOS7
3. redis3 以上版本才支持集群搭建,需要使用Rube
Redis 安装
1. 将 redis 上传到服务器的目录
    cd /home/softwares/redis
    tar -zxvf redis-3.2.8 : 解压到当前目录
    执行 make;make install
2. 创建 redis-cluster,并将 redis安装目录下的redis.conf 复制到 redis-cluster下
3. 创建 redis-7000.conf...redis-7006.conf
4. 修改redis-xxx.conf
    # 配置端口 7001-7006
    port 7006
    # ip 默认为127.0.0.1,需要改为其他机器可以访问的节点ip,否则创建的时候无法访问对应的端口,导致创建集群失败
    bind 172.16.1.131
    # redis 后台运行
    daemonize yes
    # 开启集群
    cluster-enabled yes
    # pidfile pid对应 7001-7006
    pidfile ./redis-7006.pid
    # 集群的配置,首次启动会创建
    cluster-config-file nodes_7006.conf
    # 集群失效时间默认为15S可自行配置
    cluster-node-timeout 15000
    # aof 日志,有需要就开启它会每次写操作会记录一条日志
    appendonly yes
5. 启动
    redis-server ../redis-cluster/redis-7001.conf
    redis-server ../redis-cluster/redis-7002.conf
    redis-server ../redis-cluster/redis-7003.conf
    redis-server ../redis-cluster/redis-7004.conf
    redis-server ../redis-cluster/redis-7005.conf
    redis-server ../redis-cluster/redis-7006.conf
6. 检查
    ps -ef|grep redis
此IP的六个redis启动成功;
redis集群-ruby
1. Redis3以上的集群是通过Redis安装目录下的bin/redis-trib.rb脚本搭建。
2. 这个脚本是ruby 写的,尝试运行 Ruby redis-trib.rb
3. 打印 Usage: redis-trib   
说明执行成功可以跳过 Ruby安装
Ruby安装
1. yum安装ruby和依赖的包。 yum -y install ruby ruby-devel rubygems rpm-build
2. 使用 gem 这个命令安装redis接口 : gem是Ruby的二进制工具包
    gem install redis
3. ERROR error installing redis; 需要升级Ruby版本
4. 升级 Ruby
    安装 rvm :# curl -L get.rvm.io | bash -s stable
    若安装失败 提示 : gpg2 --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3
    需要先运行 gpg2 --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 再安装 rvm
5. source环境,让rvm可用。 source /usr/local/rvm/scripts/rvm
6. 查看 Ruby 版本
    # rvm list known
    # MRI Rubies
    [ruby-]1.8.6[-p420]
    [ruby-]1.8.7[-head] # security released on head
    [ruby-]1.9.1[-p431]
    [ruby-]1.9.2[-p330]
    [ruby-]1.9.3[-p551]
    [ruby-]2.0.0[-p648]
    [ruby-]2.1[.10]
    [ruby-]2.2[.7]
    [ruby-]2.3[.4]
    [ruby-]2.4[.1]
7. 升级Ruby
    rvm install 最新版本(2.4.1)
8. 安装gem redis接口,成功! gem install redis
9. 安装rubygems,成功! yum install -y rubygems
Redis集群搭建
1. 有了Ruby执行环境,可以开始将之前的6个实例组建成集群了。
    ruby ./redis-trib.rb create --replicas 1 172.16.1.131:7001 172.16.1.131:7002 172.16.1.131:7003 172.16.1.131:7004 172.16.1.131:7005 172.16.1.131:7006
    --replicas 1表示为集群的master节点创建1个副本。那么6个实例里,有三个master,有三个是slave,后面跟上6个实例就好了,形式就是ip:port
2. 可以看到3个master和对应的replica已经建立起来
验证集群状态
1. 登录集群客户端,-c标识以集群方式登录 : ./bin/redis-cli -h 10.93.84.53 -p 7000 -c
2. 查看集群状态 : cluster info
原理和注意事项
redis cluster在设计的时候,就考虑到了去中心化,去中间件,也就是说,集群中的每个节点都是平等的关系,都是对等的,每个节点都保存各自的数据和整个集群的状态。每个节点都和其他所有节点连接,而且这些连接保持活跃,这样就保证了我们只需要连接集群中的任意一个节点,就可以获取到其他节点的数据。

Redis集群没有并使用传统的一致性哈希来分配数据,而是采用另外一种叫做哈希槽(hash slot)的方式来分配的,一致性哈希对向集群中新增和删除实例的支持很好,但是哈希槽对向集群新增实例或者删除实例的话,需要额外的操作,需要手动的将slot重新平均的分配到新集群的实例中。

redis cluster 默认分配了 16384 个slot,当我们set一个key时,会用CRC16算法来取模得到所属的slot,然后将这个key分到哈希槽区间的节点上,具体算法就是:CRC16(key)%16384。

Redis 集群会把数据存在一个master节点,然后在这个master和其对应的salve之间进行数据同步。当读取数据时,也根据一致性哈希算法到对应的master节点获取数据。只有当一个master 挂掉之后,才会启动一个对应的salve节点,充当master。

需要注意的是:必须要3个或以上的主节点,否则在创建集群时会失败,并且当存活的主节点数小于总节点数的一半时,整个集群就无法提供服务了。
编写shell脚本
前几次都是一个一个 redis 服务的启动 : 每次都是 redis-server ../redis-7001.conf ....
突然想到编写一个简单的 Shell 脚本 touch redis.sh
    #! /bin/bash
    # 启动 redis
    ./../redis-3.2.8/src/redis-server redis-7001.conf
    ./../redis-3.2.8/src/redis-server redis-7002.conf
    ./../redis-3.2.8/src/redis-server redis-7003.conf
    ./../redis-3.2.8/src/redis-server redis-7004.conf
    ./../redis-3.2.8/src/redis-server redis-7005.conf
    ./../redis-3.2.8/src/redis-server redis-7006.conf
    
    # 启动 集群
    ruby ./../redis-3.2.8/src/redis-trib.rb create --replicas 1 172.16.1.131:7001 172.16.1.131:7002 172.16.1.131:7003 172.16.1.131:7004 172.16.1.131:7005 172.16.1.131:7006
赋予执行权限 : chmod u+x redis.sh
进行执行 ./redis.sh 启动集群


    




文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/36900.html

相关文章

  • 2019年java架构师视频

    摘要:并发专题一内存模型原理实现机制单例模式并发基础并发集合原子操作基本类型线程池互联网工程专题二简介安装工具编程介绍,入门程序仓库依赖管理简介常用操作命令 01.并发专题(一)2018-09-11(1)-Java内存模型2018-09-13(2)-synchronized原理2018-09-16(3)-volatile实现机制2018-09-18(4)-DCL-单例模式2018-09-21...

    Object 评论0 收藏0
  • Python--Redis实战:第二章:使用Redis构建Web应用:三节:网页缓存

    摘要:研究表明,减少用户等待页面载入的时间,可以增加用户使用网站的欲望,并改善用户对网站的印象。上一篇文章实战第二章使用构建应用第二节使用实现购物车下一篇文章实战第二章使用构建应用第四节数据行缓存 上一篇文章: Python--Redis实战:第二章:使用Redis构建Web应用:第二节:使用Redis实现购物车下一篇文章:Python--Redis实战:第二章:使用Redis构建Web应用...

    kumfo 评论0 收藏0
  • Python--Redis实战:第二章:使用Redis构建Web应用:三节:网页缓存

    摘要:研究表明,减少用户等待页面载入的时间,可以增加用户使用网站的欲望,并改善用户对网站的印象。上一篇文章实战第二章使用构建应用第二节使用实现购物车下一篇文章实战第二章使用构建应用第四节数据行缓存 上一篇文章: Python--Redis实战:第二章:使用Redis构建Web应用:第二节:使用Redis实现购物车下一篇文章:Python--Redis实战:第二章:使用Redis构建Web应用...

    hoohack 评论0 收藏0
  • Python--Redis实战:第一章:初识Redis三节:你好Redis-文章投票试炼

    摘要:为了防止用户对同一篇文章进行多次投票,网站需要为每一篇文章记录一个已投票用户名单。上一篇文章实战第一章初识第二节数据结构简介下一篇文章实战第二章使用构建应用第一节登录和缓存 上一篇文章: Python--Redis实战:第一章:初识Redis:第二节:Redis数据结构简介下一篇文章:Python--Redis实战:第二章:使用Redis构建Web应用:第一节:登录和cookie缓存 ...

    youkede 评论0 收藏0
  • Python--Redis实战:第一章:初识Redis三节:你好Redis-文章投票试炼

    摘要:为了防止用户对同一篇文章进行多次投票,网站需要为每一篇文章记录一个已投票用户名单。上一篇文章实战第一章初识第二节数据结构简介下一篇文章实战第二章使用构建应用第一节登录和缓存 上一篇文章: Python--Redis实战:第一章:初识Redis:第二节:Redis数据结构简介下一篇文章:Python--Redis实战:第二章:使用Redis构建Web应用:第一节:登录和cookie缓存 ...

    Meils 评论0 收藏0

发表评论

0条评论

cnio

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<