Debian配置Redis主从、哨兵

前言

Redis的下载安装可参考Centos安装配置Redis6.x,Centos和Debian的步骤基本类似,或自行在网上搜索相关资料

注意:远程连接需放开相应端口

主从

搭建一个一主二从的主从模式

处理conf文件

shell 复制代码
#进入redis所在目录
cd /tools/redis/redis6
#创建主从配置文件所在目录
mkdir master-slave
#复制一份conf文件到目标目录
cp redis.conf master-slave/redis-master.conf
#切换至目标你目录
cd master-slave
  • redis-master.conf中需要注意的配置

    #开放连接,可以指定连接的ip,测试用我直接全开放了
    bind 0.0.0.0
    #指定启动端口(不推荐用默认的16379)
    port 16379
    #是否开启保护模式
    protected-mode yes
    #守护线程模式
    daemonize yes
    #指定日志文件位置
    logfile "/tools/redis/redis6/master-slave/master.log"
    #用户管理
    user default off
    user root on +@all allkeys >root
    #指定认证密码
    requirepass root
    #指定master密码
    masterauth root
    指定rdb位置及文件名
    dir ./
    dbfilename dump-master.rdb
    #主节点可读可写
    replica-read-only no

  • 复制两份从配置文件

shell 复制代码
cp redis-master.conf redis-slave1.conf
cp redis-master.conf redis-slave2.conf
  • redis-slave*.conf注意事项(和master不同的)

    port 16380
    logfile "/tools/redis/redis6/master-slave/slave1.log"
    dbfilename dump-slave-16380.rdb
    #指定master登录用户
    masteruser root
    replica-read-only yes
    replicaof your_master_ip your_master_port

启动redis

此部分可以提取成一个sh文件,方便后续启动

start-ms.sh

shell 复制代码
#启动主节点
../src/redis-server redis-master.conf
#启动从节点1
../src/redis-server redis-slave1.conf
#启动从节点2
../src/redis-server redis-slave2.conf
shell 复制代码
root@iZuf67owyzd0wopzvdfgsyZ:/tools/redis/redis6/master-slave# sh start-ms.sh
#查看redis运行情况,如果有没启动起来的可以去相应的log文件中查看日志
root@iZuf67owyzd0wopzvdfgsyZ:/tools/redis/redis6/master-slave# ps -aux|grep redis
root      799730  0.1  0.5  54176  9244 ?        Ssl  15:17   0:04 ../src/redis-server 0.0.0.0:16379
root      804110  0.1  0.5  54176  9328 ?        Ssl  15:29   0:03 ../src/redis-server 0.0.0.0:16380
root      804146  0.1  0.5  54176  9300 ?        Ssl  15:29   0:03 ../src/redis-server 0.0.0.0:16381
root      821441  0.0  0.1   6332  2036 pts/0    S+   16:19   0:00 grep redis

测试

  • redis-cli连接主节点,查看相关信息,并写一条数据
shell 复制代码
root@iZuf67owyzd0wopzvdfgsyZ:/tools/redis/redis6/master-slave# ../src/redis-cli  -p 16379
127.0.0.1:16379> auth root root
OK
127.0.0.1:16379> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=127.0.0.1,port=16380,state=online,offset=4364,lag=0
slave1:ip=127.0.0.1,port=16381,state=online,offset=4364,lag=1
master_failover_state:no-failover
master_replid:022605e2b857e08361cf180f174ef534059df9dd
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:4364
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:4364
127.0.0.1:16379> keys *
1) "k1"
2) "k2"
127.0.0.1:16379> set k3 v3
OK
127.0.0.1:16379> exit
  • redis-cli连接从节点,查看相关信息,可获取主节点数据,不可写数据
shell 复制代码
root@iZuf67owyzd0wopzvdfgsyZ:/tools/redis/redis6/master-slave# ../src/redis-cli  -p 16380
127.0.0.1:16380> auth root root
OK
127.0.0.1:16380> keys *
1) "k3"
2) "k1"
3) "k2"
127.0.0.1:16380> set k4 v4
(error) READONLY You can't write against a read only replica.
127.0.0.1:16380> info replication
# Replication
role:slave
master_host:127.0.0.1
master_port:16379
master_link_status:up
master_last_io_seconds_ago:9
master_sync_in_progress:0
slave_read_repl_offset:4603
slave_repl_offset:4603
slave_priority:100
slave_read_only:1
replica_announced:1
connected_slaves:0
master_failover_state:no-failover
master_replid:022605e2b857e08361cf180f174ef534059df9dd
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:4603
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:529
repl_backlog_histlen:4075
127.0.0.1:16380> exit

哨兵

启动主从后,可以进行哨兵的配置

处理config文件

  • 创建并进入sentinel目录
shell 复制代码
mkdir sentinel
cd sentinel
  • 创建三个哨兵的conf
shell 复制代码
vim sentinel-26379.conf

sentinel-26379.conf

复制代码
bind 0.0.0.0
port 26379
protected-mode no
sentinel monitor mymaster 127.0.0.1 16379 2
sentinel auth-user mymaster root
sentinel auth-pass mymaster root
requirepass root
shell 复制代码
vim sentinel-26380.conf

sentinel-26380.conf

复制代码
bind 0.0.0.0
port 26380
protected-mode no
sentinel monitor mymaster 127.0.0.1 16379 2
sentinel auth-user mymaster root
sentinel auth-pass mymaster root
requirepass root
shell 复制代码
vim sentinel-26381.conf

sentinel-26381.conf

text 复制代码
bind 0.0.0.0
port 26381
protected-mode no
sentinel monitor mymaster 127.0.0.1 16379 2
sentinel auth-user mymaster root
sentinel auth-pass mymaster root
requirepass root

启动

  • 创建启动脚本
shell 复制代码
vim start-sentinel.sh

start-sentinel.sh

text 复制代码
# 启动第一个哨兵实例,并将输出重定向到日志文件,且在后台运行
nohup ../src/redis-server sentinel-26379.conf --sentinel > sentinel-26379.log 2>&1 &
echo "Sentinel 26379 started"
# 启动第二个哨兵实例,并将输出重定向到日志文件,且在后台运行
nohup ../src/redis-server sentinel-26380.conf --sentinel > sentinel-26380.log 2>&1 &
echo "Sentinel 26380 started"

# 启动第三个哨兵实例,并将输出重定向到日志文件,且在后台运行
nohup ../src/redis-server sentinel-26381.conf --sentinel > sentinel-26381.log 2>&1 &
echo "Sentinel 26381 started"
  • 运行脚本
shell 复制代码
root@hecs-166225:/tools/redis/redis6/sentinel# sh start-sentinel.sh
Sentinel 26379 started
Sentinel 26380 started
Sentinel 26381 started
  • 查看运行状态
shell 复制代码
root@hecs-166225:/tools/redis/redis6/sentinel# ps -aux|grep redis
root      378240  0.1  0.2  51616  9328 ?        Ssl  17:36   0:08 ../src/redis-server 0.0.0.0:16379
root      378246  0.0  0.2  51616  9172 ?        Ssl  17:36   0:06 ../src/redis-server 0.0.0.0:16380
root      378252  0.0  0.2  51616  9144 ?        Ssl  17:36   0:06 ../src/redis-server 0.0.0.0:16381
root      414671  0.1  0.3  51616 12340 pts/3    Sl   19:45   0:00 ../src/redis-server 127.0.0.1:26379 [sentinel]
root      414672  0.0  0.3  51616 12168 pts/3    Sl   19:45   0:00 ../src/redis-server 127.0.0.1:26380 [sentinel]
root      414673  0.0  0.3  51616 12160 pts/3    Sl   19:45   0:00 ../src/redis-server 127.0.0.1:26381 [sentinel]
root      414766  0.0  0.0   6332  2120 pts/3    S+   19:45   0:00 grep redis

测试

shell 复制代码
root@hecs-166225:/tools/redis/redis6/src# redis-cli -p 26379
127.0.0.1:26379> auth root
OK
127.0.0.1:26379> info sentinel
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=ok,address=127.0.0.1:16379,slaves=2,sentinels=3

终止16379的redis进程,过一至两分钟(sentinel.conf中sentinel down-after-milliseconds属性影响,默认30s)重新执行info命令,发现已自动切换

shell 复制代码
127.0.0.1:26379> info sentinel
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=ok,address=127.0.0.1:16381,slaves=2,sentinels=3

查看sentinel执行日志,也可以看到16379down掉后,16381被选举为主节点

shell 复制代码
root@iZuf67owyzd0wopzvdfgsyZ:/tools/redis/redis6/sentinel# tail -fn 100 sentinel-26379.log
1943239:X 19 Jun 2025 15:07:28.249 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
1943239:X 19 Jun 2025 15:07:28.249 # Redis version=6.2.9, bits=64, commit=00000000, modified=0, pid=1943239, just started
1943239:X 19 Jun 2025 15:07:28.249 # Configuration loaded
1943239:X 19 Jun 2025 15:07:28.249 * monotonic clock: POSIX clock_gettime
1943239:X 19 Jun 2025 15:07:28.250 * Running mode=sentinel, port=26379.
1943239:X 19 Jun 2025 15:07:28.250 # Sentinel ID is 3579c0b96dabe452b8f53e795d9b894ea381c8b3
1943239:X 19 Jun 2025 15:07:28.250 # +monitor master mymaster 127.0.0.1 16379 quorum 2
1943239:X 19 Jun 2025 15:08:49.682 # +sdown master mymaster 127.0.0.1 16379
1943239:X 19 Jun 2025 15:08:49.759 # +odown master mymaster 127.0.0.1 16379 #quorum 2/2
1943239:X 19 Jun 2025 15:08:49.759 # +new-epoch 1
1943239:X 19 Jun 2025 15:08:49.759 # +try-failover master mymaster 127.0.0.1 16379
1943239:X 19 Jun 2025 15:08:49.764 # +vote-for-leader 3579c0b96dabe452b8f53e795d9b894ea381c8b3 1
1943239:X 19 Jun 2025 15:08:49.776 # 9f69ca329a02657930f62ba9c4e4a29e98309796 voted for 3579c0b96dabe452b8f53e795d9b894ea381c8b3 1
1943239:X 19 Jun 2025 15:08:49.777 # c1a06f7ca5fa19610948005bc5eb10936fc17ea7 voted for 3579c0b96dabe452b8f53e795d9b894ea381c8b3 1
1943239:X 19 Jun 2025 15:08:49.847 # +elected-leader master mymaster 127.0.0.1 16379
1943239:X 19 Jun 2025 15:08:49.847 # +failover-state-select-slave master mymaster 127.0.0.1 16379
1943239:X 19 Jun 2025 15:08:49.919 # +selected-slave slave 127.0.0.1:16381 127.0.0.1 16381 @ mymaster 127.0.0.1 16379
1943239:X 19 Jun 2025 15:08:49.919 * +failover-state-send-slaveof-noone slave 127.0.0.1:16381 127.0.0.1 16381 @ mymaster 127.0.0.1 16379
1943239:X 19 Jun 2025 15:08:50.010 * +failover-state-wait-promotion slave 127.0.0.1:16381 127.0.0.1 16381 @ mymaster 127.0.0.1 16379
1943239:X 19 Jun 2025 15:08:50.469 # +promoted-slave slave 127.0.0.1:16381 127.0.0.1 16381 @ mymaster 127.0.0.1 16379
1943239:X 19 Jun 2025 15:08:50.469 # +failover-state-reconf-slaves master mymaster 127.0.0.1 16379
1943239:X 19 Jun 2025 15:08:50.535 * +slave-reconf-sent slave 127.0.0.1:16380 127.0.0.1 16380 @ mymaster 127.0.0.1 16379
1943239:X 19 Jun 2025 15:08:50.887 # -odown master mymaster 127.0.0.1 16379
1943239:X 19 Jun 2025 15:08:51.516 * +slave-reconf-inprog slave 127.0.0.1:16380 127.0.0.1 16380 @ mymaster 127.0.0.1 16379
1943239:X 19 Jun 2025 15:08:51.516 * +slave-reconf-done slave 127.0.0.1:16380 127.0.0.1 16380 @ mymaster 127.0.0.1 16379
1943239:X 19 Jun 2025 15:08:51.568 # +failover-end master mymaster 127.0.0.1 16379
1943239:X 19 Jun 2025 15:08:51.568 # +switch-master mymaster 127.0.0.1 16379 127.0.0.1 16381
1943239:X 19 Jun 2025 15:08:51.568 * +slave slave 127.0.0.1:16380 127.0.0.1 16380 @ mymaster 127.0.0.1 16381
1943239:X 19 Jun 2025 15:08:51.568 * +slave slave 127.0.0.1:16379 127.0.0.1 16379 @ mymaster 127.0.0.1 16381
1943239:X 19 Jun 2025 15:09:21.607 # +sdown slave 127.0.0.1:16379 127.0.0.1 16379 @ mymaster 127.0.0.1 16381
相关推荐
Leinwin4 小时前
OpenClaw 多 Agent 协作框架的并发限制与企业化规避方案痛点直击
java·运维·数据库
2401_865382504 小时前
信息化项目运维与运营的区别
运维·运营·信息化项目·政务信息化
漠北的哈士奇4 小时前
VMware Workstation导入ova文件时出现闪退但是没有报错信息
运维·vmware·虚拟机·闪退·ova
如意.7595 小时前
【Linux开发工具实战】Git、GDB与CGDB从入门到精通
linux·运维·git
运维小欣5 小时前
智能体选型实战指南
运维·人工智能
yy55275 小时前
Nginx 性能优化与监控
运维·nginx·性能优化
爱吃土豆的马铃薯ㅤㅤㅤㅤㅤㅤㅤㅤㅤ6 小时前
Linux 查询某进程文件所在路径 命令
linux·运维·服务器
05大叔8 小时前
网络基础知识 域名,JSON格式,AI基础
运维·服务器·网络
安当加密8 小时前
无需改 PAM!轻量级 RADIUS + ASP身份认证系统 实现 Linux 登录双因子认证
linux·运维·服务器
dashizhi20158 小时前
服务器共享禁止保存到本地磁盘、共享文件禁止另存为本地磁盘、移动硬盘等
运维·网络·stm32·安全·电脑