集群的概念

  • redis集群,无论有几个节点,一共只有16384个槽
  • 所有的槽位都必须分配,哪怕有1个槽位不正常,整个集群都不能用
  • 每个节点的槽的顺序不重要,重点是数量
  • hash算法足够随机,足够平均
  • 每个槽被分配到数据的概率是相当的
  • 集群的高可用依赖于主从复制
  • 集群拥有自己的配置文件,动态更新,启动后不需要手动修改
  • 集群通讯会使用基础端口号+10000的端口,这个是自动创建的,不是配置文件配置的
  • 集群槽位分配比例允许误差在%2之间

    创建Redis集群

    手动创建

  1. 创建配置文件存放目录、创建数据目录

    1. mkdir -p /opt/redis_{6379,6380}/{conf,logs,pid}
    2. mkdir -p /data/redis_{6379,6380}
  2. 编辑配置文件

  1. cat >/opt/redis_6379/conf/redis_6379.conf<<EOF
  2. bind 10.0.0.51
  3. port 6379
  4. daemonize yes
  5. pidfile "/opt/redis_6380/pid/redis_6379pid"
  6. logfile "/opt/redis_6380/logs/redis_6379.log"
  7. dbfilename "redis_6379.rdb"
  8. dir "/data/redis_6379/"
  9. appendonly yes
  10. appendfilename "redis.aof"
  11. appendfsync everysec
  12. #开启集群的重要参数
  13. cluster-enabled yes
  14. cluster-config-file nodes_6379.conf
  15. cluster-node-timeout 15000
  16. EOF
  1. 启动redis进程
  1. /opt/redis/bin/redis-server /opt/redis_6379/conf/redis_6379.conf
  1. 手动发现节点
  1. redis-cli -h db01 -p 6379 CLUSTER MEET 10.0.0.52 6379
  2. redis-cli -h db01 -p 6379 CLUSTER MEET 10.0.0.53 6379
  3. redis-cli -h db01 -p 6379 CLUSTER MEET 10.0.0.51 6380
  4. redis-cli -h db01 -p 6379 CLUSTER MEET 10.0.0.52 6380
  5. redis-cli -h db01 -p 6379 CLUSTER MEET 10.0.0.53 6380
  6. redis-cli -h db01 -p 6379 CLUSTER NODES
  1. 手动分配集群槽位
  1. redis-cli -h db01 -p 6379 CLUSTER ADDSLOTS {0..5460}
  2. redis-cli -h db02 -p 6379 CLUSTER ADDSLOTS {5461..10921}
  3. redis-cli -h db03 -p 6379 CLUSTER ADDSLOTS {10922..16383}
  1. 查看集群状态
  1. #查看集群就绪状态
  2. redis-cli -h db01 -p 6379 CLUSTER INFO
  3. #查看集群节点信息
  4. redis-cli -h db01 -p 6379 CLUSTER NODES
  1. 部署集群机器间的主从复制关系

为了让集群保持高可用,将会在每台机器上部署一主一从,并采用交叉主从的方式来部署

image.png

  1. redis-cli -h 10.0.0.51 -p 6380 CLUSTER REPLICATE 526379ID
  2. redis-cli -h 10.0.0.52 -p 6380 CLUSTER REPLICATE 536379ID
  3. redis-cli -h 10.0.0.53 -p 6380 CLUSTER REPLICATE 516379ID
  1. 检查集群
  1. #查看所有节点信息
  2. redis-cli -h db01 -p 6379 CLUSTER NODES
  1. 测试插入数据
  1. #往redis集群中插入一万条数据
  2. for i in {1..10000};do redis-cli -c -h 10.0.0.51 -p 6379 set k_${i} v_${i};echo ${i};done
  3. #通过检查集群状态看是否足够平均的插入到每个库(集群允许2%的key数量误差)
  4. redis-cli --cluster info 10.0.0.51 6379
  5. #通过rebalance修复不平均
  6. redis-cli --cluster rebalance 10.0.0.51 6379

使用redis-cli创建集群

  1. #使用工具直接创建集群
  2. #主库在前从库在后,会自动交叉创建主从并分配槽位
  3. redis-cli --cluster create 10.0.0.51:6379 10.0.0.52:6379 10.0.0.53:6379 10.0.0.51:6380 10.0.0.52:6380 10.0.0.53:6380 --cluster-replicas 1
  4. #查看集群状态
  5. redis-cli --cluster info 10.0.0.51 6379
  6. redis-cli -h 10.0.0.51 -p 6379 CLUSTER NODES
  7. redis-cli --cluster check 10.0.0.51 6379