redis-cluster集群安装
2021/12/17 2:12:30
本文主要是介绍redis-cluster集群安装,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
Redis-cluster集群
概念
Redis-Cluster采用无中心结构,每个节点保存数据和整个集群状态,每个节点都和其他所有节点连接。
结构特点
- 所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽。
- 节点的fail是通过集群中超过半数的节点检测失效时才生效。
- 客户端与redis节点直连,不需要中间proxy层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可。
- redis-cluster把所有的物理节点映射到[0-16383]slot上(不一定是平均分配),cluster 负责维护node<->slot<->value。
- Redis集群预分好16384个桶,当需要在 Redis 集群中放置一个 key-value 时,根据 CRC16(key) mod 16384的值,决定将一个key放到哪个桶中。
cluster节点分配
现在我们是三个主节点分别是:A, B, C 三个节点,它们可以是一台机器上的三个端口,也可以是三台不同的服务器。那么,采用哈希槽 (hash slot)的方式来分配16384个slot 的话,它们三个节点分别承担的slot 区间是:
-
节点A覆盖0-5460;
-
节点B覆盖5461-10922;
-
节点C覆盖10923-16383.
获取数据
如果存入一个值,按照redis cluster哈希槽的算法: CRC16(‘key’)384 = 6782。 那么就会把这个key 的存储分配到 B 上了。同样,当我连接(A,B,C)任何一个节点想获取’key’这个key时,也会这样的算法,然后内部跳转到B节点上获取数据
以上参考
怎样投票
投票过程是集群中所有master参与,如果半数以上master节点与当前master节点通信超过cluster-node-timeout
设置的时间,认为当前master节点挂掉。
如果其中一个节点的master挂了,它的slave就会替换之前master的位置成为新的master,之前的恢复后就会变成slave。
怎样判定节点不可用
- 如果集群任意master挂掉,且当前master没有slave(副本).集群进入fail状态,也可以理解成集群的slot映射[0-16383]不完整时进入fail状态。
- 如果集群超过半数以上master挂掉,无论是否有slave,集群进入fail状态,当集群不可用时,所有对集群的操作做都不可用,收到((error) CLUSTERDOWN The cluster is down)错误。
总结
简单的理解一下,redis-cluster集群是将主从模式和Sentinel模式的整合实现。
集群搭建
环境准备
主机ip | 端口 |
---|---|
192.168.1.251 | 7001,7002 |
192.168.1.252 | 7001,7002 |
192.168.1.253 | 7001,7002 |
安装redis
从官网下载redis的tar包,并解压安装
# 解压 tar -zxvf redis-5.0.14.tar.gz # 进入文件夹 cd redis-5.0.14 # 编译 make # 安装 make install
测试启动
redis-server redis.conf
修改配置文件
mkdir /usr/local/redis-5.0.14/cluster cp /usr/local/redis-5.0.14/redis.conf /usr/local/redis-5.0.14/cluster/redis_7001.conf cp /usr/local/redis-5.0.14/redis.conf /usr/local/redis-5.0.14/cluster/redis_7002.conf chown -R 777 /usr/local/redis-5.0.14 mkdir -p /data1/redis/cluster/{redis_7001,redis_7002} && chown -R 777 /data1/redis
redis_7001.conf
# vim /usr/local/redis-5.0.14/cluster/redis_7001.conf bind 192.168.1.251 port 7001 daemonize yes pidfile "/var/run/redis_7001.pid" logfile "/usr/local/redis-5.0.14/cluster/redis_7001.log" dir "/data1/redis/cluster/redis_7001" masterauth 123456 requirepass 123456 appendonly yes cluster-enabled yes cluster-config-file nodes_7001.conf cluster-node-timeout 15000
redis_7002.conf
# vim /usr/local/redis-5.0.14/cluster/redis_7002.conf bind 192.168.1.251 port 7002 daemonize yes pidfile "/var/run/redis_7002.pid" logfile "/usr/local/redis-5.0.14/cluster/redis_7002.log" dir "/data1/redis/cluster/redis_7002" masterauth "123456" requirepass "123456" appendonly yes cluster-enabled yes cluster-config-file nodes_7002.conf cluster-node-timeout 15000
其他机器配置一致
启动redis服务
redis-server /usr/local/redis-5.0.14/cluster/redis_7001.conf tail -f /usr/local/redis-5.0.14/cluster/redis_7001.log redis-server /usr/local/redis-5.0.14/cluster/redis_7002.conf tail -f /usr/local/redis-5.0.14/cluster/redis_7002.log
创建集群
如果redis版本比较低,则需要安装ruby。任选一台机器安装ruby即可
在redis-5中redis-trib.rb的功能被集成到了redis-cli中,大大简化了redis的集群部署,加快了进群部署的速度,也方便后期维护与扩容。
redis-cli -a 123456 --cluster create 192.168.1.251:7001 192.168.1.251:7002 192.168.1.252:7001 192.168.1.252:7002 192.168.1.253:7001 192.168.1.253:7002 --cluster-replicas 1
启动成功后结果如下:
从上可知:
192.168.1.251:7001 master 它的slave为 192.168.1.252:7002 192.168.1.252:7001 master 它的slave为 192.168.1.253:7002 192.168.1.253:7001 master 它的slave为 192.168.1.251:7002
集群操作
登陆集群
# -c,使用集群方式登录 redis-cli -c -h 192.168.1.251 -p 7001 -a 123456
查看集群信息
# 集群状态 192.168.1.251:7001> CLUSTER INFO cluster_state:ok cluster_slots_assigned:16384 cluster_slots_ok:16384 cluster_slots_pfail:0 cluster_slots_fail:0 cluster_known_nodes:6 cluster_size:3 cluster_current_epoch:6 cluster_my_epoch:1 cluster_stats_messages_ping_sent:526 cluster_stats_messages_pong_sent:541 cluster_stats_messages_sent:1067 cluster_stats_messages_ping_received:536 cluster_stats_messages_pong_received:526 cluster_stats_messages_meet_received:5 cluster_stats_messages_received:1067
列出节点信息
# 列出节点信息 192.168.1.251:7001> CLUSTER NODES e8ac4af0dd93b558260f1068b960d10df639ff5b 192.168.1.252:7001@17001 master - 0 1639652443264 3 connected 5461-10922 5d752d97d761a154989132841eabb1e12a46531f 192.168.1.253:7001@17001 master - 0 1639652444267 5 connected 10923-16383 63821c34dc1da011cd018731688e85a508391bdc 192.168.1.252:7002@17002 slave e6db21fdc82d444e5958d446a66a9c76d0ea60cc 0 1639652442000 4 connected 2c763d241297ea8778f76d497632a9e8b7bf8e9b 192.168.1.253:7002@17002 slave e8ac4af0dd93b558260f1068b960d10df639ff5b 0 1639652441257 6 connected e6db21fdc82d444e5958d446a66a9c76d0ea60cc 192.168.1.251:7001@17001 myself,master - 0 1639652442000 1 connected 0-5460 cd785a8263f97b26e1437095726a514e7f69d616 192.168.1.251:7002@17002 slave 5d752d97d761a154989132841eabb1e12a46531f 0 1639652442259 5 connected
测试数据读写
192.168.1.252:7001> set key1 one OK 192.168.1.252:7001> set key2 211 -> Redirected to slot [4998] located at 192.168.1.251:7001 OK 192.168.1.253:7001> get key1 -> Redirected to slot [9189] located at 192.168.1.252:7001 "one" 192.168.1.252:7001> get key2 -> Redirected to slot [4998] located at 192.168.1.251:7001 "211"
可以看出redis cluster集群是去中心化的,每个节点都是平等的,连接哪个节点都可以获取和设置数据。
slave节点根本不提供服务,只是作为对应master节点的一个备份。
增加节点
在192.168.1.251上增加1个节点7003
# vim /usr/local/redis-5.0.14/cluster/redis_7003.conf bind 192.168.1.251 port 7003 daemonize yes pidfile "/var/run/redis_7003.pid" logfile "/usr/local/redis-5.0.14/cluster/redis_7003.log" dir "/data1/redis/cluster/redis_7003" masterauth "123456" requirepass "123456" appendonly yes cluster-enabled yes cluster-config-file nodes_7003.conf cluster-node-timeout 15000 # mkdir /data1/redis/cluster/redis_7003 # redis-server /usr/local/redis-5.0.14/cluster/redis_7003.conf
在192.168.1.252上增加1个节点7003
# vim /usr/local/redis-5.0.14/cluster/redis_7003.conf bind 192.168.1.252 port 7003 daemonize yes pidfile "/var/run/redis_7003.pid" logfile "/usr/local/redis-5.0.14/cluster/redis_7003.log" dir "/data1/redis/cluster/redis_7003" masterauth "123456" requirepass "123456" appendonly yes cluster-enabled yes cluster-config-file nodes_7003.conf cluster-node-timeout 15000 # mkdir /data1/redis/cluster/redis_7003 # redis-server /usr/local/redis-5.0.14/cluster/redis_7003.conf
集群中增加节点:
192.168.1.251:7001> CLUSTER MEET 192.168.1.251 7003 OK 192.168.1.251:7001> CLUSTER NODES e8ac4af0dd93b558260f1068b960d10df639ff5b 192.168.1.252:7001@17001 master - 0 1639653625000 3 connected 5461-10922 5d752d97d761a154989132841eabb1e12a46531f 192.168.1.253:7001@17001 master - 0 1639653628000 5 connected 10923-16383 63821c34dc1da011cd018731688e85a508391bdc 192.168.1.252:7002@17002 slave e6db21fdc82d444e5958d446a66a9c76d0ea60cc 0 1639653627000 4 connected 2c763d241297ea8778f76d497632a9e8b7bf8e9b 192.168.1.253:7002@17002 slave e8ac4af0dd93b558260f1068b960d10df639ff5b 0 1639653629480 6 connected e6db21fdc82d444e5958d446a66a9c76d0ea60cc 192.168.1.251:7001@17001 myself,master - 0 1639653626000 1 connected 0-5460 20f69b6053f05aec6b3a4e006115b19752c41a78 192.168.1.251:7003@17003 master - 0 1639653629000 0 connected cd785a8263f97b26e1437095726a514e7f69d616 192.168.1.251:7002@17002 slave 5d752d97d761a154989132841eabb1e12a46531f 0 1639653628000 5 connected
192.168.1.251:7001> CLUSTER MEET 192.168.1.252 7003 OK 192.168.1.251:7001> CLUSTER NODES e8ac4af0dd93b558260f1068b960d10df639ff5b 192.168.1.252:7001@17001 master - 0 1639653675000 3 connected 5461-10922 16cd75f2b35423220330eee59ec6958e0d802b8f 192.168.1.252:7003@17003 master - 0 1639653677000 7 connected 5d752d97d761a154989132841eabb1e12a46531f 192.168.1.253:7001@17001 master - 0 1639653677000 5 connected 10923-16383 63821c34dc1da011cd018731688e85a508391bdc 192.168.1.252:7002@17002 slave e6db21fdc82d444e5958d446a66a9c76d0ea60cc 0 1639653677000 4 connected 2c763d241297ea8778f76d497632a9e8b7bf8e9b 192.168.1.253:7002@17002 slave e8ac4af0dd93b558260f1068b960d10df639ff5b 0 1639653678644 6 connected e6db21fdc82d444e5958d446a66a9c76d0ea60cc 192.168.1.251:7001@17001 myself,master - 0 1639653675000 1 connected 0-5460 20f69b6053f05aec6b3a4e006115b19752c41a78 192.168.1.251:7003@17003 master - 0 1639653677640 0 connected cd785a8263f97b26e1437095726a514e7f69d616 192.168.1.251:7002@17002 slave 5d752d97d761a154989132841eabb1e12a46531f 0 1639653678000 5 connected
新增的节点都是以master身份加入集群的
更换节点身份
将新增的192.168.1.252:7003节点身份改为192.168.1.251:7003的slave
redis-cli -c -h 192.168.1.252 -p 7003 -a 123456 cluster replicate 20f69b6053f05aec6b3a4e006115b19752c41a78
# 查看集群状态 192.168.1.251:7001> CLUSTER NODES e8ac4af0dd93b558260f1068b960d10df639ff5b 192.168.1.252:7001@17001 master - 0 1639654051000 3 connected 5461-10922 16cd75f2b35423220330eee59ec6958e0d802b8f 192.168.1.252:7003@17003 slave 20f69b6053f05aec6b3a4e006115b19752c41a78 0 1639654054906 7 connected 5d752d97d761a154989132841eabb1e12a46531f 192.168.1.253:7001@17001 master - 0 1639654053000 5 connected 10923-16383 63821c34dc1da011cd018731688e85a508391bdc 192.168.1.252:7002@17002 slave e6db21fdc82d444e5958d446a66a9c76d0ea60cc 0 1639654051000 4 connected 2c763d241297ea8778f76d497632a9e8b7bf8e9b 192.168.1.253:7002@17002 slave e8ac4af0dd93b558260f1068b960d10df639ff5b 0 1639654052898 6 connected e6db21fdc82d444e5958d446a66a9c76d0ea60cc 192.168.1.251:7001@17001 myself,master - 0 1639654052000 1 connected 0-5460 20f69b6053f05aec6b3a4e006115b19752c41a78 192.168.1.251:7003@17003 master - 0 1639654053901 0 connected cd785a8263f97b26e1437095726a514e7f69d616 192.168.1.251:7002@17002 slave 5d752d97d761a154989132841eabb1e12a46531f 0 1639654052000 5 connected 192.168.1.251:7001>
查看相应的nodes.conf文件,可以发现有更改,它记录当前集群的节点信息
# cat /data1/redis/cluster/redis_7001/nodes_7001.conf e6db21fdc82d444e5958d446a66a9c76d0ea60cc 192.168.1.251:7001@17001 master - 0 1639653914000 1 connected 0-5460 63821c34dc1da011cd018731688e85a508391bdc 192.168.1.252:7002@17002 slave e6db21fdc82d444e5958d446a66a9c76d0ea60cc 0 1639653913000 4 connected 2c763d241297ea8778f76d497632a9e8b7bf8e9b 192.168.1.253:7002@17002 slave e8ac4af0dd93b558260f1068b960d10df639ff5b 0 1639653913076 6 connected 16cd75f2b35423220330eee59ec6958e0d802b8f 192.168.1.252:7003@17003 slave 20f69b6053f05aec6b3a4e006115b19752c41a78 0 1639653915080 7 connected 20f69b6053f05aec6b3a4e006115b19752c41a78 192.168.1.251:7003@17003 master - 0 1639653912000 0 connected 5d752d97d761a154989132841eabb1e12a46531f 192.168.1.253:7001@17001 master - 0 1639653912073 5 connected 10923-16383 e8ac4af0dd93b558260f1068b960d10df639ff5b 192.168.1.252:7001@17001 myself,master - 0 1639653912000 3 connected 5461-10922 cd785a8263f97b26e1437095726a514e7f69d616 192.168.1.251:7002@17002 slave 5d752d97d761a154989132841eabb1e12a46531f 0 1639653914078 5 connected vars currentEpoch 7 lastVoteEpoch 0
重新分配hash槽
# 重新分配 # redis-cli -c -h 192.168.1.251 -p 7001 -a 123456 --cluster rebalance --cluster-threshold 1 --cluster-use-empty-masters 192.168.1.251:7001 Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe. >>> Performing Cluster Check (using node 192.168.1.251:7001) [OK] All nodes agree about slots configuration. >>> Check for open slots... >>> Check slots coverage... [OK] All 16384 slots covered. >>> Rebalancing across 4 nodes. Total weight = 4.00 Moving 1366 slots from 192.168.1.252:7001 to 192.168.1.251:7003 ###################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################### Moving 1365 slots from 192.168.1.253:7001 to 192.168.1.251:7003 ##################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################### Moving 1365 slots from 192.168.1.251:7001 to 192.168.1.251:7003 ##################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################### [root@node1 cluster]#
模拟master节点挂掉
192.168.1.251
[root@node1 redis_7001]# netstat -lntp |grep 7003 tcp 0 0 192.168.1.251:7003 0.0.0.0:* LISTEN 13662/redis-server tcp 0 0 192.168.1.251:17003 0.0.0.0:* LISTEN 13662/redis-server # kill 13662
可以看到slave节点192.168.1.252:7003变成了master
192.168.1.252:7003> CLUSTER NODES e8ac4af0dd93b558260f1068b960d10df639ff5b 192.168.1.252:7001@17001 master - 0 1639656794000 3 connected 6827-10922 cd785a8263f97b26e1437095726a514e7f69d616 192.168.1.251:7002@17002 slave 5d752d97d761a154989132841eabb1e12a46531f 0 1639656796000 5 connected 16cd75f2b35423220330eee59ec6958e0d802b8f 192.168.1.252:7003@17003 myself,master - 0 1639656794000 9 connected 0-1364 5461-6826 10923-12287 63821c34dc1da011cd018731688e85a508391bdc 192.168.1.252:7002@17002 slave e6db21fdc82d444e5958d446a66a9c76d0ea60cc 0 1639656796000 1 connected 2c763d241297ea8778f76d497632a9e8b7bf8e9b 192.168.1.253:7002@17002 slave e8ac4af0dd93b558260f1068b960d10df639ff5b 0 1639656795472 3 connected e6db21fdc82d444e5958d446a66a9c76d0ea60cc 192.168.1.251:7001@17001 master - 0 1639656797480 1 connected 1365-5460 5d752d97d761a154989132841eabb1e12a46531f 192.168.1.253:7001@17001 master - 0 1639656796476 5 connected 12288-16383 20f69b6053f05aec6b3a4e006115b19752c41a78 192.168.1.251:7003@17003 master,fail - 1639656777897 1639656775391 8 disconnected
现在测试重启刚刚挂掉的master节点
可以看到master节点恢复后变成了slave节点
192.168.1.252:7003> CLUSTER NODES e8ac4af0dd93b558260f1068b960d10df639ff5b 192.168.1.252:7001@17001 master - 0 1639657537000 3 connected 6827-10922 cd785a8263f97b26e1437095726a514e7f69d616 192.168.1.251:7002@17002 slave 5d752d97d761a154989132841eabb1e12a46531f 0 1639657535264 5 connected 16cd75f2b35423220330eee59ec6958e0d802b8f 192.168.1.252:7003@17003 myself,master - 0 1639657537000 9 connected 0-1364 5461-6826 10923-12287 63821c34dc1da011cd018731688e85a508391bdc 192.168.1.252:7002@17002 slave e6db21fdc82d444e5958d446a66a9c76d0ea60cc 0 1639657537000 1 connected 2c763d241297ea8778f76d497632a9e8b7bf8e9b 192.168.1.253:7002@17002 slave e8ac4af0dd93b558260f1068b960d10df639ff5b 0 1639657539273 3 connected e6db21fdc82d444e5958d446a66a9c76d0ea60cc 192.168.1.251:7001@17001 master - 0 1639657538270 1 connected 1365-5460 5d752d97d761a154989132841eabb1e12a46531f 192.168.1.253:7001@17001 master - 0 1639657537000 5 connected 12288-16383 20f69b6053f05aec6b3a4e006115b19752c41a78 192.168.1.251:7003@17003 slave 16cd75f2b35423220330eee59ec6958e0d802b8f 0 1639657537268 9 connected
删除节点
现在我将刚才添加的两个7003节点删除
先删除slave节点
# redis-cli -c -h 192.168.1.251 -p 7001 -a 123456 --cluster del-node 192.168.1.251:7003 20f69b6053f05aec6b3a4e006115b19752c41a78 192.168.1.252:7003> CLUSTER NODES e8ac4af0dd93b558260f1068b960d10df639ff5b 192.168.1.252:7001@17001 master - 0 1639658067000 3 connected 6827-10922 cd785a8263f97b26e1437095726a514e7f69d616 192.168.1.251:7002@17002 slave 5d752d97d761a154989132841eabb1e12a46531f 0 1639658065000 5 connected 16cd75f2b35423220330eee59ec6958e0d802b8f 192.168.1.252:7003@17003 myself,master - 0 1639658064000 9 connected 0-1364 5461-6826 10923-12287 63821c34dc1da011cd018731688e85a508391bdc 192.168.1.252:7002@17002 slave e6db21fdc82d444e5958d446a66a9c76d0ea60cc 0 1639658066000 1 connected 2c763d241297ea8778f76d497632a9e8b7bf8e9b 192.168.1.253:7002@17002 slave e8ac4af0dd93b558260f1068b960d10df639ff5b 0 1639658062000 3 connected e6db21fdc82d444e5958d446a66a9c76d0ea60cc 192.168.1.251:7001@17001 master - 0 1639658066000 1 connected 1365-5460 5d752d97d761a154989132841eabb1e12a46531f 192.168.1.253:7001@17001 master - 0 1639658067827 5 connected 12288-16383
清空master节点中的hash槽
将hash槽分配给其他的master节点
redis-cli -c -h 192.168.1.251 -p 7001 -a 123456 --cluster reshard 192.168.1.252:7003 --cluster-from 16cd75f2b35423220330eee59ec6958e0d802b8f --cluster-to e8ac4af0dd93b558260f1068b960d10df639ff5b --cluster-slots 1024 --cluster-yes redis-cli -c -h 192.168.1.251 -p 7001 -a 123456 --cluster reshard 192.168.1.252:7003 --cluster-from 16cd75f2b35423220330eee59ec6958e0d802b8f --cluster-to e6db21fdc82d444e5958d446a66a9c76d0ea60cc --cluster-slots 1024 --cluster-yes redis-cli -c -h 192.168.1.251 -p 7001 -a 123456 --cluster reshard 192.168.1.252:7003 --cluster-from 16cd75f2b35423220330eee59ec6958e0d802b8f --cluster-to 5d752d97d761a154989132841eabb1e12a46531f
删除master节点
#redis-cli -c -h 192.168.1.251 -p 7001 -a 123456 --cluster del-node 192.168.1.252:7003 16cd75f2b35423220330eee59ec6958e0d802b8f 192.168.1.252:7001> CLUSTER NODES e6db21fdc82d444e5958d446a66a9c76d0ea60cc 192.168.1.251:7001@17001 master - 0 1639658525000 11 connected 1024-6143 63821c34dc1da011cd018731688e85a508391bdc 192.168.1.252:7002@17002 slave e6db21fdc82d444e5958d446a66a9c76d0ea60cc 0 1639658525345 11 connected 2c763d241297ea8778f76d497632a9e8b7bf8e9b 192.168.1.253:7002@17002 slave e8ac4af0dd93b558260f1068b960d10df639ff5b 0 1639658524344 10 connected 5d752d97d761a154989132841eabb1e12a46531f 192.168.1.253:7001@17001 master - 0 1639658526348 12 connected 6144-6826 10923-16383 e8ac4af0dd93b558260f1068b960d10df639ff5b 192.168.1.252:7001@17001 myself,master - 0 1639658525000 10 connected 0-1023 6827-10922 cd785a8263f97b26e1437095726a514e7f69d616 192.168.1.251:7002@17002 slave 5d752d97d761a154989132841eabb1e12a46531f 0 1639658525000 12 connected
节点已经删除,并切已经停止了
这篇关于redis-cluster集群安装的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-08阿里云Redis项目实战入门教程
- 2024-11-08阿里云Redis资料:新手入门与初级使用指南
- 2024-11-08阿里云Redis教程:新手入门及实用指南
- 2024-11-07阿里云Redis学习入门:新手必读指南
- 2024-11-07阿里云Redis学习入门:从零开始的操作指南
- 2024-11-07阿里云Redis学习:初学者指南
- 2024-11-06阿里云Redis入门教程:轻松搭建与使用指南
- 2024-11-02Redis项目实战:新手入门教程
- 2024-10-22Redis入门教程:轻松掌握数据存储与操作
- 2024-10-22Redis缓存入门教程:快速掌握Redis缓存基础知识