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
相关推荐
Super_man541882 小时前
docker-compose-语法使用安装说明
运维·docker·容器
自己的九又四分之三站台3 小时前
Docker容器常用命令汇总
运维·docker·容器
摇一摇小肉包的JAVA笔记3 小时前
Redis如何解决缓存击穿,缓存雪崩,缓存穿透
数据库·redis·缓存
우 유4 小时前
【ing】Ubuntu安装Anaconda及环境配置\docker\pycharm
linux·运维·ubuntu
lqjun08274 小时前
在Ubuntu 24.04上安装cuDNN v8.x.x兼容CUDA 11.8
linux·运维·ubuntu
问~5 小时前
gitea本地部署代码托管后仓库的新建与使用(配置好ssh密钥后仍然无法正常克隆仓库是什么原因)
运维·ssh·gitea
ZKf30FkG5 小时前
在 CentOS 7.9 中 Node 18.20.2 安装指南
linux·运维·centos
魂尾ac5 小时前
VMware Workstation Pro下Centos 7.9 安装
linux·运维·centos
Rancemy6 小时前
Redis03
java·服务器·redis·spring
TE-茶叶蛋6 小时前
Eslint自定义规则使用
运维·服务器