redis的主從複製,讀寫分離,主從切換

當數據量變得龐大的時候,讀寫分離仍是頗有必要的。同時避免一個redis服務宕機,致使應用宕機的狀況,咱們啓用sentinel(哨兵)服務,實現主從切換的功能。redis

 

redis提供了一個master,多個slave的服務。bash

 

準備三個redis服務,依次命名文件夾子master,slave1,slave2.這裏爲在測試機上,不干擾原來的redis服務,咱們master使用6000端口。測試

配置文件(redis.conf)ui

master配置修改端口:spa

port 6000 requirepass 123456

 

slave1修改配置:日誌

 

port 6001

    slaveof 127.0.0.1 6000

    masterauth 123456 

    requirepass 123456

  

slave2修改配置:  code

     port 6002

     slaveof 127.0.0.1 6000

     masterauth 123456 

     requirepass 123456

  

 

requirepass是認證密碼,應該以後要做主從切換,因此建議全部的密碼都一致, masterauth是從機對主機驗證時,所需的密碼。(即主機的requirepass)server

啓動主機blog

redis-server redis.conf  

啓動從機:進程

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:

[root@localhost master]# redis-cli -p 6000
127.0.0.1:6000> auth 123456
OK
127.0.0.1:6000> set test chenqm
OK

slave1:

[root@localhost slave2]# redis-cli -p 6001
127.0.0.1:6001> auth 123456
OK
127.0.0.1:6001> get test
"chenqm"

slave2:

[root@localhost slave2]# redis-cli -p 6002
127.0.0.1:6002> auth 123456
OK
127.0.0.1:6002> get test
"chenqm"

  

 

能夠看到主機執行寫命令,從機能同步主機的值,主從複製,讀寫分離就實現了。

 

 

可是萬一主機掛了怎麼辦,這是個麻煩事情,因此redis提供了一個sentinel(哨兵),以此來實現主從切換的功能,相似與zookeeper.

 

咱們配置兩個sentinel進程:

vi sentinel.conf
port 26379


sentinel monitor mymaster 127.0.0.1 6000 2


sentinel auth-pass mymaster 123456

 

vi sentinel.conf

 

port 26479

sentinel monitor mymaster 127.0.0.1 6000 2

sentinel auth-pass mymaster 123456

  

啓動sentinel服務(到對應的目錄執行相應的命令):

redis-server sentinel.conf --sentinel

 

查看日誌:

[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進程

[root@localhost slave1]# ps -ef|grep redis
root      6960     1  0 19:29 ?        00:00:02 redis-server *:6000    
root      6968     1  0 19:30 ?        00:00:01 redis-server *:6001     
root      6975     1  0 19:30 ?        00:00:01 redis-server *:6002     
root      7014  6570  0 19:42 pts/0    00:00:01 redis-server *:26479                 
root      7017  6789  0 19:42 pts/5    00:00:01 redis-server *:26379                 
root      7021  6729  0 19:46 pts/3    00:00:00 grep redis
[root@localhost slave1]# kill -9 6960

 咱們觀察日誌:

[7014] 11 Jan 19:43:41.463 # +sdown master mymaster 127.0.0.1 6000
[7014] 11 Jan 19:46:42.379 # +switch-master mymaster 127.0.0.1 6000 127.0.0.1 6001

 master切換了,當6000端口的這個服務重啓的時候,他會變成6001端口服務的slave。

  由於sentinel在切換master的時候,把對應的sentinel.conf和redis.conf文件的配置修改。

 

期間咱們還須要關注的一個問題:sentinel服務自己也不是萬能的,也會宕機,因此咱們還得部署sentinel集羣,象我這樣多啓動幾個sentinel。

關注這個配置:

sentinel monitor mymaster 127.0.0.1 6000 2這個後面的數字2,是指當有兩個及以上的sentinel服務檢測到master宕機,纔會去執行主從切換的功能。
相關文章
相關標籤/搜索