文章目录
1 集群分片slot
1.槽位最大16384,建议最大节点1000以内
 2.分片:Redis集群时我们会将存储的数据分散到多台redis机器上,则称为分片。
 3.如何找到给定key分片:为了找到给定keyu分片,我们对key进行CRC16(KEY)算法处理并通过对总分片数量取模。然后使用确定性哈希函数,这意味着给定key将多此始终映射到同一个分片,我们可以推断将来读取特定key的位置。
 4.slot槽位映射,一般业界有3种解决方案:
 a哈希取余分区 缺点:每次扩容和缩容麻烦
 b一致性哈希算法分区:
 三步骤:1.算法=构建一致性哈希环;2.服务器ip节点映射;3.key落到服务器的落键规则。
 优点:容错性,扩展性
 缺点:容易数据倾斜
 c哈希槽分区
  为什么redis槽位是16384
为什么redis槽位是16384
 1.心跳包,如果槽位是65536,这个ping的消息的消息头就太大了,浪费带宽。
 16384/8/1024=2kb
 65536/8/1024=8kb
 2.redis的集群节点不可能超过1000
 3.槽位越小,节点越少的情况下,压缩比高,容易传输
redis集群不保证强一致性,这意味着在特定的条件下,rendis集群可能会丢掉一些被系统收到的写入请求命令。
2案例
2.1. 3主3从的rendis集群配置
1.新建目录 mkdir -p/myreids/cluster
 2.redisCluster6381.conf到redisCluster6386.conf
bind 0.0.0.0
daemonize yes
protected-mopde no
port 6381
logfile "/myredis/cluster/cluster6381.log"
pidfile "/myredis/cluster6381.pid"
dir /myredis/cluster
dbfilename dump6381.rdb
appendfilename "appendonly6381.aof"
requirepass 111111
masterauth 111111
cluster-enabled yes
cluster-config-file nodes-6381.conf
cluster-node-timeout 5000
启动命令
redis server /maredis/cluster/redisCluster6381.conf
redis server /maredis/cluster/redisCluster6382.conf
redis server /maredis/cluster/redisCluster6383.conf
redis server /maredis/cluster/redisCluster6384.conf
redis server /maredis/cluster/redisCluster6385.conf
redis server /maredis/cluster/redisCluster6386.conf
启动集群
redis -cli  -a 111111 -cluster create --cluster-replicas 1 192.168.111.185:6381 192.168.111.185:6382
192.168.111.182:6383 192.168.111.182:6384 192.168.111.184:6385 192.168.111.184:6386
查看集群
info replication
cluster nodes
cluster info 
2. 2 3主3从集群读写
一定注意槽位的范围区间,需要路由到位。
 集群连接
redis-cli -a 111111 -p 6381 -c
2.3 主从容错切换迁移案例
主从关系互换
 在从主机上输入
cluster failover
2.4 主从扩容案例
配置redis新主机redisCluster6387.conf 和redisCluster6388.conf
bind 0.0.0.0
daemonize yes
protected-mopde no
port 6387
logfile "/myredis/cluster/cluster6387.log"
pidfile "/myredis/cluster6387.pid"
dir /myredis/cluster
dbfilename dump6387.rdb
appendfilename "appendonly6387.aof"
requirepass 111111
masterauth 111111
cluster-enabled yes
cluster-config-file nodes-6387.conf
cluster-node-timeout 5000
新节点加入集群
reids-cli -a 111111 --clister add-node 192.111.184:6387 192.168.111.185:6381
                                       新加节点的IP和端口 引进节点的ip和端口
重新分配槽位
redis-cli -a 111111 --cluster reshard 192.168.111.185:6381
4096
6387的哈希地址
 重写肥胖成本太高所以每一master拿出一点来分配
重写肥胖成本太高所以每一master拿出一点来分配
 把6388挂给6387
 redis-cli -a 111111 --cluster add-node 192.168.111.184:6388 192.168.111.184:6387 --cluster-slave -clustrer-master-id 6387的id值
 检查是否成功
 redis-cli -a 111111 --cluster check 192.168.111.185:63381
2.5 主从缩容案例
1.检查集群情况第一次,先获得从节点6388的节点ID
 reids-cli -a 111111 --cluster check 192.168.111.184:6388 ID
 2.从集群中将4号从节点6388删除
 3.将63387的槽位号清空,重新分配
 
 4.检查集群情况
 redis-cli -a 111111 --cluster check 192.168.111.175:6381
 5.将6387移除
 redis-cli -a 111111 --cluster del-node 192.168.111.184:6387 ID
 6.检查集群是否移除6387和6388
 redis-cli -a 111111 --cluster check 192.168.111.175:6381
  批量操作
批量操作
 mset k1{z} z1 k2{z} z2 k3{z} z3
 集权是否完整才能对外提供服务 cluster-require-full-coverage
 cluster countkeysinslot 槽位号 看槽位是否被占用
 cluster keyslot 键名称=cluster keyslot k1










