在进行以下模式的搭建之前,请确保已参考相关文档完成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.pidlogfile "/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 指令之后,否则会导致启动失败。
多哨兵实例配置
为提升高可用性,建议部署多个哨兵实例。将主配置文件复制两份:
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]
完成所有节点的重置后,即可重新格式化数据目录并尝试再次创建集群。


雷达卡


京公网安备 11010802022788号







