目录
一、介绍
1.概述
2.实现原理
二、资源清单
三、修改主机名
四、部署Redis主从
1.部署Redis服务(Master、slave01、slave02)
2.编写服务脚本
3.修改配置文件
4.主从配置(slave01、slave02)
5.验证主从
五、部署哨兵节点
1.部署哨兵
2.修改配置文件
3.编写服务脚本
4.查看哨兵状态信息
5.故障转移
a.哨兵,主要负责主从节点运行是否正常,以及当主节点出现故障时自动将一个从节点转换为新的节点
b.哨兵是一个独立的进程
c.哨兵由两个部分组成:
哨兵节点:是特殊的Redis节点,不存储数据
数据节点:用于存储Redis数据,包括主节点和从节点
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
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
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
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
vi /etc/redis/6379.conf
replicaof 192.168.16.145 6379 #477行
systemctl restart redis
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
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
vi /etc/redis/6379.conf
sentinel monitor master 192.168.16.145 6379 2 #添加到最后一行
bind 0.0.0.0 #75行
daemonize yes #257行
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
[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
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