redis集群高可用架设
所有机器安装
51 主节点 52从 53从
安装epel源
yum -y install epel-release
安装remi源
yum -y install http://rpms.remirepo.net/enterprise/remi-release-7.rpm
安装Redis
yum --enablerepo=remi install -y redis
报错mnt目录没挂载光盘
failure: repodata/repomd.xml from CentOS7: [Errno 256] No more mirrors to try.
file:///mnt/repodata/repomd.xml: [Errno 14] curl#37 - "Couldn't open file /mnt/repodata/repomd.xml"
mount /dev/cdrom /mnt
cp /etc/redis.conf /etc/redis.conf.bak
配置51 master
[root@xuegod91]# vi /etc/redis.conf
改:69 bind 127.0.0.1
为:69 bind 0.0.0.0
改:protected-mode yes
为:protected-mode no
配置52 slave
vi /etc/redis.conf
改:69 bind 127.0.0.1
为:69 bind 0.0.0.0 #redis监听的地址,改为0.0.0.0表示在所有网卡接口上进行监听
改:88 protected-mode yes
为:protected-mode no
改: 286 # replicaof <masterip> <masterport>
为: 286 replicaof 192.168.1.51 6379
scp /etc/redis.conf 192.168.1.53:/etc/redis.conf
配置53 slave
vi /etc/redis.conf
改:69 bind 127.0.0.1
为:69 bind 0.0.0.0 #redis监听的地址,改为0.0.0.0表示在所有网卡接口上进行监听
改:88 protected-mode yes
为:protected-mode no
改: 286 # replicaof <masterip> <masterport>
为: 286 replicaof 192.168.1.51 6379
ps -aux | grep redis
8、在51上配置sentinel1
vim /etc/redis-sentinel.conf
改:17 # protected-mode no
为:17 protected-mode no
21 port 26379 #默认,保持不变
改:26 daemonize no
为:26 daemonize yes
改:84 sentinel monitor mymaster 127.0.0.1 6379 2
为:84 sentinel monitor mymaster 192.168.1.51 6379 2
注:# sentinel monitor <master-name> <ip> <redis-port> <quorum> 每项含意如下:
<master-name>为集群名称,可以自定义,如果同时监控有多组redis集群时,<master-name>不能一样。
<ip> 主节点的IP地址,<redis-port>主节点的端口号。
<quorum>主节点对应的quorum法定数量,用于定义Sentinel的数量,是一个大于值尽量使用奇数,如果Sentinel有3个,则指定为2即可,如果有4个,不能够指定为2,避免导致集群分裂。最后的数字2指定的值,表明如果有2个sentinels无法连接master,才认为master挂了。
改:113 sentinel down-after-milliseconds mymaster 30000 #默认单位是毫秒,配成10秒
为:113 sentinel down-after-milliseconds mymaster 10000
121 sentinel parallel-syncs mymaster 1 #保存默认
改:146 sentinel failover-timeout mymaster 180000
为:146 sentinel failover-timeout mymaster 60000
9、把redis-sentinel.conf发给52和53
[root@xuegod63 ~]# scp /etc/redis-sentinel.conf 192.168.1.52:/etc/redis-sentinel.conf
[root@xuegod63 ~]# scp /etc/redis-sentinel.conf 192.168.1.53:/etc/redis-sentinel.conf
10、启动Redis 和sentinel服务器
systemctl restart redis && systemctl restart redis-sentinel
systemctl start redis && systemctl start redis-sentinel
systemctl start redis && systemctl start redis-sentinel
11、模拟故障
查看当前主从状态
[root@51 ~]# redis-cli -h 192.168.1.52
192.168.1.52:6379> info replication
systemctl stop redis #在51上关闭master
redis-cli -h 192.168.1.53
192.168.1.53:6379> info replication
# Replication
role:slave
master_host:192.168.1.52
12、恢复xuegod51
# systemctl start redis
# redis-cli -h 192.168.1.51
192.168.1.51:6379> info replication
52 本地查看从主机有哪些
127.0.0.1:6379> info replication
13、查看Sentinel信息
[root@xuegod63 ~]# redis-cli -h 192.168.1.63 -p 26379 #查看Sentinel信息。
[root@xuegod64 ~]# redis-cli -h 192.168.1.63 -p 26379
192.168.1.63:26379> info sentinel
192.168.1.63:26379> exit
注意:将来客户端应连接Sentinel,向Sentinel发请求去寻址,并根据Sentinel的反馈,进行连接新的Redis主节点,这一点需要使用Redis专用客户端来实现。Redis客户端会根据Sentinel返回的新节点IP进行连接。这一块是开发人员的事情了。如果java中的JedisClient就提供了使用Sentinel的功能。

浙公网安备 33010602011771号