Redis哨兵模式配置測試
Redis 的哨兵(sentinel) 系統用於管理多個 Redis 伺服器, 該系統執行以下三個任務:
監控(Monitoring): 哨兵(sentinel) 會不斷地檢查你的Master 和Slave 是否運作正常。
提醒(Notification): 當被監控的某個 Redis 出現問題時, 哨兵(sentinel) 可以透過 API 向管理員或者其他應用程式傳送通知。
自動故障遷移(Automatic failover): 當一個Master 不能正常工作時,哨兵(sentinel) 會開始一次自動故障遷移操作, 它會將失效Master 的其中一個Slave 升級為新的Master, 並讓失效Master 的其他Slave 改為複製新的Master; 如果修復好的master 重新啟動後,原master 變成slave 。
本文在redis主從已經搭建好的前提下做哨兵的簡單配置。(想要安裝redis主從具體步驟的可以翻看上一篇文章)
在安裝的redis 目錄下,有sentinel.conf 檔案,可以設定超時等等。
本次測試是我自己新建一個檔案格式如下:
[root@localhost ~]# cd /redis/redis-5.0.5/
[root@localhost redis-5.0.5]# cp sentinel.conf redis_master/sentinel_6379.conf
[root@localhost redis_master]# vi sentinel_6379.conf
修改redis-sentinel 配置檔案:/etc/redis-sentinel.conf
# 1. 繫結的地址
bind 0.0.0.0
# 2. 設定埠
port 26379
# 3. 將daemonize 的值從no 設定為yes (設定哨兵模式為後臺啟動)
daemonize yes
# 4. 搜尋pidfile (pid 檔案),設定值
pidfile /redis/redis-5.0.5/redis_master/sentinel_26379.pid
# 5. 搜尋logfile (日誌檔案),設定值
logfile "/redis/redis-5.0.5/redis_master/sentinel_26379.log"
# 6. 搜尋dir( 工作目錄) ,設定值
dir /redis-data/master/26379
# 7. 設定監控地址,為對應的主redis 庫的內網地址
sentinel monitor mymaster 192.168.242.70 6379 2
# 8. 主資料庫密碼, 需要將配置放在sentinel monitor mymaster 192.168.242.70 6379 2 下面
sentinel auth-pass mymaster hzmcdba
# 9. 設定5 秒內沒有響應,說明伺服器掛了, 需要將配置放在sentinel monitor mymaster 192.168.242.70 6379 2 下面
sentinel down-after-milliseconds mymaster 5000
# 10. 設定15 秒內master 沒有活起來,就重新選舉主(根據需求調整)
sentinel failover-timeout mymaster 15000
# 11. 表示如果master 重新選出來後,其它slave 節點能同時並行從新master 同步快取的臺數有多少個,顯然該值越大,所有slave 節點完成同步切換的整體速度越快,但如果此時正好有人在訪問這些slave ,可能造成讀取失敗,影響面會更廣。最保定的設定為1 ,只同一時間,只能有一臺幹這件事,這樣其它slave 還能繼續服務,但是所有slave 全部完成快取更新同步的程式將變慢。
sentinel parallel-syncs mymaster 2
注意:含有mymaster 的配置,都必須放置在sentinel monitor mymaster 192.168.242.70 6379 2 之後,否則會出現問題
sentinel monitor mymaster 後監控的是redis 中的master 節點,也就是192.168.242.70 ,所以這個檔案在三臺機器上是相同的。將該檔案複製至其他兩個節點,放到相應目錄,並建立檔案中使用到得目錄。
因為主從前面已經啟動,所以這邊直接啟動哨兵即可(三個節點都啟動):
root@localhost redis_master]# redis-sentinel /redis/redis-5.0.5/redis_master/sentinel_6379.conf
檢視日誌:
[root@test1 redis_master]# tail -100f sentinel_26379.log
如果主從都重啟,則需要按照下面順序啟動
啟動需要按照Master->Slave->Sentinel 的順序進行啟動
檢視哨兵資訊:
[root@localhost redis_master]# redis-cli -h 192.168.242.70 -p 26379
192.168.242.70: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=192.168.242.70:6379,slaves=2,sentinels=3
[root@localhost redis_master]# redis-cli -h 192.168.242.71 -p 26379
192.168.242.71: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=192.168.242.70:6379,slaves=2,sentinels=3
192.168.242.71:26379> exit
[root@localhost redis_master]# redis-cli -h 192.168.242.72 -p 26379
192.168.242.72: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=192.168.242.70:6379,slaves=2,sentinels=3
檢視日誌資訊
[root@test1 redis_master]# tail -100f sentinel_26379.log
成功日誌,+slave slave 包含兩臺從庫的地址,+sentinel sentinel 包含兩臺哨兵的id
高可用測試case
哨兵作為對redis 例項的監控,透過選舉演算法保證哨兵的魯棒性和高可用,所以哨兵至少要部署3 臺,符合半數原則,需要5 或者,7 ,超過一半,不包含一半存活的時候,才能夠選舉出leader ,才能進行主從的切換功能。
redis 服務,至少需要存活一臺,才能保證服務正常執行sentinel 選擇新 master 的原則是最近可用 且 資料最新 且 優先順序最高 且 活躍最久 !
哨兵高可用測試:分別連線對應的redis 服務端,手動停止哨兵,停止主reids 服務,看主從是否切換成功。
三哨兵情況:redis 例項掛掉兩臺,剩下一臺能夠成為主,自動切換
Master 檢查狀態
[root@localhost redis_master]# redis-cli -h 192.168.242.70 -p 6379 -a hzmcdba
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
192.168.242.70:6379> set k3 3
OK
192.168.242.70:6379> get k3
"3"
192.168.242.70:6379> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.242.71,port=6380,state=online,offset=887111,lag=0
slave1:ip=192.168.242.72,port=6381,state=online,offset=886968,lag=0
master_replid:8b90010b378c34aaf89c39a9002684363de31b40
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:887111
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:887111
salve1 檢查狀態
[root@test2 slave1]# redis-cli -h 192.168.242.71 -p 6380 -a hzmcdba
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
192.168.242.71:6380> get k3
"3"
192.168.242.71:6380> info replication
# Replication
role:slave
master_host:192.168.242.70
master_port:6379
master_link_status:up
master_last_io_seconds_ago:0
master_sync_in_progress:0
slave_repl_offset:888541
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:8b90010b378c34aaf89c39a9002684363de31b40
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:888541
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:888541
salve2 檢查狀態
[root@test3 slave2]# redis-cli -h 192.168.242.72 -p 6381 -a hzmcdba
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
192.168.242.72:6381> get k3
"3"
192.168.242.72:6381> info replication
# Replication
role:slave
master_host:192.168.242.70
master_port:6379
master_link_status:up
master_last_io_seconds_ago:0
master_sync_in_progress:0
slave_repl_offset:889127
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:8b90010b378c34aaf89c39a9002684363de31b40
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:889127
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:889127
在從庫嘗試寫:
192.168.242.72:6381> set c c
(error) READONLY You can't write against a read only replica
失敗。
可以看到一主而從得複製目前是正常同步的,且主庫可以讀寫,從庫只能讀。
模擬master 節點down
192.168.242.70:6379> shutdown
not connected>
檢視master 的哨兵日誌
從中看出failover 到原slave1 了
檢視原salve1( 現master) 哨兵程式日誌:
Slave1 為新master 了
檢視slave2 日誌
Salve2 變成原slave1 的從庫了
檢視新master 資訊:
192.168.242.71:6380> info replication
# Replication
role:master
connected_slaves:1
slave0:ip=192.168.242.72,port=6381,state=online,offset=1644182,lag=1
master_replid:284d7b39a0b6ef7ba9fc0e821f5841e39b52d3f1
master_replid2:8b90010b378c34aaf89c39a9002684363de31b40
master_repl_offset:1644468
second_repl_offset:890272
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:595893
repl_backlog_histlen:1048576
角色為master, 一個從庫, 為原slave1
檢視新從庫資訊:
192.168.242.72:6381> info replication
# Replication
role:slave
master_host: 192.168.242.71
master_port:6380
master_link_status:up
master_last_io_seconds_ago:1
master_sync_in_progress:0
slave_repl_offset:1655692
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:284d7b39a0b6ef7ba9fc0e821f5841e39b52d3f1
master_replid2:8b90010b378c34aaf89c39a9002684363de31b40
master_repl_offset:1655692
second_repl_offset:890272
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:607117
repl_backlog_histlen:1048576
為slave 角色,新的主庫為192.168.242.71
測試是否同步
新master
192.168.242.71:6380> set k4 4
OK
192.168.242.71:6380> set k5 5
OK
192.168.242.71:6380> set k6 6
OK
從庫(slave2 )
192.168.242.72:6381> get k4
"4"
192.168.242.72:6381> get k5
"5"
192.168.242.72:6381> get k6
"6"
看到同步正常
原master 修好後
原master 修好後,啟動後檢視日誌:
哨兵日誌提示為192.168.242.71 的從庫了
檢視複製情況:
[root@localhost redis_master]# redis-cli -h 192.168.242.70 -p 6379 -a hzmcdba
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
192.168.242.70:6379> info replication
# Replication
role:slave
master_host:192.168.242.71
master_port:6380
master_link_status:up
master_last_io_seconds_ago:0
master_sync_in_progress:0
slave_repl_offset:1703883
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:284d7b39a0b6ef7ba9fc0e821f5841e39b52d3f1
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:1703883
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1699100
repl_backlog_histlen:4784
變成現在master 的從機了,並不會變成獨立的一臺master 。
測試資料同步正常。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29956245/viewspace-2933100/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- redis哨兵模式搭建和測試Redis模式
- Redis Sentinel哨兵模式原理及配置Redis模式
- Redis哨兵模式Redis模式
- Redis 哨兵模式搭建Redis模式
- redis哨兵模式搭建Redis模式
- 【Redis】Sentinel 哨兵模式Redis模式
- Redis Sentinel哨兵模式部署Redis模式
- redis-26.哨兵模式Redis模式
- Docker配置redis主從哨兵DockerRedis
- springboot2.0 配置redis哨兵Spring BootRedis
- Redis 哨兵模式的原理及其搭建Redis模式
- redis哨兵模式的原理及部署Redis模式
- redis經典模式3節點哨兵配置的一些坑Redis模式
- Redis安裝之叢集-哨兵模式(sentinel)模式Redis模式
- redis自學(34)redisTemplate的哨兵模式Redis模式
- 高可用之戰:Redis Sentinal(哨兵模式)Redis模式
- Redis docker 主從模式與哨兵sentinelRedisDocker模式
- 詳解Redis主從及哨兵模式Redis模式
- Redis哨兵模式高可用解決方案Redis模式
- 用 docker 學習 redis 主從複製3.2 redis-sentinel「哨兵模式」核心配置-命令-原理DockerRedis模式
- Redis哨兵Redis
- redis 哨兵Redis
- 【redis】使用redis benchmark評估哨兵模式主節點效能Redis模式
- SpringBoot+redis配置及測試Spring BootRedis
- Redis | 第12章 Sentinel 哨兵模式《Redis設計與實現》Redis模式
- 深入剖析Redis系列(二) - Redis哨兵模式與高可用叢集Redis模式
- redis 原始碼分析:Jedis 哨兵模式連線原理Redis原始碼模式
- 淺談:redis的主從複製 + 哨兵模式Redis模式
- redis sentinel哨兵模式安裝部署和切換Redis模式
- 【Redis 系列】redis 學習十一,redis 的哨兵模式詳解和實戰Redis模式
- 老司機帶你玩轉面試(4):Redis 高可用之哨兵模式面試Redis模式
- Redis 哨兵使用以及在 Laravel 中的配置RedisLaravel
- Redis哨兵sentinelRedis
- redis系列:哨兵Redis
- 第77篇 Redis中的Sentinel(哨兵模式)詳解Redis模式
- Redis三種高可用模式:主從、哨兵、叢集Redis模式
- Spring Boot(十三):整合Redis哨兵,叢集模式實踐Spring BootRedis模式
- linux系統——Redis叢集搭建(主從+哨兵模式)LinuxRedis模式