本文是Redis系列第5篇,前4篇欢迎移步
【Redis】不卡壳的 Redis 学习之路:从十大数据类型开始入手_AQin1012的博客-CSDN博客关于Redis的数据类型,各个文章总有些小不同,我们这里讨论的是Redis 7.0,为确保准确,我们直接看官网。https://blog.csdn.net/aqin1012/article/details/130365083
【Redis】持久化机制详解:从RDB到AOF,你需要知道的一切_AQin1012的博客-CSDN博客持久化其实就4个单词:加强数据安全Redis支持两种不同的持久化机制,RDB和AOF。https://blog.csdn.net/aqin1012/article/details/130481261
【Redis】不卡壳的 Redis 学习之路:事务_AQin1012的博客-CSDN博客数据库中的事务是指在一次与数据库连接的会话中,所有的SQL语句,要么都成功,要么都失败。在Redis中,事务是指可以一次执行多个命令,本质是一组命令的集合。一个事务中的所有命令都会被序列化,按顺序地串行执行而不会被其他命令插入开启:以MULTI开始一个事务入队:将多个命令入队到事务中,接到这些命令并不会立即执行,而是放到等待执行的事务队列里面执行:由EXEC命令触发事务。https://blog.csdn.net/aqin1012/article/details/131474273?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22131474273%22%2C%22source%22%3A%22aqin1012%22%7D
【Redis】高可用之一:复制(replica)_AQin1012的博客-CSDN博客官网地址: https://redis.io/docs/management/replication/其实就是主从复制,master以写为主,slave以读为主当master数据变化的时候,自动将新的数据异步同步到其它slave数据库主机(master)能读能写,从机(slave)只能读无论主机已经写了多少数据,从机一旦启动,就会全部复制过来,后续主机写,从机跟配置文件命令配置使用配置文件进行主从配置时,如果主机挂了,从机不会变化,还可以提供读的功能,等待主机恢复(重启后主从关系仍在)https://blog.csdn.net/aqin1012/article/details/131531792?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22131531792%22%2C%22source%22%3A%22aqin1012%22%7D
本文目录
什么是哨兵
功能
案例演示实战步骤
架构介绍
具体操作
配置
启动
查看日志
模拟主机宕机
总结
故障转移
选举Leader实施故障转移
故障转移具体步骤
哨兵“食用”建议
上一篇我们介绍了复制,正是由于复制的痛点,于是产生了哨兵(sentinel)
哨兵会巡查监控后台master主机,查看是否存在故障,如果故障了,就会根据投票数自动将某一个从库转换为新主库,继续对外服务(解决复制的痛点)
官方网址
https://redis.io/docs/management/sentinel/
简单来讲,哨兵就是一种无人值守的运维机制
redis的一主二从配置建议参考
【Redis】高可用之复制(replica)https://blog.csdn.net/aqin1012/article/details/131531792
配置好一主二从后,将解压缩后的Redis/opt目录下的sentinel.conf 复制到自定义的aqinredis文件夹中
接着进行相关配置修改
(以上都可以按照配置Redis一主二从的文章对配置文件Redis.conf的修改)
设置要监控的主机服务器
下面提供需要配置的全部参数(跟着操作的同学直接拷贝即可,注意对应参数的修改)
bind 0.0.0.0
daemonize yes
protected-mode no
port <端口号>
logfile "/aqinredis/sentinel<端口号>.log"
pidfile /var/run/redis-sentinel<端口号>.pid
dir /<自定义存放的文件夹>
sentinel monitor mymaster <主机IP> <主机端口号> 2
sentinel auth-pass mymaster <密码>
按本文操作的3台配置分别如下图
bind 0.0.0.0 代表不限制就类似于把bind 127.0.0.1 注释掉
执行redis-sentinel启动(记得添加软连接)
依次使用各自的配置文件启动
启动成功~
查看哨兵日志,可以看到其监控的主从信息,以及烧饼集群的信息
原先的配置文件也会自动写入一些内容(下图红框框)
接下来我们模拟主机宕机
此时有以下问题需要注意
过一段时间以后(给哨兵选举的时间)再尝试获取可以发现,原先的数据还在
尝试插入数据,会发现6381上可以,6380不行(还是只读)
查看下此时两台从机的信息
我们查看下sentinel日志,看看发生了什么
sentinel26379.log
sentinel26380.log
sentinel26381.log
从上面三个哨兵日志可以看到,哨兵在确认主机宕机后(我们的案例配置的quorum是2,即3个哨兵中至少有2个认为主机宕机就确认主机宕机),对从机进行了新主机的投票选举,最终决定将主机从172.17.0.2 6379切换成了172.17.0.4 6381
重启172.17.0.2 6379,并查看其主从信息
可以看到,此时6379变成了6381的从机(不会出现主机冲突)
由于目前6379是从机,因此也无法进行写操作
总结我们上面提到的三个问题:
当主节点被判断客观下线后,各个哨兵节点会进行协商,先选举出一个领导者(leader),并由该leader进行接下来的故障迁移(failover),那么这个Leader是如何选择出来的呢?
我嫩还是从日志入手
由sentinel26379.log可以看到,sentinel26379的ID是047a7c7a62a803bf8fc63b7033f9b52b4279c9c2,他把票投给了ID为b60ef35fc9e900b792f3b54a6ce49cc8b8d19ecc的sentinel26381
由sentinel26380.log可以看到,sentinel26380的ID是a5b3bcfca0e27c760ef4d0b2a88022146600c16c,他把票投给了他自己
由sentinel26381.log可以看到,sentinel26381的ID是b60ef35fc9e900b792f3b54a6ce49cc8b8d19ecc,他也把票投给了他自己
此时sentinel26381有2票,sentinel26380有1票,因此,sentinel26381当选leader,并执行后续的故障转移流程选出新的主机
哨兵的Leader是怎么选的?
通过raft算法,这个算值得单独出一篇来讲( ̄∇ ̄)/
总结
上述的failover操作均由sentinel自己独立完成,完全无需人工干预
于是我们有了下一篇——集群!敬请期待( ̄∇ ̄)/~~~~~~~~~