主172.17.60.131
从172.17.60.130、172.17.60.129
redis部署
[root@localhost app]# tar xf redis-6.2.9.tar.gz
[root@localhost app]# cd redis-6.2.9/
[root@localhost redis-6.2.9]# make MALLOC=libc
[root@localhost redis-6.2.9]# make install PREFIX=/usr/local/redis
# 进入 Redis 的主目录
cd /usr/local/redis/
# 创建工作目录 tmp
mkdir tmp
# 创建日志目录 log
mkdir log
# 编辑 Redis 配置
vim redis.conf
# 编辑哨兵配置
vim sentinel.conf
主节点131-redis.conf:
# 表示redis允许所有地址连接。默认127.0.0.1,仅允许本地连接。
bind 0.0.0.0
# 允许redis后台运行
daemonize yes
# 设置redis日志存放路径
logfile "/usr/local/redis/log/redis.log"
# 设置为no,允许外部网络访问
protected-mode no
# 修改redis监听端口(可以自定义)
port 6379
# pid存放目录
pidfile "/var/run/redis_6379.pid"
# 工作目录,需要创建好目录,可自定义
dir "/usr/local/redis/tmp"
# 设置redis密码
requirepass "password"
# 主从同步master的密码
masterauth "password"
从节点129和130-redis.conf:
# 表示redis允许所有地址连接。默认127.0.0.1,仅允许本地连接。
bind 0.0.0.0
# 允许redis后台运行
daemonize yes
# 设置redis日志存放路径
logfile "/usr/local/redis/log/redis.log"
# 设置为no,允许外部网络访问
protected-mode no
# 修改redis监听端口(可以自定义)
port 6379
# pid存放目录
pidfile "/var/run/redis_6379.pid"
# 工作目录,需要创建好目录,可自定义
dir "/usr/local/redis/tmp"
# 设置redis密码
requirepass "password"
# 主从同步master的密码
masterauth "password"
# 多了这一行,用于追随某个节点的redis,被追随的节点为主节点,追随的为从节点,Redis5.0前版本可使用slaveof
replicaof 172.17.60.131 6379
所有节点-sentinel.conf:
# 修改Sentinel监听端口
port 26379
# 允许Sentinel后台运行
daemonize yes
# 设置Sentinel日志存放路径
logfile "/usr/local/redis/log/sentinel.log"
# 工作目录,需要创建好目录,可自定义
dir "/usr/local/redis/tmp"
# Sentinel 监听 redis 主节点, mymaster:master名称可自定义,127.0.0.1 6379 :redis主节点IP和端口,2 :表示多少个Sentinel认为redis主节点失效时,才算真正失效
sentinel monitor mymaster 172.17.60.131 6379 2
# 配置失效时间,master会被这个sentinel主观地认为是不可用的,单位毫秒
sentinel down-after-milliseconds mymaster 10000
# 若sentinel在该配置值内未能完成master/slave自动切换,则认为本次failover失败。
sentinel failover-timeout mymaster 60000
# 在发生failover主备切换时最多可以有多少个slave同时对新的master进行同步。
sentinel parallel-syncs mymaster 2
# 设置连接master和slave时的密码,注意的是sentinel不能分别为master和slave设置不同的密码,因此master和slave的密码应该设置相同
sentinel auth-pass mymaster password
先启动redis-server,主->从:
[root@localhost bin]# ./redis-server redis.conf
[root@localhost bin]# ./redis-cli
127.0.0.1:6379> auth password
OK
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=172.17.60.130,port=6379,state=online,offset=453292,lag=0
slave1:ip=172.17.60.129,port=6379,state=online,offset=453151,lag=1
master_failover_state:no-failover
master_replid:925019c35af42325afa5e3a1bd38957ad1bf7432
master_replid2:f090ed5937de77bc74d32ef37e38ba0aefd4b797
master_repl_offset:453292
second_repl_offset:279938
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:253944
repl_backlog_histlen:199349
再启动redis-sentinel:
[root@localhost bin]# ./redis-sentinel sentinel.conf
[root@localhost bin]# ./redis-cli -h 172.17.60.131 -p 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=172.17.60.131:6379,slaves=2,sentinels=3
主节点宕机测试
先模拟一下挂掉 redis 主节点。
- 使用 ps -ef | grep redis 找到 redis 主节点对应的进程 id
- 使用 kill -9 xxx 杀掉 redis 主节点 id
master地址发生了改变: