Redis进阶笔记04:更好的集群架构模式Redis Cluster

225 阅读4分钟
  1. 概述:

    1. 自动将数据进行分片,每个master上放一部分数据
    2. 提供内置的高可用支持,部分master不可用时,还是可以继续工作的
    3. 在redis cluster架构下,每个redis要放开两个端口号(第二个端口由redis自动配置),比如一个是6379,另外一个就是加10000的端口号,比如16379;16379端口号是用来进行节点间通信的,也就是集群总线(cluster bus)。cluster bus的通信,用来进行故障检测、配置更新、故障转移授权等。cluster bus用了另外一种二进制的协议,主要用于节点间进行高效的数据交换,占用更少的网络带宽和处理时间
    4. redis cluster模式下,不建议做物理的读写分离了,建议通过master的水平扩容,来横向扩展读写吞吐量,还有支撑更多的海量数据
  2. 搭建3主3从架构的cluster集群:

    1. 搭建6个cluster节点(端口号分别是:7001、7002、7003、7004、7005、7006,下面以7001端口号的节点为例进行搭建)
      1. 创建目录
        # 放redis-cluster配置文件(注意:不是redis启动的配置文件,redis-cluster的配置文件是redis自己维护的)
        mkdir -p /etc/redis-cluster
        # 放redis日志文件
        mkdir -p /var/redis/7001/log/
        # 放redis持久化文件
        mkdir -p /var/redis/7001/persistence/
        
      2. 将原来的/etc/redis/6379.conf在原目录下拷贝一份命名为7001.conf,并调整如下配置
        # 端口号
        port 7001
        # 开启cluster模式
        cluster-enabled yes
        # 配置cluster配置文件的路径(该配置文件由redis自己新建并维护)
        cluster-config-file /etc/redis-cluster/node-7001.conf
        # cluster节点超时时间(超时失联,则认为宕机)
        cluster-node-timeout 15000
        # 后台启动
        daemonize	yes		
        # pid文件					
        pidfile		/var/run/redis_7001.pid 
        # 持久化文件目录						
        dir 		/var/redis/7001/persistence  	
        # 日志文件目录
        logfile 	/var/redis/7001/log/7001.log
        # 绑定ip
        bind 192.168.31.187	
        # 开启aof	
        appendonly yes
        # 注释掉如下配置(之前配置读写分离集群时,redis自己热修改的配置)
        # replicaof 192.168.xx.xx 6379
        
      3. 将原来的/etc/init.d/redis_6379在原目录下拷贝一份命名为redis_7001,并修改端口为7001
      4. (/etc/init.d目录下)启动redis服务:
        redis_7001 start
        
    2. 将6个节点组成cluster集群
      1. (旧的方式,已废弃,不推荐,了解即可)
        1. 安装ruby
          yum install -y ruby
          yum install -y rubygems
          gem install redis
          
        2. 执行第三步时报错“ERROR: Error installing redis-4.0.0.gem: redis requires Ruby version >= 2.2.2.”的解决方案:
          sudo yum install curl
          curl -sSL https://get.rvm.io | bash -s stable  
          source /usr/local/rvm/scripts/rvm
          rvm list known
          # 安装一个版本
          rvm install  2.4.1
          rvm use  2.4.1
          # 卸载一个版本
          # rvm remove 2.0.0
          # 设置默认版本
          rvm use 2.4.1 --default
          #
          gem install redis
          #redis-4.1.2
          cp /usr/local/mysoftware/redis/redis-5.0.5/src/redis-trib.rb /usr/local/bin
          redis-trib.rb create --replicas 1 192.168.0.111:7001 192.168.0.111:7002 192.168.0.112:7003 192.168.0.112:7004 192.168.0.113:7005 192.168.0.113:7006
          

      2. 执行命令:
        redis-cli --cluster create 192.168.0.111:7001 192.168.0.111:7002 192.168.0.112:7003 192.168.0.112:7004 192.168.0.113:7005 192.168.0.113:7006 --cluster-replicas 1
        
      3. 效果:

      4. 检查cluster集群状况:
        redis-cli --cluster check 192.168.0.111:7001
        
  3. cluster模式下的水平扩容、缩容:

    1. 检查已有cluster集群:
      redis-cli --cluster check 192.168.2.141:7001
      
    2. 扩容:
      1. 新增一台cluster的master主节点
        1. 单机配置一台cluster的redis节点并启动(与上面的配置一样,略)
        2. 将新配置的cluster节点新增到集群中(新增的节点ip与端口:192.168.2.144:7007)
          redis-cli --cluster add-node 192.168.2.144:7007 192.168.2.141:7001
          
        3. 检查新的集群信息
      2. 迁移slot到新的节点:
        # redis-cli --cluster reshard 集群名称
        redis-cli --cluster reshard 192.168.2.141:7001
        # 输入先要移入新节点的slot数量:4096
        # 输入接收slot的节点id
        # 依次输入slot的来源节点(输入all表示全部,输入done结束)
        

      3. 新增一台cluster的salve节点
        1. 单机配置一台cluster的redis节点并启动(与上面的配置一样,略)
        2. 给指定的master节点添加slave节点:
          redis-cli --cluster add-node --cluster-slave --cluster-master-id c8d6e402532e941530e7cb9f08cdc96a7950ec4a 192.168.2.144:7008 192.168.2.141:7001
          
        3. 查看集群信息:
          edis-cli --cluster check 192.168.2.141:7001
          
    3. 缩容:
      1. 先用reshard将数据都移除到其他节点(确保node为空之后,才能执行删除操作)
        1. 依次向192.168.2.141:7001、192.168.2.142:7003、192.168.2.143:7005迁移1365、1365、1366个slot:
      2. 删除节点:
            redis-cli --cluster del-node 192.168.2.144:7007 c8d6e402532e941530e7cb9f08cdc96a7950ec4a
        
      3. 查看集群信息:
      4. (附:)删除原master节点对应的salve node:
        redis-cli --cluster del-node 192.168.2.144:7008 eeed6803b1da3388b422e7e2148065de9d7bdfc7
        

    欢迎访问我的个人博客:zephyrlai.github.io