目 录CONTENT

文章目录

redis主从、哨兵模式集群部署

JamKing
2026-01-19 / 0 评论 / 0 点赞 / 2 阅读 / 0 字 / 正在检测是否收录...

1、服务器配置

IP 配置 操作系统 主机名 角色
172.16.10.141 2C4G CentOS 7 component1 主节点/哨兵
172.16.10.142 2C4G CentOS 7 component2 从节点/哨兵
172.16.10.143 2C4G CentOS 7 component3 从节点/哨兵

2、基础环境配置

systemctl stop firewalld
systemctl disable firewalld
sed -i 's/=enforcing/=disabled/g' /etc/sysconfig/selinux
setenforce 0

3、部署redis主从集群

3.1 redis源码下载

mkdir -p /data/pkg && cd /data/pkg
wget https://download.redis.io/releases/redis-8.4.0.tar.gz
tar xf redis-8.4.0.tar.gz 
cd redis-8.4.0

3.2 编译redis

make && make PREFIX=/data/redis install
ls /data/redis/bin

看到该页面代表已经编译redis完成,查看/data/redis编译目录成功生成redis的相关二进制命令

image-fQGM.png

image-Unwp.png

3.3 redis.conf配置

3.3.1 master

mkdir -p /data/redis/logs
vim /etc/redis/redis.conf

#主要以下配置

#监听ip
bind 127.0.0.1 172.16.10.141 -::1
#开启持久化
daemonize yes
#redis进程id
pidfile /data/redis/redis_6379.pid
#redis日志
logfile "/data/redis/logs/redis_6379.log"
#持久化方式
appendonly yes
#密码配置
requirepass 123456
#主节点密码配置
masterauth 123456

完整配置预览

bind 127.0.0.1 172.16.10.141 -::1
protected-mode no
port 6379
tcp-backlog 511
timeout 0
tcp-keepalive 300
daemonize yes
pidfile /data/redis/redis_6379.pid
loglevel notice
logfile "/data/redis/logs/redis_6379.log"
requirepass 123456
databases 16
always-show-logo no
set-proc-title yes
proc-title-template "{title} {listen-addr} {server-mode}"
locale-collate ""
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
rdb-del-sync-files no
dir ./
replica-serve-stale-data yes
replica-read-only yes
repl-diskless-sync yes
repl-diskless-sync-delay 5
repl-diskless-sync-max-replicas 0
repl-diskless-load disabled
repl-disable-tcp-nodelay no
replica-priority 100
acllog-max-len 128
lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
replica-lazy-flush no
lazyfree-lazy-user-del no
lazyfree-lazy-user-flush no
oom-score-adj no
oom-score-adj-values 0 200 800
disable-thp yes
appendonly yes
appendfilename "appendonly.aof"
appenddirname "appendonlydir"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
aof-use-rdb-preamble yes
aof-timestamp-enabled no
 
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-listpack-entries 512
hash-max-listpack-value 64
list-max-listpack-size -2
list-compress-depth 0
set-max-intset-entries 512
set-max-listpack-entries 128
set-max-listpack-value 64
zset-max-listpack-entries 128
zset-max-listpack-value 64
hll-sparse-max-bytes 3000
stream-node-max-bytes 4096
stream-node-max-entries 100
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit replica 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
dynamic-hz yes
aof-rewrite-incremental-fsync yes
rdb-save-incremental-fsync yes
jemalloc-bg-thread yes

3.3.2 slave

mkdir -p /data/redis/logs
vim /etc/redis/redis.conf

#主要以下配置

#监听ip,改成对应的172.16.10.142和172.16.10.143
bind 127.0.0.1 172.16.10.142 -::1
#开启持久化
daemonize yes
#redis进程id
pidfile /data/redis/redis_6379.pid
#redis日志
logfile "/data/redis/logs/redis_6379.log"
#持久化方式
appendonly yes
#配置master关系
replicaof 172.16.10.141 6379
#密码配置
requirepass 123456
#主节点密码连接
masterauth 123456

完整配置预览

bind 127.0.0.1 172.16.10.143 -::1
protected-mode no
port 6379
tcp-backlog 511
timeout 0
tcp-keepalive 300
daemonize yes
pidfile /data/redis/redis_6379.pid
loglevel notice
logfile "/data/redis/logs/redis_6379.log"
requirepass 123456
databases 16
always-show-logo no
set-proc-title yes
proc-title-template "{title} {listen-addr} {server-mode}"
locale-collate ""
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
rdb-del-sync-files no
dir ./
replica-serve-stale-data yes
replica-read-only yes
repl-diskless-sync yes
repl-diskless-sync-delay 5
repl-diskless-sync-max-replicas 0
repl-diskless-load disabled
repl-disable-tcp-nodelay no
replica-priority 100
acllog-max-len 128
lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
replica-lazy-flush no
lazyfree-lazy-user-del no
lazyfree-lazy-user-flush no
oom-score-adj no
oom-score-adj-values 0 200 800
disable-thp yes
appendonly yes
appendfilename "appendonly.aof"
appenddirname "appendonlydir"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
aof-use-rdb-preamble yes
aof-timestamp-enabled no
 
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-listpack-entries 512
hash-max-listpack-value 64
list-max-listpack-size -2
list-compress-depth 0
set-max-intset-entries 512
set-max-listpack-entries 128
set-max-listpack-value 64
zset-max-listpack-entries 128
zset-max-listpack-value 64
hll-sparse-max-bytes 3000
stream-node-max-bytes 4096
stream-node-max-entries 100
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit replica 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
dynamic-hz yes
aof-rewrite-incremental-fsync yes
rdb-save-incremental-fsync yes
jemalloc-bg-thread yes
replicaof 172.16.10.141 6379
masterauth 123456

3.4 配置systemd服务

ln -s /data/redis/bin/* /usr/local/bin/
mkdir /etc/redis
cp /data/pkg/redis-8.4.0/redis.conf /etc/redis/

cat > /etc/systemd/system/redis.service << EOF  
[Unit]  
Description=Redis  
After=network.target  
 
[Service]  
Type=forking  
ExecStart=/usr/local/bin/redis-server /etc/redis/redis.conf  
 
[Install]  
WantedBy=multi-user.target  
EOF

3.5 启动redis

#三节点执行
systemctl daemon-reload
systemctl enable redis --now
systemctl status redis

image-Phiq.png

3.6 验证主从状态

#主节点执行,172.16.10.141
redis-cli
127.0.0.1:6379> auth 123456
127.0.0.1:6379> info replication

image-vvBA.png

4、部署哨兵集群

4.1 哨兵配置

#三节点执行
#创建哨兵目录
mkdir -p /data/redis/sentinel

cat > /etc/redis/sentinel.conf << EOF
protected-mode no
daemonize yes
port 6380
dir /data/redis/sentinel
sentinel monitor mymaster 172.16.10.141 6379 2
sentinel auth-pass mymaster 123456
sentinel down-after-milliseconds mymaster 30000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 60000
logfile "/data/redis/logs/sentinel.log"
EOF

4.2 配置systemd服务

#三节点执行
cat > /etc/systemd/system/sentinel.service << EOF
[Unit]  
Description=Redis  
After=network.target  
 
[Service]  
Type=forking  
ExecStart=/usr/local/bin/redis-sentinel /etc/redis/sentinel.conf  
 
[Install]  
WantedBy=multi-user.target  
EOF


4.3 启动哨兵集群

#三节点启动哨兵集群
systemctl daemon-reload
systemctl enable sentinel --now
systemctl status sentinel

image-LzBp.png

5、故障转移测试

5.1 原master状态

原master:172.16.10.141

[root@component1 redis]# redis-cli
127.0.0.1:6379> auth 123456
OK
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=172.16.10.142,port=6379,state=online,offset=92857,lag=1
slave1:ip=172.16.10.143,port=6379,state=online,offset=92857,lag=0
master_failover_state:no-failover
master_replid:80f3b390fa44e444276c11405bc093b60b467125
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:92857
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:92857
127.0.0.1:6379> 

image-BjmB.png

5.2 模拟故障

#master节点停止redis
systemctl stop redis

观察172.16.10.142,非master,角色不变

127.0.0.1:6379> info replication
# Replication
role:slave
master_host:172.16.10.141
master_port:6379
master_link_status:down
master_last_io_seconds_ago:-1
master_sync_in_progress:0
slave_read_repl_offset:115434
slave_repl_offset:115434
replica_full_sync_buffer_size:0
replica_full_sync_buffer_peak:0
master_current_sync_attempts:12
master_total_sync_attempts:13
master_link_down_since_seconds:12
total_disconnect_time_sec:12
slave_priority:100
slave_read_only:1
replica_announced:1
connected_slaves:0
master_failover_state:no-failover
master_replid:80f3b390fa44e444276c11405bc093b60b467125
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:115434
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:29
repl_backlog_histlen:115406
127.0.0.1:6379> 

image-KfWY.png

观察172.16.10.143,由此可见,改节点已从slave升级为master节点

[root@component3 ~]# redis-cli
127.0.0.1:6379> auth 123456
OK
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:1
slave0:ip=172.16.10.142,port=6379,state=online,offset=126657,lag=0
master_failover_state:no-failover
master_replid:cc0c78dc25811a80c55bcdec6af4734cc78981f4
master_replid2:80f3b390fa44e444276c11405bc093b60b467125
master_repl_offset:126937
second_repl_offset:115435
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:43
repl_backlog_histlen:126895
127.0.0.1:6379> 

image-JOAn.png

5.3 重新启动原master

#172.16.10.141,已从master降为slave
systemctl start redis

image-Fqfw.png

查看master集群状态,172.16.10.143执行

[root@component3 logs]# redis-cli
127.0.0.1:6379> auth 123456
OK
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=172.16.10.142,port=6379,state=online,offset=376300,lag=1
slave1:ip=172.16.10.141,port=6379,state=online,offset=376440,lag=0
master_failover_state:no-failover
master_replid:cc0c78dc25811a80c55bcdec6af4734cc78981f4
master_replid2:80f3b390fa44e444276c11405bc093b60b467125
master_repl_offset:376440
second_repl_offset:115435
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:43
repl_backlog_histlen:376398
127.0.0.1:6379> 

image-mLeI.png

至此,redis主从集群、哨兵故障转移集群已成功部署

0
  1. 支付宝打赏

    qrcode alipay
  2. 微信打赏

    qrcode weixin

评论区