楼主: luna0103
82 0

[作业] Redis主从模式、哨兵模式、集群模式的搭建 [推广有奖]

  • 0关注
  • 0粉丝

等待验证会员

学前班

40%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
20 点
帖子
1
精华
0
在线时间
0 小时
注册时间
2018-11-4
最后登录
2018-11-4

楼主
luna0103 发表于 2025-12-9 17:05:51 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币

在进行以下模式的搭建之前,请确保已参考相关文档完成Redis单机模式的安装与启动。本文所有配置均基于单台服务器环境,若部署于多台服务器,仅需将对应文件分布至不同主机,无需额外调整端口设置。

主从复制架构配置

主节点沿用此前安装的Redis实例,路径位于 /opt/installs/redis/bin,接下来在此基础上配置从节点:

cd /opt/installs/redis/bin
mkdir mastersalves
mkdir -p /opt/installs/redis/bin/mastersalves/logs
mkdir -p /opt/installs/redis/bin/mastersalves/redisdata
cp redis.conf mastersalves/

对复制生成的配置文件进行修改:

  • replicaof 192.168.174.128 6379 —— 指定主节点IP与端口
  • pidfile /var/run/redis_6380.pid
  • logfile "/opt/installs/redis/bin/mastersalves/logs/redis.log"
  • dir /opt/installs/redis/bin/mastersalves/redisdata

更改监听端口为:

port 6380

若主节点启用了密码保护,需在从节点配置中添加认证信息:

masterauth 123456

(请确保该密码与主节点一致)

启动主从节点服务

分别启动主节点和从节点:

# 主节点
redis-server /opt/installs/redis/bin/redis.conf

# 从节点
redis-server /opt/installs/redis/bin/mastersalves/redis.conf

连接验证

使用以下命令测试主从节点连接状态:

redis-cli -h 192.168.174.128 -p 6379 -a 123456
redis-cli -h 192.168.174.128 -p 6380 -a 123456
[此处为图片1]

哨兵模式部署

主从架构中存在一个关键问题:当主节点宕机后,无法自动选举新的主节点。哨兵(Sentinel)机制可有效解决此故障转移问题。

进入Redis执行目录并创建哨兵专用文件夹:

cd /opt/installs/redis/bin
mkdir sentinel-zc

从原始解压包中复制哨兵配置模板:

cp /opt/modules/redis-8.0.1/sentinel.conf sentinel-zc

编辑 sentinel.conf 配置文件,更新如下内容:

bind 192.168.174.128
port 26379
daemonize yes
sentinel monitor mymaster 192.168.174.128 6379 2

若主节点设置了访问密码,则必须在哨兵配置中加入认证项:

sentinel auth-pass mymaster 123456

注意:此项必须置于 sentinel monitor 指令之后,否则会导致启动失败。

[此处为图片2]

多哨兵实例配置

为提升高可用性,建议部署多个哨兵实例。将主配置文件复制两份:

cp sentinel.conf sentinel2.conf
cp sentinel.conf sentinel3.conf

修改各自端口号以避免冲突:

  • sentinel2.conf → port 26380
  • sentinel3.conf → port 26381

(若部署于不同服务器,则无需修改端口)

启动流程

先进入bin目录,依次启动Redis服务与哨兵进程:

# 启动主从Redis服务
./redis-server redis.conf
./redis-server mastersalves/redis.conf

# 启动三个哨兵实例
./redis-sentinel sentinel-zc/sentinel.conf
./redis-sentinel sentinel-zc/sentinel2.conf
./redis-sentinel sentinel-zc/sentinel3.conf

功能测试

通过客户端连接主从节点进行基础连通性验证:

redis-cli -h 192.168.174.128 -p 6379 -a 123456
redis-cli -h 192.168.174.128 -p 6380 -a 123456

模拟主节点故障:手动停止原主节点服务,观察从节点是否能被哨兵自动提升为主节点。随后若原主节点恢复运行,其将自动注册为从节点,并从新主节点同步数据。

整个过程实现了双向角色切换与数据同步,核心优势在于“自动故障转移”。务必确保主节点密码已在哨兵配置中正确设置,以保障安全通信与正常选举流程。

当从节点配置了密码保护时,为确保主从切换后数据仍能正常同步,主节点需增加以下配置:

masterauth 123456

Redis集群部署步骤

1. 查看与清理现有Redis进程

首先确认当前系统中是否存在正在运行的Redis服务:

pgrep -af redis

若存在,则终止所有相关进程:

pkill -f redis

2. 集群环境准备(三主三从架构)

本方案需要6台服务器支持,采用三主三从模式。首先在指定路径下创建集群目录结构:

cd /opt/installs/redis/bin
mkdir redis_cluster
cd redis_cluster
mkdir 7001 7002 7003 7004 7005 7006

3. 配置文件初始化

将原始redis.conf复制至7001目录,并进行如下修改:

cp redis.conf redis_cluster/7001

编辑 redis_cluster/7001/redis.conf 文件内容如下:

port 7001
bind 0.0.0.0
daemonize yes
# requirepass "123456"
cluster-enabled yes
cluster-config-file nodes-7001.conf
cluster-node-timeout 5000
appendonly yes

注意:需注释掉原有的主从复制配置项:

# replicaof 192.168.233.128 6380

4. 数据存储路径统一设置

为便于管理,建议为集群单独建立一个数据存放目录:

mkdir /opt/installs/redis/bin/clusterdata

然后在每个配置文件中指定该目录作为工作路径:

dir "/opt/installs/redis/bin/clusterdata"

5. 复制并调整各节点配置

将7001的配置文件复制到其余五个节点目录:

cp redis_cluster/7001/redis.conf redis_cluster/7002/
cp redis_cluster/7001/redis.conf redis_cluster/7003/
cp redis_cluster/7001/redis.conf redis_cluster/7004/
cp redis_cluster/7001/redis.conf redis_cluster/7005/
cp redis_cluster/7001/redis.conf redis_cluster/7006/

随后分别修改对应端口及集群配置文件名,例如7002节点:

port 7002
cluster-config-file nodes-7002.conf

其他节点依此类推,依次递增端口号和配置文件编号。

6. 启动各Redis实例

逐一启动六个Redis服务:

redis-server redis_cluster/7001/redis.conf
redis-server redis_cluster/7002/redis.conf
redis-server redis_cluster/7003/redis.conf
redis-server redis_cluster/7004/redis.conf
redis-server redis_cluster/7005/redis.conf
redis-server redis_cluster/7006/redis.conf

7. 安装依赖组件(如启动报错)

若提示缺少Ruby环境,执行以下命令安装:

yum install ruby rubygems -y

接着安装Redis对应的gem包:

[此处为图片1]

gem install -l redis-3.0.0.gem

最后将集群管理脚本复制到可执行路径:

cd /opt/modules/redis-8.0.1/src
cp redis-trib.rb /opt/installs/redis/bin/redis-trib

8. 创建Redis集群

确保使用IP地址而非主机名进行集群初始化,避免格式化失败:

redis-cli --cluster create 192.168.174.128:7001 192.168.174.128:7002 192.168.174.128:7003 192.168.174.128:7004 192.168.174.128:7005 192.168.174.128:7006 --cluster-replicas 1 -a 123456

系统提示确认配置时输入 yes:

Can I set the above configuration? (type 'yes' to accept): yes

成功后显示如下信息:

[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> 检查槽位覆盖情况...
[OK] 所有 16384 个槽位均已覆盖,集群构建成功。

连接到 Redis 集群并检查其运行状态:
使用以下命令进入集群:
redis-cli -c -h bigdata01 -p 7001 -a 123456

注意:连接集群时必须携带 `-c` 参数以启用集群模式支持。

进入后可执行如下命令查看集群信息:
cluster nodes
cluster info

若之前创建集群失败,在重试时可能会遇到如下错误提示:
/usr/local/share/gems/gems/redis-3.0.0/lib/redis/client.rb:79:in `call': ERR Slot 0 is already busy (Redis::CommandError)
    from /usr/local/share/gems/gems/redis-3.0.0/lib/redis.rb:2190:in `block in method_missing'
    from /usr/local/share/gems/gems/redis-3.0.0/lib/redis.rb:36:in `block in synchronize'
    from /usr/share/ruby/monitor.rb:211:in `mon_synchronize'
    from /usr/local/share/gems/gems/redis-3.0.0/lib/redis.rb:36:in `synchronize'

该问题通常是因为原有节点仍保留着槽位分配信息导致冲突。为解决此问题,需对相关主节点进行清理操作。

已知主节点分别运行在端口 7001、7002 和 7003 上,需依次对其进行重置:

首先连接第一个节点:
redis-cli -h bigdata01 -p 7001

登录成功后,执行以下两条命令:
flushall
cluster reset

随后按照相同步骤连接 7002 和 7003 端口,并分别执行 flushall 与 cluster reset 操作。

[此处为图片1]

完成所有节点的重置后,即可重新格式化数据目录并尝试再次创建集群。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:Redis red edi Dis Commander

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-1 18:34