主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地址發生了改變: