前言
Redis的下载安装可参考Centos安装配置Redis6.x,Centos和Debian的步骤基本类似,或自行在网上搜索相关资料
注意:远程连接需放开相应端口
主从
搭建一个一主二从的主从模式
处理conf文件
#进入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
- 复制两份从配置文件
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
#启动主节点
../src/redis-server redis-master.conf
#启动从节点1
../src/redis-server redis-slave1.conf
#启动从节点2
../src/redis-server redis-slave2.conf
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连接主节点,查看相关信息,并写一条数据
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连接从节点,查看相关信息,可获取主节点数据,不可写数据
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目录
mkdir sentinel
cd sentinel
- 创建三个哨兵的conf
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
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
vim sentinel-26381.conf
sentinel-26381.conf
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
启动
- 创建启动脚本
vim start-sentinel.sh
start-sentinel.sh
# 启动第一个哨兵实例,并将输出重定向到日志文件,且在后台运行
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"
- 运行脚本
root@hecs-166225:/tools/redis/redis6/sentinel# sh start-sentinel.sh
Sentinel 26379 started
Sentinel 26380 started
Sentinel 26381 started
- 查看运行状态
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
测试
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命令,发现已自动切换
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被选举为主节点
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