前言
redis主从复制(master-slave)+ Sentinel 哨兵(高可用)
一、下载redis
GitHub:https://github.com/redis/redis/releases
或在本页面下载安装包
二、编译
sudo dnf install -y gcc make
sudo tar -xvf /root/redis-7.4.3.tar.gz
cd /root/redis-7.4.3
make
三、安装
sudo make install
四、启动
redis-server
五、节点 A(master + sentinel)
5.1 修改 Redis 配置文件
sudo mkdir -p /opt/redis_conf
cp /root/redis-7.4.3/redis.conf /opt/redis_conf/
vim /opt/redis_conf/redis.conf
修改为:
bind 0.0.0.0
port 6379
protected-mode no
appendonly yes
5.2 启动 Redis 并设置开机自启
sudo tee /etc/systemd/system/redis.service > /dev/null <<'EOF'
[Unit]
Description=Redis In-Memory Data Store
After=network.target
[Service]
User=root
Group=root
ExecStart=/usr/local/bin/redis-server /opt/redis_conf/redis.conf
ExecStop=/usr/local/bin/redis-cli shutdown
Restart=always
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable redis
sudo systemctl start redis
5.3 创建并配置 Sentinel(路径可以根据安装方式不同)
cp /root/redis-7.4.3/sentinel.conf /opt/redis_conf/
vim /opt/redis_conf/sentinel.conf
修改为:
port 26379
sentinel monitor mymaster 192.168.0.114 6379 2
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 10000
sentinel parallel-syncs mymaster 1
上面 192.168.0.114 是 A 节点自身的 IP,其他节点上要改成 A 节点的实际 IP(192.168.0.114)。
5.4 创建 sentinel 服务
sudo tee /etc/systemd/system/redis-sentinel.service > /dev/null <<'EOF'
[Unit]
Description=Redis Sentinel
After=network.target
[Service]
ExecStart=/usr/local/bin/redis-server /opt/redis_conf/sentinel.conf --sentinel
ExecStop=/bin/kill -s TERM $MAINPID
Restart=always
User=root
Group=root
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reexec
sudo systemctl daemon-reload
sudo systemctl enable redis-sentinel
sudo systemctl start redis-sentinel
六、节点 B 和 C(replica + sentinel)
6.1 修改 Redis 配置文件
sudo mkdir -p /opt/redis_conf
cp /root/redis-7.4.3/redis.conf /opt/redis_conf/
vim /opt/redis_conf/redis.conf
修改为:
bind 0.0.0.0
port 6379
protected-mode no
appendonly yes
replicaof 192.168.0.114 6379
6.2 启动 Redis 并设置开机自启
sudo tee /etc/systemd/system/redis.service > /dev/null <<'EOF'
[Unit]
Description=Redis In-Memory Data Store
After=network.target
[Service]
User=root
Group=root
ExecStart=/usr/local/bin/redis-server /opt/redis_conf/redis.conf
ExecStop=/usr/local/bin/redis-cli shutdown
Restart=always
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable redis
sudo systemctl start redis
6.3 创建并配置 Sentinel
cp /root/redis-7.4.3/sentinel.conf /opt/redis_conf/
vim /opt/redis_conf/sentinel.conf
修改为:
port 26379
sentinel monitor mymaster 192.168.0.114 6379 2
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 10000
sentinel parallel-syncs mymaster 1
上面 192.168.0.114 是 A 节点的 IP。
6.4 创建 sentinel 服务
sudo tee /etc/systemd/system/redis-sentinel.service > /dev/null <<'EOF'
[Unit]
Description=Redis Sentinel
After=network.target
[Service]
ExecStart=/usr/local/bin/redis-server /opt/redis_conf/sentinel.conf --sentinel
ExecStop=/bin/kill -s TERM $MAINPID
Restart=always
User=root
Group=root
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reexec
sudo systemctl daemon-reload
sudo systemctl enable redis-sentinel
sudo systemctl start redis-sentinel
七、验证
7.1 确保 redis 和 sentinel 都在运行
各节点执行:
ps aux | grep redis
7.2 用 redis-cli 登录各节点确认是否主从结构正确
登录某个redis节点:
redis-cli -h <节点IP> -p 6379
如果你已经在目标服务器上,可以省略 -h 参数。
执行 INFO replication 查看主从信息:
INFO replication
如果是主节点,则展示下图信息:
如果是从节点,则展示下图信息:
7.3 断掉 主节点 Redis 流程测试 Sentinel 自动故障转移
在主节点执行:
sudo systemctl stop redis
在从节点上执行:
redis-cli -h <节点IP> -p 6379
INFO replication
从下图可以看出,主节点由原来的192.168.0.114变成了192.168.0.128了。
恢复原主节点192.168.0.114:
sudo systemctl start redis
redis-cli -h <节点IP> -p 6379
INFO replication
可以看出由原来的主节点变成了从节点。
总结
redis主从复制(master-slave)+ Sentinel 哨兵(高可用)