Redis哨兵模式:高可用性与故障转移的全面解析

目录

一、介绍

1.概述

2.实现原理

二、资源清单

三、修改主机名

四、部署Redis主从

1.部署Redis服务(Master、slave01、slave02)

2.编写服务脚本

3.修改配置文件

4.主从配置(slave01、slave02)

5.验证主从

五、部署哨兵节点

1.部署哨兵

2.修改配置文件

3.编写服务脚本

4.查看哨兵状态信息

5.故障转移


一、介绍

1.概述

a.哨兵,主要负责主从节点运行是否正常,以及当主节点出现故障时自动将一个从节点转换为新的节点

b.哨兵是一个独立的进程

c.哨兵由两个部分组成:

        哨兵节点:是特殊的Redis节点,不存储数据

        数据节点:用于存储Redis数据,包括主节点和从节点

2.实现原理

a.哨兵节点的配置文件需添加

#配置哨兵命令      主节点名称    Ip地址        端口号    哨兵节点同意的个数
sentinel monitor  master-name     ip         port     quorum

b.建立连接之后,哨兵会定时的执行3个任务:

每10秒哨兵回向主节点和从节点发送info命令

每2秒哨兵会向主节点和从节点发送自己的信息

每1秒哨兵会向主节点、从节点和其它哨兵发送ping命令

c.选举领导者哨兵的过程

发现主节点客观下线的哨兵节点(A)向每个哨兵发送命令,要求对方选自己为领导者哨兵

如果目标哨兵没有选过其它哨兵,则会同意将A设置为领导者哨兵

如果A发现有超过一般并超过quorum参数值的哨兵节点同意自己成为领导者哨兵,那么A将成为领导者哨兵

当有多个哨兵同时参选时,有可能会出现没有任何节点当选的可能。如果出现此类情况,那么会出现此种情况,那么会等待一个随机时间重新开始下一轮参选,直到选出领导者哨兵

d.对主节点进行恢复的过程

在所有从节点中挑选一个节点作为新的主节点,挑选的基准是,首选过滤掉不健康的从节点;然后选择优先级高的从节点;如果优先级无法区分,则选择赋值偏移量最大的从节点,如果仍然无法区分,则选择runid最小的从节点

更新主从状态,通过slaveof no one命令,让选出来的从节点成为主节点,通过slaveof命令让其它节点成为其从节点

将以及停止服务的旧的主节点更新为新的主节点的从节点,当此节点恢复后,能自动以从节点身份继续服务

二、资源清单

操作系统

IP

主机名

角色

OpenEuler 24.03

192.168.16.142

sentinel01

哨兵节点

OpenEuler 24.03

192.168.16.143

sentinel02

哨兵节点

OpenEuler 24.03

192.168.16.144

sentinel03

哨兵节点

OpenEuler 24.03

192.168.16.145

master

主节点

OpenEuler 24.03

192.168.16.146

slave01

从节点

OpenEuler 24.03

192.168.16.147

slave02

从节点2

三、修改主机名

hostnamectl set-hostname sentinel01
hostnamectl set-hostname sentinel02
hostnamectl set-hostname sentinel03
hostnamectl set-hostname master
hostnamectl set-hostname slave01
hostnamectl set-hostname slave02

四、部署Redis主从

1.部署Redis服务(Master、slave01、slave02)

a.部署Redis服务

dnf install -y tar gcc make
tar zxf redis-6.2.4.tar.gz -C /usr/src
cd /usr/src/redis-6.2.4
make
make PREFIX=/usr/local/redis install
ln -s /usr/local/redis/bin/* /usr/local/bin/

b.创建配置文件目录

mkdir /etc/redis
cp /usr/src/redis-6.2.4/redis.conf /etc/redis/6379.conf

2.编写服务脚本

vi /etc/systemd/system/redis.service

[Unit] 
Description=Redis 
After=network.target 
 
[Service] 
Type=forking 
ExecStart=/usr/local/redis/bin/redis-server /etc/redis/6379.conf    
 
[Install] 
WantedBy=multi-user.target

#或者
cat > /etc/systemd/system/redis.service << EOF 
[Unit] 
Description=Redis 
After=network.target 
 
[Service] 
Type=forking 
ExecStart=/usr/local/redis/bin/redis-server /etc/redis/6379.conf    
 
[Install] 
WantedBy=multi-user.target 
EOF

3.修改配置文件

a.Master节点

vi /etc/redis/6379.conf 

bind 127.0.0.1 192.168.16.145        #75行
daemonize yes    #257行
logfile "/var/log/redis_6379.log"    #302行

systemctl daemon-reload
systemctl start redis
systemctl enable redis
ss -nlpt

b.Slave01节点

vi /etc/redis/6379.conf 

bind 127.0.0.1 192.168.16.146        #75行
daemonize yes    #257行
logfile "/var/log/redis_6379.log"    #302行

systemctl daemon-reload
systemctl start redis
systemctl enable redis
ss -nlpt

c.Slave02节点

vi /etc/redis/6379.conf 

bind 127.0.0.1 192.168.16.147       #75行
daemonize yes    #257行
logfile "/var/log/redis_6379.log"    #302行

systemctl daemon-reload
systemctl start redis
systemctl enable redis
ss -nlpt

4.主从配置(slave01、slave02)

vi /etc/redis/6379.conf

replicaof 192.168.16.145 6379     #477行
systemctl restart redis

5.验证主从

a.Master主节点

[root@bogon redis-6.2.4]# redis-cli 
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.16.146,port=6379,state=online,offset=42,lag=1
slave1:ip=192.168.16.147,port=6379,state=online,offset=42,lag=1

b.Slave从节点

[root@bogon redis-6.2.4]#    redis-cli 
127.0.0.1:6379> info replication
# Replication
role:slave
master_host:192.168.16.145
master_port:6379

五、部署哨兵节点

1.部署哨兵

dnf -y install gcc gcc-c++ make tar
tar -zxvf redis-6.2.4.tar.gz -C /usr/src/ 
cd /usr/src/redis-6.2.4/ 
make && make install 
ln -s /usr/local/redis/bin/* /usr/local/bin
mkdir /etc/redis 
cp /usr/src/redis-6.2.4/redis.conf /etc/redis/6379.conf

2.修改配置文件

vi /etc/redis/6379.conf

sentinel monitor master 192.168.16.145 6379 2  #添加到最后一行
bind 0.0.0.0    #75行
daemonize yes     #257行

3.编写服务脚本

cat > /etc/systemd/system/redis.service << EOF 
[Unit] 
Description=Redis 
After=network.target 
 
[Service] 
Type=forking 
ExecStart=/usr/local/bin/redis-sentinel /etc/redis/6379.conf    
 
[Install] 
WantedBy=multi-user.target 
EOF


systemctl daemon-reload                                    
systemctl start redis                                   
systemctl enable redis

4.查看哨兵状态信息

[root@sentinel01 redis-6.2.4]# redis-cli 
127.0.0.1:6379> info sentinel
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=master,status=ok,address=192.168.16.145:6379,slaves=2,sentinels=3

5.故障转移

a.停止主节点的服务

systemctl stop redis

b.使用Redis1查看

127.0.0.1:6379> info sentinel
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=master,status=ok,address=192.168.16.146:6379,slaves=2,sentinels=3

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值