集群的概念
- redis集群,无论有几个节点,一共只有16384个槽
- 所有的槽位都必须分配,哪怕有1个槽位不正常,整个集群都不能用
- 每个节点的槽的顺序不重要,重点是数量
- hash算法足够随机,足够平均
- 每个槽被分配到数据的概率是相当的
- 集群的高可用依赖于主从复制
- 集群拥有自己的配置文件,动态更新,启动后不需要手动修改
- 集群通讯会使用基础端口号+10000的端口,这个是自动创建的,不是配置文件配置的
- 集群槽位分配比例允许误差在%2之间
创建Redis集群
手动创建
创建配置文件存放目录、创建数据目录
mkdir -p /opt/redis_{6379,6380}/{conf,logs,pid}mkdir -p /data/redis_{6379,6380}
编辑配置文件
cat >/opt/redis_6379/conf/redis_6379.conf<<EOFbind 10.0.0.51port 6379daemonize yespidfile "/opt/redis_6380/pid/redis_6379pid"logfile "/opt/redis_6380/logs/redis_6379.log"dbfilename "redis_6379.rdb"dir "/data/redis_6379/"appendonly yesappendfilename "redis.aof"appendfsync everysec#开启集群的重要参数cluster-enabled yescluster-config-file nodes_6379.confcluster-node-timeout 15000EOF
- 启动redis进程
/opt/redis/bin/redis-server /opt/redis_6379/conf/redis_6379.conf
- 手动发现节点
redis-cli -h db01 -p 6379 CLUSTER MEET 10.0.0.52 6379redis-cli -h db01 -p 6379 CLUSTER MEET 10.0.0.53 6379redis-cli -h db01 -p 6379 CLUSTER MEET 10.0.0.51 6380redis-cli -h db01 -p 6379 CLUSTER MEET 10.0.0.52 6380redis-cli -h db01 -p 6379 CLUSTER MEET 10.0.0.53 6380redis-cli -h db01 -p 6379 CLUSTER NODES
- 手动分配集群槽位
redis-cli -h db01 -p 6379 CLUSTER ADDSLOTS {0..5460}redis-cli -h db02 -p 6379 CLUSTER ADDSLOTS {5461..10921}redis-cli -h db03 -p 6379 CLUSTER ADDSLOTS {10922..16383}
- 查看集群状态
#查看集群就绪状态redis-cli -h db01 -p 6379 CLUSTER INFO#查看集群节点信息redis-cli -h db01 -p 6379 CLUSTER NODES
- 部署集群机器间的主从复制关系
为了让集群保持高可用,将会在每台机器上部署一主一从,并采用交叉主从的方式来部署
即
redis-cli -h 10.0.0.51 -p 6380 CLUSTER REPLICATE 52的6379的IDredis-cli -h 10.0.0.52 -p 6380 CLUSTER REPLICATE 53的6379的IDredis-cli -h 10.0.0.53 -p 6380 CLUSTER REPLICATE 51的6379的ID
- 检查集群
#查看所有节点信息redis-cli -h db01 -p 6379 CLUSTER NODES
- 测试插入数据
#往redis集群中插入一万条数据for i in {1..10000};do redis-cli -c -h 10.0.0.51 -p 6379 set k_${i} v_${i};echo ${i};done#通过检查集群状态看是否足够平均的插入到每个库(集群允许2%的key数量误差)redis-cli --cluster info 10.0.0.51 6379#通过rebalance修复不平均redis-cli --cluster rebalance 10.0.0.51 6379
使用redis-cli创建集群
#使用工具直接创建集群#主库在前从库在后,会自动交叉创建主从并分配槽位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#查看集群状态redis-cli --cluster info 10.0.0.51 6379redis-cli -h 10.0.0.51 -p 6379 CLUSTER NODESredis-cli --cluster check 10.0.0.51 6379
