目录
1.部署Redis服务(Master、slave01、slave02)
一、介绍
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