Redis 主從複製(讀寫分離)————哨兵(主從切換)配置(轉載)
當資料量變得龐大的時候,讀寫分離還是很有必要的。同時避免一個redis服務宕機,導致應用宕機的情況,我們啟用sentinel(哨兵)服務,實現主從切換的功能。redis提供了一個master,多個slave的服務。
準備三個redis服務,依次命名資料夾子master,slave1,slave2.這裡為在測試機上,不干擾原來的redis服務,我們master使用6000埠。
配置檔案(redis.conf):
master配置修改埠:
port 6000 requirepass 123456
slave1修改配置:
1 2 3 4 5 6 7 |
|
slave2修改配置:
1 2 3 4 5 6 7 |
|
requirepass:是認證密碼,應該之後要作主從切換,所以建議所有的密碼都一致。masterauth是從機對主機驗證時,所需的密碼(即主機的requirepass)。
啟動主機:
1 |
|
啟動從機:
redis-server redis1.conf redis-server redis2.conf
產看啟動程序,輸入:
ps -ef |grep redis
root 6617 1 0 18:34 ? 00:00:01 redis-server *:6000 root 6647 1 0 18:43 ? 00:00:00 redis-server *:6001 root 6653 1 0 18:43 ? 00:00:00 redis-server *:6002 root 6658 6570 0 18:43 pts/0 00:00:00 grep redis
可以看到主,從機的redis已經相應啟動。
我們來驗證下主從複製:
master:
1 2 3 4 5 |
|
slave1:
1 2 3 4 5 |
|
slave2:
1 2 3 4 5 |
|
可以看到主機執行寫命令,從機能同步主機的值,主從複製,讀寫分離就實現了。
但是萬一主機掛了怎麼辦,這是個麻煩事情,所以redis提供了一個sentinel(哨兵),以此來實現主從切換的功能,類似與zookeeper。
Redis哨兵(sentinel)實現主從切換:
我們配置兩個sentinel程序:
(1)
vi sentinel.conf
1 2 3 4 5 6 |
|
(2)
1 |
|
1 2 3 4 5 |
|
啟動sentinel服務(到對應的目錄執行相應的命令):
1 |
|
檢視日誌:
[7014] 11 Jan 19:42:30.918 # +monitor master mymaster 127.0.0.1 6000 quorum 2 [7014] 11 Jan 19:42:30.923 * +slave slave 127.0.0.1:6002 127.0.0.1 6002 @ mymaster 127.0.0.1 6000 [7014] 11 Jan 19:42:30.925 * +slave slave 127.0.0.1:6001 127.0.0.1 6002 @ mymaster 127.0.0.1 6000
從對應的日誌觀察到,一個master服務,兩個slave服務。
我們現在來kill master程序
1 2 3 4 5 6 7 8 |
|
我們觀察日誌:
1 2 |
|
master切換了,當6000埠的這個服務重啟的時候,他會變成6001埠服務的slave。
因為sentinel在切換master的時候,把對應的sentinel.conf和redis.conf檔案的配置修改。
期間我們還需要關注的一個問題:sentinel服務本身也不是萬能的,也會宕機,所以我們還得部署sentinel叢集,象我這樣多啟動幾個sentinel。
注意這個配置:
1 |
|