当前位置:首页 > 数据库 > redis > 正文内容

redis高可用实现

只想摆烂的运维2023-10-21 23:42:09redis

通过配置redis主从复制和sentinel进行故障自动切换,来保证redis的高可用


redis主从复制流程

主从第一次进行全量复制:

slave连接master,发送psync命令

master节点收到slave的sync命令,执行bgsave命令,生成RDB快照,后续执行的写指令会存储在buffer中

master节点将RDB快照发送给slave节点

slave节点收到传输过来的RDB快照,开始同步数据

master发送完RDB文件后,开始向slave发送存储在buffer中的写指令,slave节点及时同步写指令

此后,master,slave节点间实时的进行增量同步

image.png


redis sentinel(哨兵)流程

如果仅是采用主从复制,当master节点挂掉时,只能手动将slave节点切换成master节点,无法做到故障的自动切换

redis的一种高可用方式,用来监控redis节点状态,通过部署哨兵可以实现故障自动切换

应用服务第一次会连接redis的哨兵,来确定redis master节点,后续直接访问redis master节点

当master节点挂掉时,哨兵会从slave节点重新选举出一个master节点,并将新master节点信息发送给应用服务

应用服务会自动切换,连接新master节点

一般来说,sentinel节点跟redis节点部署在一台主机上,sentinel节点的主从和redis节点的主从保持一致

20180201140129639809.png


主机列表

ip
hostname
角色
172.25.230.47systest-server1master
172.25.230.52systest-server3slave1
172.25.230.53systest-server2slave2


部署信息

redis版本:6.0.19

redis端口:16379

sentinel端口:26379

集群配置为一主二从


redis安装

在三台服务器上安装配置redis

安装过程参考:https://opszzfwordpress.club/post/109.html


配置redis主从

配置从库服务器172.25.230.52和172.25.230.53,连接到主库172.25.230.47上:

redis配置文件:

]# vim /redis/redis/16379.conf
replicaof 172.25.230.47 16379    ##连接redis主库172.25.230.47
masterauth 123456           ##redis主库密码


临时配置方式

登录redis,执行:

/redis/redis/bin/redis-cli -p 16379

127.0.0.1:16379> slaveof 172.25.230.47 16379
127.0.0.1:16379> config rewrite

重启redis

在3台上查看主从状态:info replication

172.25.230.47(主库)

image.png


172.25.230.52(从库)

image.png


172.25.230.53(从库)

image.png


role:角色名称,有master和slave

connected_slaves:连接的从库数量

slave0,slave1:连接的从库相关信息


redis主从优先级配置

参数:slave-priority

在切换时,根据优先级重新选举主节点,一般来说,优先级越小提升为master的可能性越大,设置为0则表示永远不会被提升为master

永久设置,写在redis配置文件中:

slave-priority 100


临时设置,登录redis设置:

127.0.0.1:16379> config set slave-priority 100
OK
127.0.0.1:16379> config get slave-priority
1) "slave-priority"
2) "100"

配置redis哨兵

master节点:172.25.230.47

]# vim /redis/redis/sentinel.conf
##关闭保护模式
protected-mode no
 
##指定sentinel端口
port 26379
 
##设置sentinel为后台运行
daemonize yes
 
##sentinel日志路径
logfile "/redis/redis/log/redis_sentinel.log"
 
##sentinel的pid文件路径
pidfile "/redis/redis/redis_sentinel.pid"
 
#sentinel监控主节点172.25.230.47及端口16379,当1个哨兵判定主节点故障时,进行故障转移
sentinel monitor mymaster 172.25.230.47 16379 2
 
##判断主节点故障的时间,如果超过此设置的时间,则进行故障转移默认30000ms,即30s
sentinel down-after-milliseconds mymaster 30000
 
##故障转移(failover)时间超过多少,判定为转移失败,单位ms,设置为120000ms,即120s
sentinel failover-timeout mymaster 120000
 
##如果redis配置了requirepass,即连接密码,那么需设置主从连接认证密码,否则切换会失败,需要与requirepass中设置的密码一致
sentinel auth-pass mymaster  123456
 
##redis发生故障切换时,同步新master的slave节点个数,一般来说,这个数值越小,切换的速度就会越慢
sentinel parallel-syncs mymaster 1

slave节点:172.25.230.52,172.25.230.55

protected-mode no
port 26379
daemonize yes
logfile "/redis/redis/log/redis_sentinel.log"
pidfile "/redis/redis/redis_sentinel.pid"
 
sentinel monitor mymaster 172.25.230.47 16379 2
sentinel down-after-milliseconds mymaster 30000
sentinel failover-timeout mymaster 120000
sentinel auth-pass mymaster  123456
sentinel parallel-syncs mymaster 1

启动redis sentinel

分别在172.25.230.47;172.25.230.52;172.25.230.53上启动sentinel

/redis/redis/bin/redis-server /redis/redis/sentinel.conf --sentinel

进程情况

172.25.230.47

image.png


172.25.230.52

image.png


172.25.230.53

image.png



哨兵情况

172.25.230.47

info sentinel

image.png

172.25.230.52

info sentinel

image.png


172.25.230.53

info sentinel

image.png


连接情况

172.25.230.47

image.png


172.25.230.52

image.png


172.25.230.53

image.png


模拟redis主从切换

切换master节点

关闭主节点172.25.230.47的redis进程

/redis/redis/bin/redis-cli -a 123456 -p 16379 shutdown


登录172.25.230.52:

查看主从情况

info replication

image.png


查看哨兵情况,发现master节点已变成172.25.230.52:

info sentinel

image.png


查看sentinel配置文件,master节点已变成172.25.230.52:

image.png


redis master节点已切换到172.25.230.52上


将redis master节点切回到172.25.230.47上


启动原主节点172.25.230.47的redis服务:

/redis/redis/bin/redis-server /redis/redis/16379.conf


等待172.25.230.47加入redis集群中


将172.25.230.52的master节点下线:

/redis/redis/bin/redis-cli -h 172.25.230.52 -p 26379 sentinel failover mymaster

172.25.230.52:切换后的sentinel主节点

26379:新sentinel主节点端口

mymaster:新sentinel主节点名称



查看master节点是否已回切

info replication

image.png

info sentinel

image.png


查看sentinel配置文件

image.png

redis master节点已回切


一般来说,redis sentinel发生切换后,会给应用或客户端返回新的master节点信息,这就需要应用配置监听所有的redis sentinel节点

应用配置redis sentinel,以SpringBoot为例:

http://www.manongjc.com/detail/16-zticzdlrnhvaegd.html#google_vignett


扫描二维码推送至手机访问。

版权声明:本文由个人博客发布,如需转载请注明出处。

本文链接:https://opszzfwordpress.club/post/197.html

分享给朋友:
返回列表

上一篇:redis版本升级

没有最新的文章了...

“redis高可用实现” 的相关文章

redis持久化

redis持久化

redis的持久化是指通过设置策略,将redis的数据定期保存到本地磁盘中,以防止数据丢失,方式分为...

redis版本升级

redis版本升级

本次是将redis的版本从5.0.14升级到6.0.19原版本redis目录结构redis的启停脚本...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。