Redis集群

文章目录

  • 1 集群分片slot
  • 2案例
    • 2.1. 3主3从的rendis集群配置
    • 2. 2 3主3从集群读写
    • 2.3 主从容错切换迁移案例
    • 2.4 主从扩容案例
    • 2.5 主从缩容案例

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集群_第1张图片为什么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的哈希地址

Redis集群_第2张图片重写肥胖成本太高所以每一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的槽位号清空,重新分配
Redis集群_第3张图片
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

你可能感兴趣的:(Redis,redis)