搭建Redis集群
上文中说了三种Redis搭建的模式,分别是主从模式、哨兵模式、Cluster模式,关于前两种网上有着非常多的教程,这里就不再重新演示了,这里着重演示一下如何去搭建一个Redis Cluster集群。
环境准备
CentOS 7,Redis5.0.4
场景描述
本次会启动三台CentOS 7服务器,每台服务器上搭载三个Redis实例,一主二从,一共三个Master实例,六个Slave实例。
清单如下:
Master 1:IP:192.168.43.101 Port:7001 Master 2:IP:192.168.43.102 Port:7002 Master 3:IP:192.168.43.103 Port:7003 Slave 1:IP:192.168.43.101 Port:6001 Slave 2:IP:192.168.43.102 Port:6002 Slave 3:IP:192.168.43.103 Port:6003 Slave 4:IP:192.168.43.101 Port:6004 Slave 5:IP:192.168.43.102 Port:6005 Slave 6:IP:192.168.43.103 Port:6006
修改配置文件
熟悉Redis的应该明白,所谓Redis实例,实际上就是一个又一个的配置文件。要在服务器上启动多台不同Redis,实际上就是使用不同的配置文件来启动Redis,所以第一步我们要先对集群中的每一个Redis实例配置不一样的配置文件。
绑定Redis地址
下列三台主机上的配置文件均为Master节点配置文件(修改bind属性)
修改端口号
将端口号修改为自定义的端口号,默认为6379,修改为我们自定义的端口号。
开启集群模式并设置集群配置文件
将cluster-enabled 设置为yes,并将cluster-config-file设置为自定义的文件。
这里定义为nodes-端口号.conf
修改集群RDB快照和AOF文件的存放位置
修改dir属性,这里定义为/home/redis-cluster/redis-master/
修改集群密码
修改masterauth属性为Redis(RequirePass)密码。
开启AOF持久化
修改appendonly属性
appendonly yes
对六台Slave节点进行同样的修改配置操作
注意:上述指定的文件夹和文件名原则上对于每个redis实例都应该是唯一的,便于区分。
启动Redis实例
运行命令:
#第一台主机 /usr/local/bin/redis-server /home/redis-cluster/redis-master/redis-master-7001.conf /usr/local/bin/redis-server /home/redis-cluster/redis-slave/redis-slave-6001.conf /usr/local/bin/redis-server /home/redis-cluster/redis-slave/redis-slave-6004.conf #第二台主机 /usr/local/bin/redis-server /home/redis-cluster/redis-master/redis-master-7002.conf /usr/local/bin/redis-server /home/redis-cluster/redis-slave/redis-slave-6002.conf /usr/local/bin/redis-server /home/redis-cluster/redis-slave/redis-slave-6005.conf #第三台主机 /usr/local/bin/redis-server /home/redis-cluster/redis-master/redis-master-7003.conf /usr/local/bin/redis-server /home/redis-cluster/redis-slave/redis-slave-6003.conf /usr/local/bin/redis-server /home/redis-cluster/redis-slave/redis-slave-6006.conf
查看进程 ps -ef | grep redis:
可以看到现在启动的redis实例已经是集群模式的了。
搭建集群
输入命令:
/usr/local/bin/redis-cli -a Object --cluster create --cluster-replicas 2 192.168.43.101:7001 192.168.43.102:7002 192.168.43.103:7003 192.168.43.101:6001 192.168.43.102:6002 192.168.43.103:6003 192.168.43.101:6004 192.168.43.102:6005 192.168.43.103:6006
其中 --cluster-replicas 2代表每个Master携带2个Slave,那么就是三个Master,每个Master携带两个Slave。
示意图如下:
我们可以看到,Redis将三台机器连成了一个整体,Master7001的Slave指向了其它两台服务器上的Slave,而其它两台服务器的Master也同样跨服务器指向了,这就是RedisCluster高可用的策略,假设有一台服务器完整地宕机了,由于自己的Slave节点存在于别的服务器上,数据也能重新通过选举选举的方式恢复,不易引起数据的丢失。
另外我们可以看到,我们在上文说过,Cluster集群模式将集群分为16384个槽,这里体现为0-16383,分布到了每一个Master节点上,这对我们之前的理论部分做了验证。