我是靠谱客的博主 高兴紫菜,最近开发中收集的这篇文章主要介绍13-redis哨兵:在项目中以经典的3节点方式部署哨兵集群,对哨兵节点进行管理以及高可用redis集群的容灾演练1、哨兵的配置文件搭建哨兵集群对项目中的哨兵节点进行管理以及高可用redis集群的容灾演练,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

部署3节点哨兵集群模式,如何基于哨兵进行故障转移,还有一些企业级的配置方案。

1、哨兵的配置文件

sentinel.conf

最小的配置

每一个哨兵都可以去监控多个maser-slaves的主从架构,因为可能你的公司里,为不同的项目,部署了多个master-slaves的redis主从集群,相同的一套哨兵集群,就可以去监控不同的多个redis主从集群

你自己给每个redis主从集群分配一个逻辑的名称

# 1

# 1
port           端口号
bind 192.168.94.151    和redis的bind一样
daemonize yes          后台运行
sentinel monitor mymaster 127.0.0.1 6379 2        
sentinel down-after-milliseconds mymaster 60000
sentinel failover-timeout mymaster 180000
sentinel parallel-syncs mymaster 1
dir /temp              工作目录


# 2
port                  端口号
bind 192.168.94.151    和redis的bind一样
daemonize yes         后台运行
sentinel monitor resque 192.168.1.3 6380 4
sentinel down-after-milliseconds resque 10000
sentinel failover-timeout resque 180000
sentinel parallel-syncs resque 5
dir /temp           工作目录
  • sentinel monitor mymaster 127.0.0.1 6379 :

类似这种配置,来指定对一个master的监控,给监控的master指定的一个名称,因为后面分布式集群架构里会讲解,可以配置多个master做数据拆分。mymaster为自己起的集群的名字,127.0.0.1 master的ip   6379master的端口号  2 当有两个sentinel节点认为主节点出问题是,就可以发起failover,如果50%以上节点同意,就切换主节点成功

  • sentinel down-after-milliseconds mymaster 60000 

在一定的时间内,没有PING通master节点,这个节点就认为master已经down,将其标记为主观下线

  • sentinel failover-timeout mymaster 180000

在该时间内未完成failover(故障转移),则failover(故障转移)失败

  • sentinel parallel-syncs mymaster 1

在执行故障转移时最多可以有多少个从节点同步新的主master

 

这是最小的哨兵配置,如果发生了master-slave故障转移,或者新的哨兵进程加入哨兵集群,那么哨兵会自动更新自己的配置文件

sentinel monitor master-group-name hostname port quorum

quorum的解释如下:

(1)至少多少个哨兵要一致同意,master进程挂掉了,或者slave进程挂掉了,或者要启动一个故障转移操作
(2)quorum是用来识别故障的,真正执行故障转移的时候,还是要在哨兵集群执行选举,选举一个哨兵进程出来执行故障转移操作
(3)假设有5个哨兵,quorum设置了2,那么如果5个哨兵中的2个都认为master挂掉了; 2个哨兵中的一个就会做一个选举,选举一个哨兵出来,执行故障转移; 如果5个哨兵中有3个哨兵都是运行的,那么故障转移就会被允许执行

down-after-milliseconds,超过多少毫秒跟一个redis实例断了连接,哨兵就可能认为这个redis实例挂了

parallel-syncs,新的master别切换之后,同时有多少个slave被切换到去连接新master,重新做同步,数字越低,花费的时间越多
假设你的redis是1个master,4个slave

然后master宕机了,4个slave中有1个切换成了master,剩下3个slave就要挂到新的master上面去

这个时候,如果parallel-syncs是1,那么3个slave,一个一个地挂接到新的master上面去,1个挂接完,而且从新的master sync完数据之后,再挂接下一个

如果parallel-syncs是3,那么一次性就会把所有slave挂接到新的master上去

failover-timeout,执行故障转移的timeout超时时长

 

搭建哨兵集群

在eshop-cache03上再部署一个redis

只要安装redis就可以了,不需要去部署redis实例的启动,03机器我们用来运行一个哨兵的。

安装步骤看之前文章-9-在项目中部署redis的读写分离架构(包含节点间认证口令)

1、3节点的正式的配置

哨兵默认用26379端口,默认不能跟其他机器在指定端口连通,只能在本地访问

  • 统一哨兵配置文件位置和工作目录。
mkdir /opt/redisdir/sentinal/         配置文件存放
mkdir -p /opt/redisdir/sentinal/work/5000    哨兵工作目录

/etc/sentinel/5000.conf

 

  • 01机器哨兵配置文件
port 5000
bind 192.168.1.51
dir /opt/redisdir/sentinal/work/5000
sentinel monitor mymaster 192.168.1.51 6379 2
sentinel down-after-milliseconds mymaster 30000
sentinel failover-timeout mymaster 60000
sentinel parallel-syncs mymaster 1
  • 02机器哨兵配置
port 5000
bind 192.168.1.52
dir /opt/redisdir/sentinal/work/5000
sentinel monitor mymaster 192.168.1.51 6379 2
sentinel down-after-milliseconds mymaster 30000
sentinel failover-timeout mymaster 60000
sentinel parallel-syncs mymaster 1
  • 03机器哨兵配置
port 5000
bind 192.168.1.153
dir /opt/redisdir/sentinal/work/5000
sentinel monitor mymaster 192.168.1.51 6379 2
sentinel down-after-milliseconds mymaster 30000
sentinel failover-timeout mymaster 60000
sentinel parallel-syncs mymaster 1

 

2、启动哨兵进程

在01、02、03三台机器上,分别启动三个哨兵进程,组成一个集群,观察一下日志的输出

#启动方式一
redis-sentinel /opt/redisdir/sentinal/5000.conf
#启动方式二
redis-server /opt/redisdir/sentinal/5000.conf --sentinel

日志里会显示出来,每个哨兵都能去监控到对应的redis master,并能够自动发现对应的slave

哨兵之间,互相会自动进行发现,用的就是之前说的pub/sub,消息发布和订阅channel消息系统和机制

4、检查哨兵状态

redis-cli -h 192.168.31.187 -p 5000  使用redis客户端登录哨兵

sentinel master mymaster   查看该哨兵监听的主节点
sentinel slaves mymaster    查看该哨兵监听的主节点下的从节点信息
sentinel sentinels mymaster  查看该哨兵监听的主节点的其余的监听该节点的哨兵

sentinel get-master-addr-by-name mymaster   获取主节点的信息

 

对项目中的哨兵节点进行管理以及高可用redis集群的容灾演练


1、哨兵节点的增加和删除

  • 增加sentinal,哨兵之间会自动发现
  • 删除sentinal的步骤
(1)停止sentinal进程
(2)SENTINEL RESET *,在所有sentinal上执行,清理所有的master状态
(3)SENTINEL MASTER mastername,在所有sentinal上执行,查看所有sentinal对数量是否达成了一致

2、slave的永久下线

让master摘除某个已经下线的slave:SENTINEL RESET mastername,在所有的哨兵上面执行

3、slave切换为Master的优先级

slave->master选举优先级:从节点配置slave-priority,值越小优先级越高

4、基于哨兵集群架构下的安全认证

  • 每个slave都有可能切换成master,所以每个实例都要配置两个指令:

master上启用安全认证,requirepass
master连接口令,masterauth

  • sentinal哨兵配置:

sentinel auth-pass <master-group-name> <pass>

5、容灾演练

通过哨兵看一下当前的master:SENTINEL get-master-addr-by-name mymaster

把master节点kill -9掉,pid文件也删除掉

查看sentinal的日志,是否出现+sdown字样,识别出了master的宕机问题; 然后出现+odown字样,就是指定的quorum哨兵数量,都认为master宕机了

(1)三个哨兵进程都认为master是sdown了
(2)超过quorum指定的哨兵进程都认为sdown之后,就变为odown
(3)哨兵1是被选举为要执行后续的主备切换的那个哨兵
(4)哨兵1去新的master(slave)获取了一个新的config version
(5)尝试执行failover
(6)投票选举出一个slave区切换成master,每隔哨兵都会执行一次投票
(7)让salve,slaveof noone,不让它去做任何节点的slave了; 把slave提拔成master; 旧的master认为不再是master了
(8)哨兵就自动认为之前的187:6379变成了slave了,19:6379变成了master了
(9)哨兵去探查了一下187:6379这个salve的状态,认为它sdown了

所有哨兵选举出了一个,来执行主备切换操作

如果哨兵的majority都存活着,那么就会执行主备切换操作

再通过哨兵看一下master:SENTINEL get-master-addr-by-name mymaster

尝试连接一下新的master

故障恢复,再将旧的master重新启动,查看是否被哨兵自动切换成slave节点

(1)手动杀掉master
(2)哨兵能否执行主备切换,将slave切换为master
(3)哨兵完成主备切换后,新的master能否使用
(4)故障恢复,将旧的master重新启动
(5)哨兵能否自动将旧的master变为slave,挂接到新的master上面去,而且也是可以使用的

6、哨兵的生产环境部署

daemonize yes
logfile /var/log/sentinal/5000

mkdir -p /var/log/sentinal/5000

最后

以上就是高兴紫菜为你收集整理的13-redis哨兵:在项目中以经典的3节点方式部署哨兵集群,对哨兵节点进行管理以及高可用redis集群的容灾演练1、哨兵的配置文件搭建哨兵集群对项目中的哨兵节点进行管理以及高可用redis集群的容灾演练的全部内容,希望文章能够帮你解决13-redis哨兵:在项目中以经典的3节点方式部署哨兵集群,对哨兵节点进行管理以及高可用redis集群的容灾演练1、哨兵的配置文件搭建哨兵集群对项目中的哨兵节点进行管理以及高可用redis集群的容灾演练所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(52)

评论列表共有 0 条评论

立即
投稿
返回
顶部