9 redis 集群

一、集群分区方案

-顺序分区
    -哈希分区
        -节点区域
        -一致性hash
        -虚拟槽--->redis集群--》16384个槽

 二、redis集群原理

5个节点,把16384个槽平均分配到每个节点,客户端会把数据发送给任意一个节点,通过CRC16对key进行哈希对16383进行取余,算出当前key属于哪部分槽,属于哪个节点,每个节点都会记录是不是负责这部分槽,如果是负责的,进行保存,如果槽不在自己范围内,redis cluster是共享消息的模式,它知道哪个节点负责哪些槽,返回结果,让客户端找对应的节点去存
服务端管理节点,槽,关系

三、 搭建

port 7000
daemonize yes
dir "/root/s19/redis-5.0.7/data"
logfile "7000.log"
dbfilename "dump-7000.rdb"
cluster-enabled yes
cluster-config-file nodes-7000.conf
cluster-require-full-coverage yes



# 快速生成其他配置
sed 's/7000/7001/g' redis-7000.conf > redis-7001.conf
sed 's/7000/7002/g' redis-7000.conf > redis-7002.conf
sed 's/7000/7003/g' redis-7000.conf > redis-7003.conf
sed 's/7000/7004/g' redis-7000.conf > redis-7004.conf
sed 's/7000/7005/g' redis-7000.conf > redis-7005.conf

# 启动6个节点
./src/redis-server ./redis-7000.conf
ps -ef |grep redis
./src/redis-server ./redis-7001.conf
./src/redis-server ./redis-7002.conf
./src/redis-server ./redis-7003.conf
./src/redis-server ./redis-7004.conf
./src/redis-server ./redis-7005.conf


## 客户端链接上的命令:
cluster nodes
cluster info

# 快速搭建集群
redis-cli --cluster create --cluster-replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005

## 集群扩容

sed 's/7000/7006/g' redis-7000.conf > redis-7006.conf
sed 's/7000/7007/g' redis-7000.conf > redis-7007.conf
./src/redis-server ./redis-7006.conf
./src/redis-server ./redis-7007.conf


### 方式一
在7000上执行
redis-cli -p 7000 cluster meet 127.0.0.1 7006
redis-cli -p 7000 cluster meet 127.0.0.1 7007
### 方式二
redis-cli --cluster add-node 127.0.0.1:7006 127.0.0.1:7000
redis-cli --cluster add-node 127.0.0.1:7007 127.0.0.1:7000

# 让7007做为7006的从
redis-cli -p 7007 cluster replicate 0ee8ebaede3a3f65de57c8443082547d3efd55d8


#分槽
./src/redis-cli --cluster reshard 127.0.0.1:7000

##  缩容

# 下线迁槽(把7006的1366个槽迁移到7000上)
redis-cli --cluster reshard --cluster-from 0ee8ebaede3a3f65de57c8443082547d3efd55d8 --cluster-to 24a7ff58d9ce9ca3d9d44874a9d83784bcac639e --cluster-slots 1366 127.0.0.1:7000
yes

redis-cli --cluster reshard --cluster-from 0ee8ebaede3a3f65de57c8443082547d3efd55d8 --cluster-to 8bffd1758091236005a09fe695435154ccefe74d --cluster-slots 1366 127.0.0.1:7005
yes
redis-cli --cluster reshard --cluster-from 0ee8ebaede3a3f65de57c8443082547d3efd55d8 --cluster-to 0a122d418d6386c4ef1f6b6ea69e5c967adaf0da --cluster-slots 1365 127.0.0.1:7002
yes
# 忘记节点,关闭节点
redis-cli --cluster del-node 127.0.0.1:7000 a44672ed51398e19f746646ffccb726a2d4fa914  # 先下从,再下主,因为先下主会触发故障转移
redis-cli --cluster del-node 127.0.0.1:7000 0ee8ebaede3a3f65de57c8443082547d3efd55d8
# 

# 关掉其中一个主,另一个从立马变成主顶上, 重启停止的主,发现变成了从

 

posted @ 2022-03-09 17:20  甜甜de微笑  阅读(29)  评论(0编辑  收藏  举报