知识点
- redis集群的原理是划分16384(2^14)个槽,这些槽会完全分布到集群中主节点上
- 写入时,对key进行hash找到对应的槽,然后连接拥有该槽的主节点进行写入
- 读取和写入类似,找到保存key的主节点,然后连接读取
- 集群元数据使用Gossip协议和Raft算法
- Redis5.0之后不再使用redis-trib.rb工具管理集群,改为redis-cli —cluster
准备配置文件
cluster-1.conf
cluster-2.conf~cluster-6.conf与cluster-1.conf类似,只需修改port、cluster-config-file、appendfilename、dbfilename四项即可,故不再列出。# 绑定ip
bind 192.168.124.25
# 监听端口
port 9010
# 开启集群
cluster-enabled yes
# 判定节点不可达的毫秒数
cluster-node-timeout 15000
# 保存集群节点自动生成的配置
cluster-config-file "cluster-1.conf"
# 开启AOF
appendonly yes
# 设置AOF文件名
appendfilename "cluster-1.aof"
# 设置RDB文件名
dbfilename "cluster-1.rdb"
启动集群
我们首先需要启动这六个节点
docker run -d --name redis-cluster-1-9010 --net=host \
-v $PWD/conf/cluster-1.conf:/etc/redis.conf \
-v $PWD/data:/data redis redis-server /etc/redis.conf && \
docker run -d --name redis-cluster-2-9011 --net=host \
-v $PWD/conf/cluster-2.conf:/etc/redis.conf -v $PWD/data:/data redis redis-server /etc/redis.conf && \
docker run -d --name redis-cluster-3-9012 --net=host \
-v $PWD/conf/cluster-3.conf:/etc/redis.conf \
-v $PWD/data:/data redis redis-server /etc/redis.conf && \
docker run -d --name redis-cluster-4-9013 --net=host \
-v $PWD/conf/cluster-4.conf:/etc/redis.conf \
-v $PWD/data:/data redis redis-server /etc/redis.conf && \
docker run -d --name redis-cluster-5-9014 --net=host \
-v $PWD/conf/cluster-5.conf:/etc/redis.conf \
-v $PWD/data:/data redis redis-server /etc/redis.conf && \
docker run -d --name redis-cluster-6-9015 --net=host \
-v $PWD/conf/cluster-6.conf:/etc/redis.conf \
-v $PWD/data:/data redis redis-server /etc/redis.conf
然后利用redis-cli将这六个节点组成集群,集群使用一主一从的模式保证高可用
/usr/local/redis-5.0.5/src/redis-cli --cluster
\create 192.168.124.25:9010 192.168.124.25:9011 192.168.124.25:9012
\ 192.168.124.25:9013 192.168.124.25:9014 192.168.124.25:9015
\--cluster-replicas 1
如果你像我一样所有节点都在一台主机上的话,这时候redis会报警告,输入yes继续就好
集群创建完成后检查一下集群的完整性
redis-cli --cluster check 192.168.124.25:9010
结果如下:
192.168.124.25:9010 (d8aa982d…) -> 0 keys | 5461 slots | 1 slaves. 192.168.124.25:9012 (6975af42…) -> 0 keys | 5462 slots | 1 slaves.
192.168.124.25:9011 (9206e021…) -> 0 keys | 5461 slots | 1 slaves.
[OK] 0 keys in 3 masters.
0.00 keys per slot on average.
Performing Cluster Check (using node 192.168.124.25:9010)
M: d8aa982d1bc65e07c8c02fecadd420f695f2ddd2 192.168.124.25:9010
slots:[1010-5460],[10923-11932] (5461 slots) master
1 additional replica(s)
S: 10e67a1439fb0a7f703e6f20d322dccdf70be4aa 192.168.124.25:9014
slots: (0 slots) slave
replicates d8aa982d1bc65e07c8c02fecadd420f695f2ddd2
M: 6975af42782538706be1a81bfa5b6b5a08bd8724 192.168.124.25:9012
slots:[0-1009],[5461],[11933-16383] (5462 slots) master
1 additional replica(s)
S: e9b82944f84db2203a4fd9072b40ce91b934a183 192.168.124.25:9015
slots: (0 slots) slave
replicates 9206e021fa265b1cf7dc37ba94df304587e6b209
M: 9206e021fa265b1cf7dc37ba94df304587e6b209 192.168.124.25:9011
slots:[5462-10922] (5461 slots) master
1 additional replica(s)
S: d5d4382da4ba93489a51c31890a916d573a39b96 192.168.124.25:9013
slots: (0 slots) slave
replicates 6975af42782538706be1a81bfa5b6b5a08bd8724
[OK] All nodes agree about slots configuration.
Check for open slots…
Check slots coverage…
[OK] All 16384 slots covered.
集群扩展
集群收缩
待续