日常记录-redis主从复制(master-slave)+ Sentinel 哨兵(高可用)

文章目录

  • 前言
  • 一、下载redis
  • 二、编译
  • 三、安装
  • 四、启动
  • [五、节点 A(master + sentinel)](#五、节点 A(master + sentinel))
    • [5.1 修改 Redis 配置文件](#5.1 修改 Redis 配置文件)
    • [5.2 启动 Redis 并设置开机自启](#5.2 启动 Redis 并设置开机自启)
    • [5.3 创建并配置 Sentinel(路径可以根据安装方式不同)](#5.3 创建并配置 Sentinel(路径可以根据安装方式不同))
    • [5.4 创建 sentinel 服务](#5.4 创建 sentinel 服务)
  • [六、节点 B 和 C(replica + sentinel)](#六、节点 B 和 C(replica + sentinel))
    • [6.1 修改 Redis 配置文件](#6.1 修改 Redis 配置文件)
    • [6.2 启动 Redis 并设置开机自启](#6.2 启动 Redis 并设置开机自启)
    • [6.3 创建并配置 Sentinel](#6.3 创建并配置 Sentinel)
    • [6.4 创建 sentinel 服务](#6.4 创建 sentinel 服务)
  • 七、验证
    • [7.1 确保 redis 和 sentinel 都在运行](#7.1 确保 redis 和 sentinel 都在运行)
    • [7.2 用 redis-cli 登录各节点确认是否主从结构正确](#7.2 用 redis-cli 登录各节点确认是否主从结构正确)
    • [7.3 断掉 主节点 Redis 流程测试 Sentinel 自动故障转移](#7.3 断掉 主节点 Redis 流程测试 Sentinel 自动故障转移)
  • 总结

前言

redis主从复制(master-slave)+ Sentinel 哨兵(高可用)


一、下载redis

GitHub:https://github.com/redis/redis/releases

或在本页面下载安装包

二、编译

bash 复制代码
sudo dnf install -y gcc make
sudo tar -xvf /root/redis-7.4.3.tar.gz
cd /root/redis-7.4.3
make

三、安装

bash 复制代码
sudo make install

四、启动

bash 复制代码
redis-server

五、节点 A(master + sentinel)

5.1 修改 Redis 配置文件

bash 复制代码
sudo mkdir -p /opt/redis_conf
cp /root/redis-7.4.3/redis.conf /opt/redis_conf/
vim /opt/redis_conf/redis.conf

修改为:

bash 复制代码
bind 0.0.0.0
port 6379
protected-mode no
appendonly yes

5.2 启动 Redis 并设置开机自启

bash 复制代码
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(路径可以根据安装方式不同)

bash 复制代码
cp /root/redis-7.4.3/sentinel.conf /opt/redis_conf/
vim /opt/redis_conf/sentinel.conf

修改为:

bash 复制代码
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 服务

bash 复制代码
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 配置文件

bash 复制代码
sudo mkdir -p /opt/redis_conf
cp /root/redis-7.4.3/redis.conf /opt/redis_conf/
vim /opt/redis_conf/redis.conf

修改为:

bash 复制代码
bind 0.0.0.0
port 6379
protected-mode no
appendonly yes
replicaof 192.168.0.114 6379

6.2 启动 Redis 并设置开机自启

bash 复制代码
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

bash 复制代码
cp /root/redis-7.4.3/sentinel.conf /opt/redis_conf/
vim /opt/redis_conf/sentinel.conf

修改为:

bash 复制代码
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 服务

bash 复制代码
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 都在运行

各节点执行:

bash 复制代码
ps aux | grep redis

7.2 用 redis-cli 登录各节点确认是否主从结构正确

登录某个redis节点:

bash 复制代码
redis-cli -h <节点IP> -p 6379

如果你已经在目标服务器上,可以省略 -h 参数。

执行 INFO replication 查看主从信息:

bash 复制代码
INFO replication

如果是主节点,则展示下图信息:

如果是从节点,则展示下图信息:

7.3 断掉 主节点 Redis 流程测试 Sentinel 自动故障转移

在主节点执行:

bash 复制代码
sudo systemctl stop redis

在从节点上执行:

bash 复制代码
redis-cli -h <节点IP> -p 6379
INFO replication

从下图可以看出,主节点由原来的192.168.0.114变成了192.168.0.128了。

恢复原主节点192.168.0.114:

bash 复制代码
sudo systemctl start redis
redis-cli -h <节点IP> -p 6379
INFO replication

可以看出由原来的主节点变成了从节点。


总结

redis主从复制(master-slave)+ Sentinel 哨兵(高可用)

相关推荐
倔强的石头_5 小时前
kingbase备份与恢复实战(二)—— sys_dump库级逻辑备份与恢复(Windows详细步骤)
数据库
jiayou641 天前
KingbaseES 实战:深度解析数据库对象访问权限管理
数据库
李广坤2 天前
MySQL 大表字段变更实践(改名 + 改类型 + 改长度)
数据库
爱可生开源社区3 天前
2026 年,优秀的 DBA 需要具备哪些素质?
数据库·人工智能·dba
随逸1773 天前
《从零搭建NestJS项目》
数据库·typescript
加号34 天前
windows系统下mysql多源数据库同步部署
数据库·windows·mysql
シ風箏4 天前
MySQL【部署 04】Docker部署 MySQL8.0.32 版本(网盘镜像及启动命令分享)
数据库·mysql·docker
李慕婉学姐4 天前
Springboot智慧社区系统设计与开发6n99s526(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
数据库·spring boot·后端
百锦再4 天前
Django实现接口token检测的实现方案
数据库·python·django·sqlite·flask·fastapi·pip
tryCbest4 天前
数据库SQL学习
数据库·sql