主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-cli127.0.0.1:6379> auth passwordOK127.0.0.1:6379> info replication# Replicationrole:masterconnected_slaves:2slave0:ip=172.17.60.130,port=6379,state=online,offset=453292,lag=0slave1:ip=172.17.60.129,port=6379,state=online,offset=453151,lag=1master_failover_state:no-failovermaster_replid:925019c35af42325afa5e3a1bd38957ad1bf7432master_replid2:f090ed5937de77bc74d32ef37e38ba0aefd4b797master_repl_offset:453292second_repl_offset:279938repl_backlog_active:1repl_backlog_size:1048576repl_backlog_first_byte_offset:253944repl_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# Sentinelsentinel_masters:1sentinel_tilt:0sentinel_running_scripts:0sentinel_scripts_queue_length:0sentinel_simulate_failure_flags:0master0: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地址发生了改变: