redis主從複製

一、什麼是主從複製?redis

redis持久化保證了redis服務重啓也不會丟失數據,由於redis服務重啓後會將硬盤上持久化的數據恢復到內存中,可是當redis服務器的硬盤損壞了可能會致使數據丟失,若是經過redis的主從複製機制就能夠避免這種單點故障。主機數據更新後根據配置和策略,自動同步到備機。數據庫

 

二、主從複製能幹嗎?bash

  • 讀寫分離
  • 容災恢復

 

三、怎麼配?服務器

從庫配置:slaveof [主庫IP] [主庫端口]測試

補充:每次slave與master斷開後,都須要從新鏈接,除非你配置進redis.conf文件;ui

鍵入info replication 能夠查看redis主從信息。spa

 

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

 

準備三個redis服務code

依次命名文件夾子master,slave1,slave2server

這裏爲在測試機上,不干擾原來的redis服務,咱們master使用6000端口。

配置文件(redis.conf)

master配置修改端口:

    port 6000

    requirepass 123456

 

slave1修改配置:

1
2
3
4
5
6
7
port 6001
 
slaveof 127.0.0.1 6000
 
masterauth 123456
 
requirepass 123456

  

slave2修改配置:  

1
2
3
4
5
6
7
port 6002
 
slaveof 127.0.0.1 6000
 
masterauth 123456
 
requirepass 123456

 

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

啓動主機:

1
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:

1
2
3
4
5
[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:

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

slave2:

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

  

 

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

 

 

四、怎麼玩?

4.一、一主二從

 一個Master,兩個Slave,Slave只能讀不能寫;當Slave與Master斷開後須要從新slave of鏈接纔可創建之。

前的主從關係;Master掛掉後,Master關係依然存在,Master重啓便可恢復

4.二、薪火相傳

上一個Slave能夠是下一個Slave的Master,Slave一樣能夠接收其餘slaves的鏈接和同步請求,那麼該slave做爲了鏈條中下一個slave的Master,如此能夠有效減輕Master的寫壓力。若是slave中途變動轉向,會清除以前的數據,從新創建最新的。

4.三、反客爲主

 當Master掛掉後,Slave可鍵入命令 slaveof no one使當前redis中止與其餘Master redis數據同步,轉成Master redis

 

五、複製原理

       一、Slave啓動成功鏈接到master後會發送一個sync命令;

       二、Master接到命令啓動後的存盤進程,同時收集全部接收到的用於修改數據集命令,在後臺進程執行完畢以後,master

            將傳送整個數據文件到slave,以完成一次徹底同步;

       三、全量複製:而slave服務在數據庫文件數據後,將其存盤並加載到內存中;

       四、增量複製:Master繼續將新的全部收集到的修改命令依次傳給slave,完成同步;

       五、可是隻要是從新鏈接master,一次徹底同步(全量複製)將被自動執行。

六、哨兵模式

反客爲主的自動版,可以後臺監控Master庫是否故障,若是故障了根據投票數自動將slave庫轉換爲主庫。一組sentinel能

同時監控多個Master。

使用步驟:

       一、在Master對應redis.conf同目錄下新建sentinel.conf文件,名字絕對不能錯;

       二、配置哨兵,在sentinel.conf文件中填入內容:

             sentinel monitor 被監控數據庫名字(本身起名字) ip port 1

             說明:上面最後一個數字1,表示主機掛掉後slave投票看讓誰接替成爲主機,得票數多少後成爲主機。

      三、啓動哨兵模式:

            命令鍵入:redis-sentinel  /myredis/sentinel.conf

           注:上述sentinel.conf路徑按各自實際狀況配置

七、複製的缺點

延時問題,因爲全部的寫操做都是在Master上操做,而後同步更新到Slave上,因此從Master同步到Slave機器有必定的延遲,當系統很繁忙的時候,延遲問題會更加嚴重,Slave機器數量的增長也會使得這個問題更加嚴重。


https://blog.csdn.net/zhangguanghui002/article/details/78524533

相關文章
相關標籤/搜索