redis哨兵模式下的高可用集群
redis哨兵模式下的高可用集群
-
redis哨兵模式说明
哨兵模式是一种特殊的模式,首先Redis提供了哨兵的命令,哨兵是一个独立的进程,作为进程,它会独立运行。其原理是哨兵通过发送命令,等待Redis服务器响应,从而监控运行的多个Redis实例。
redis+sentinel实现redis高可用。sentinel监控redis节点状态、完成故障转移,如果主节点挂了,将随机选取一个从节点作为主节点,当原主节点恢复正常时,就会变成从节点;因为客户端无法获取redis节点变化、所以客户端需要通过sentinel节点来获取redis的连接。
需三台服务器,ip分别为192.168.64.132、192.168.64.135、192.168..64.134,一开始配置的时候先将192.168.64.132作为主节点
我这里设置为一主两从,master 地址为 192.168.64.132
两个 slave 地址分别为192.168.64.135 192.168.64.134
注:部署时ip视具体情况而定,三台服务器之间能够相互访问
2、软件安装
$ sudo apt update
$ sudo apt install -y redis-server redis-tools redis-sentinel
3、配置数据节点文件
-
三台服务器上同时操作:在用户家目录下(/home/hongpu)新建redis_sentinel目录,将默认的redis配置文件/etc/redis/redis.conf拷贝过来,重命名为redis-16379.conf
$ sudo cp /etc/redis/redis.conf /home/hongpu/redis_sentinel/redis-16379.conf
-
找到主节点(192.168.64.132)配置文件redis-16379.conf里的如下行并做相应修改: sudo vim redis-16379.conf
daemonize yes
port 16379
bind 0.0.0.0
pidfile /var/run/redis/redis-16379.pid
logfile /var/log/redis/redis-16379.log
dbfilename dump-16379.rdb
dir /var/lib/redis
timeout 0
databases 16
masterauth hongpu8192
requirepass hongpu8192
save “” #取消持久化保存5
maxmemory 8gb #最大使用内存配置 >=5G
protected-mode no #关闭保护模式
-
从节点1(192.168.64.134)、从节点2(192.168.64.135)配置文件redis-16379.conf需修改内容如下:
daemonize yes
port 16379
bind 0.0.0.0
pidfile /var/run/redis/redis-16379.pid
logfile /var/log/redis/redis-16379.log
dbfilename dump-16379.rdb
dir /var/lib/redis
timeout 0
databases 16
masterauth hongpu8192
requirepass hongpu8192
slaveof 192.168.64.132 16379
save “”#取消持久化保存
maxmemory 8gb #最大使用内存配置 >=5G
protected-mode no #关闭保护模式
4、redi-server启动验证
-
使用如下命令按照132,135,134顺序在三台服务器上分别启动redis服务:
$ sudo redis-server /home/hongpu/redis_sentinel/redis-16379.conf
-
查看redis启动进程:
ps -ef|grep redis
-
确认主从关系:
$ redis-cli -h 192.168.64.132 -p 16379 -a hongpu8192 info replication
5、redis-sentinel监控部署实现自动故障切换
-
三台服务器上同时操作:将默认的sentinel配置文件/etc/redis/sentinel.conf拷贝至用户/home/hongpu/redis_sentinel/下,并重命名为sentinel-16380.conf
$ sudo cp /etc/redis/sentinel.conf /home/hongpu/redis_sentinel/sentinel-16380.conf
-
三个节点配置文件sentinel-16380.conf需修改的内容完全一样,如下:
bind 0.0.0.0
port 16380
daemonize yes
sentinel monitor mymaster 192.168.64.132 16379 2
sentinel auth-pass mymaster hongpu8192
sentinel down-after-milliseconds mymaster 3000
sentinel failover-timeout mymaster 180000
sentinel parallel-syncs mymaster 1
logfile /var/log/redis/sentinel-16380.log
dir /var/lib/redis
坑点:sentinel monitor mymaster 192.168.64.132 16379 2 必须放在sentinel 其他配置前面,否则报错:
6、redis-sentinel启动验证
-
使用如下命令在三台服务器上分别启动redis-sentinel服务:
$ sudo redis-sentinel /home/hongpu/redis_sentinel/sentinel-16380.conf
-
redis-sentinel确认:
$
7、配置redis-server、redis-sentinel开机自动启动
编辑三台服务器/etc/rc.local文件
$ sudo vim /etc/rc.local
在exit 0这行前添加内容如下:
/usr/bin/sudo /usr/bin/redis-server /home/hongpu/redis_sentinel/redis-16379.conf
/usr/bin/sudo /usr/bin/redis-sentinel /home/hongpu/redis_sentinel/sentinel-16380.conf