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
相关推荐
SkyWalking中文站7 小时前
认识 Horizon UI · 1/17:SkyWalking 新一代可观测性控制台
运维·前端·监控
雪梨酱QAQ10 小时前
Kubeneters HA Cluster部署
运维
江华森14 小时前
Spring Cloud 微服务全栈实战:从 Eureka 到 Docker Compose 一文贯通
运维
江华森14 小时前
Matplotlib 数据绘图基础入门
运维
江华森14 小时前
NumPy 数值计算基础入门
运维
用户3074596982071 天前
Redis 延时队列详解
redis
烤代码的吐司君1 天前
Redis 数据结构 ZSet, BIT, HyperLogLog,Geo 空间数据
redis·后端
leeyi4 天前
Checkpoint 机制:Agent 怎么在断电后接着跑
redis·aigc·agent
云技纵横5 天前
一个 @Async 让循环依赖暴雷:Spring 代理的暗坑
redis
乘云数字DATABUFF5 天前
5分钟部署开源APM Databuff:OpenTelemetry全链路追踪入门实战
运维·后端