redis–生产环境搭建–04–哨兵模式的安装和配置
前提
使用hd用户登陆
完成基础环境搭建
https://blog.csdn.net/zhou920786312/article/details/118212302
一、机器
-
如果设置Redis服务访问密码,各主从节点、哨兵节点都必须设置相同密码。
-
redis哨兵模式通过检测主从redis节点的健康状态,发现主节点故障后能发通知、从节点主动接管,实现故障自动切换,从而实现redis的高可用。
-
哨兵节点个数必须为奇数,至少要有1个节点;
- 如果需要哨兵节点的高可用,至少要有3个哨兵节点。
- 因此在生产环境使用时,哨兵节点加上主从节点,实现高可用至少需要5个节点。
-
本文以在同一机器机安装5个节点为例说明,其中3个为哨兵节点:监听端口为26379、26380、26381,1个为主节点:监听端口为6379,1个为从节点:监听端口为6380。
二、安装配置各节点redis服务
2.1、redis主从节点
参考:redis–生产环境搭建–03–主从模式的安装和配置
2.2、哨兵节点
2.2.1、安装哨兵节点Redis服务
- 分别为三个哨兵节点安装redis服务,服务端口分别设置为:26379、26380、26381
- 安装方法参见单节点方式安装和配置中的安装redis在不同端口
cd /home/hd/redis-6.2.6
sudo REDIS_PORT=26379 REDIS_CONFIG_FILE=/etc/redis/26379.conf REDIS_LOG_FILE=/var/log/redis_26379.log REDIS_DATA_DIR=/var/lib/redis/26379 REDIS_EXECUTABLE="command -v redis-server" ./utils/install_server.sh
sudo REDIS_PORT=26380 REDIS_CONFIG_FILE=/etc/redis/26380.conf REDIS_LOG_FILE=/var/log/redis_26380.log REDIS_DATA_DIR=/var/lib/redis/26380 REDIS_EXECUTABLE="command -v redis-server" ./utils/install_server.sh
sudo REDIS_PORT=26381 REDIS_CONFIG_FILE=/etc/redis/26381.conf REDIS_LOG_FILE=/var/log/redis_26381.log REDIS_DATA_DIR=/var/lib/redis/26381 REDIS_EXECUTABLE="command -v redis-server" ./utils/install_server.sh
# 安装路径
/usr/local/bin/redis-server
# 查看redis 服务
ps -ef | grep redis
2.2.2、停止哨兵节点redis服务
sudo /etc/init.d/redis_26379 stop
sudo /etc/init.d/redis_26380 stop
sudo /etc/init.d/redis_26381 stop
2.2.3、调整哨兵节点配置
01、调整哨兵节点1
准备哨兵配置文件,输入以下命令
sudo cp ./sentinel.conf /etc/redis/26379.conf
编辑配置文件/etc/redis/26379.conf
sudo vim /etc/redis/26379.conf
修改内容
port 26379
# 用守护线程的方式启动,redis会在后台运行
daemonize yes
pidfile /var/run/redis_26379.pid
logfile /var/log/redis_26379.log
dir /var/lib/redis/26379
# 192.168.187.139和6388应该根据实际情况设置为redis主节点的ip和实际端口,
# 此处为本机和缺省端口
sentinel monitor appmaster 192.168.187.139 6388 2
sentinel down-after-milliseconds appmaster 10000
sentinel failover-timeout appmaster 180000
sentinel parallel-syncs appmaster 1
# 如果需要本机以外访问redis服务,需要绑定0.0.0.0,在文件尾增加以下行
bind 0.0.0.0
# 设置访问密码
sentinel auth-pass appmaster 123456
解释
1. sentinel monitor <master-name> <ip> <redis-port> <quorum>
1. 告诉sentinel去监听地址为ip:port的一个master
2. master-name:可以自定义
3. quorum:是一个数字,指明当有多少个sentinel认为一个master失效时,master才算真正失效
4. master-ip:要写真实的ip地址而不要用回环地址(127.0.0.1)。
2. down-after-milliseconds:
1. 参数指定了哨兵检查主redis时不回应的时间期限, 超过该时间不回应就认为主redis不可用
2. 单位毫秒。
3. 实际部署需要根据切换时间要求来设置。
3. failover-timeout
1. 表示多个哨兵做主从切换时,一个执行失败了,另一个执行需要等待的时间,保证两个哨兵只能依次执行切换操作
2. 单位毫秒
3. 实际部署需要根据切换时间要求来设置。
4. parallel-syncs
1. 新的master切换之后,同时有多少个slave被切换到去连接新master,重新做同步
2. 数字越低,花费的时间越多。
1. 假设你的redis是1个master,4个slave,然后master宕机了,4个slave中有1个切换成了master,剩下3个slave就要挂到新的master上面去。
1. 如果parallel-syncs是1,那么3个slave,一个一个地挂接到新的master上面去,1个挂完,而且从新的master sync完数据之后,再挂接下一个。
2. 如果parallel-syncs是3,那么一次性就会把所有slave挂接到新的master上去。
02、按照以上步骤01,依次调整其它两个哨兵节点的配置,注意其中使用26379端口号的地方都需要换成对应哨兵的端口号。
2.2.4、修改哨兵节点启动脚本
01、修改哨兵节点1启动脚本
编辑/etc/init.d/redis_26379
sudo vim /etc/init.d/redis_26379
找到以下项
$EXEC $CONF
修改为
$EXEC $CONF --sentinel
02、按照以上步骤01,依次调整其它两个哨兵节点的启动脚本,注意其中使用26379端口号的地方都需要换成对应哨兵的端口号
启动哨兵节点redis服务
sudo /etc/init.d/redis_26379 start
sudo /etc/init.d/redis_26380 start
sudo /etc/init.d/redis_26381 start
ps -ef | grep redis
三、验证
3.1、发现主节点故障后,实现故障自动切换
6388主节点挂机
127.0.0.1:6388> shutdown
not connected>
6389从节点自动切换为主节点
info Replication