【Redis入門】-淺談主從複製(一)

Redis的複製:

1. 是什麼:redis中的複製(master/slave)主從複製,主機數據更新後根據配置和策略自動同步到備機的master/slaver機制,master以寫爲主,slaver以讀爲主

2. 作用:讀寫分離、容災恢復

今天我們來了解一下主從複製策略之一主二僕

顧名思義,這種策略的具體實現就是使用一臺機器作爲主機,兩臺機器作爲備機(真正工作可能多臺),主機主要是寫入,備機主要是讀取。需要注意的是,再使用主從複製的時候,是配置備機,主機不動(默認狀態是master,從機需要改變master狀態到slaver)。

配置命令:slaveof + 主機ip + 主機端口,一下是測試用例(單機版):

首先,既然要模擬三臺機器,需要再不同的端口啓動分別redis,那麼我們需要複製三份配置文件(一主二僕共三個),然後對配置文件進行簡單的修改,下面以6379(作爲主機)來演示:

1. cp命令複製.conf文件,修改其中的幾個配置參數:

    1>. pidfile /.../6379.pid;

    2>. 端口號是6379;

    3>. log文件:logfile "6379.log";

    4>. dump文件:dbfilename dump6379.rdb

其他配置文件與這個一樣,就是使用對應額度端口號就可以了,起到區分的作用。

2. 現在就可以再不同的端口啓動redis,啓動之後的效果如圖所示:

這是效果圖,我們以端口6379的redis爲主機,其他兩個6380、6381作爲從機使用。

3. 這個時候我們先使用info replication命令查看每個機器的狀態,可以看到三個服務均是master,連接的slaver均是0.

4. 現在我們可以使用 slaveof命令來設置從機,讓80、81端口的redis作爲從機連接到79端口的redis,命令語法上文提到過,效果如下圖所示:

可以看到連接之後再次使用 info replication查看,80、81端口已經變成slaver了,並且顯示其連接的master就是127.0.0.1 8079這個redis。

現在重點來了,這個主從複製都有什麼特性呢:

1. 一旦連接上主機,那麼從機立即回覆制主機上的所有數據給自己,並且,以後主機每次寫入操作,都會複製一份給從機上面,上面的例子中,端口79的主機事先是有兩條數據的,分別是k1、k2,現在連接上之後,主機再次存儲一條k3。然後讀取從機數據,效果如下:

可以看到,一旦連接上,那麼主機鏈接前和連接後的所有數據都將複製一份給從機,這是rediis主從複製的一條策略;

2. 我們說再主從複製上,通常是主機負責寫入,從機負責讀取,那麼,如果從機也寫入操作會發生什麼呢?我們舉個例子看一看:

可以發現,對於只讀的從機是沒有辦法讀取數據的;

3(重點).如果主機掛掉了,那麼回怎麼樣呢,從機會不會變成主機代替?下面我模擬一下這個過程:

 

如圖所示,我先再再79主機上面shutdown,並且退出,然後,我再次查看從機狀態,可以看到從機狀態依然是slaver,也就是等待連接,待命,並且顯示從機依然連接的是127.0.0.1 6379這個redis,只不過連接狀態是down,那麼現在,我再次啓動6379redis:

可以看到,一旦重新啓動主機redis,立即與從機連接上了(注意,這張圖的從機的狀態是我shutdown之後重啓主機之前的狀態,所以其連接狀態顯示down),重新連接之後,主機存儲,從機依然回覆制,即一切不變。

4.(重點):如果從機掛掉了,又會發生什麼呢?

 

如圖可以看到,我將左側的80端口的從機shutdown了,然後再次連接,查看狀態顯示此時這個redis已經變成master了,並且連接數是0,這就是說,如果從機掛掉了,重新啓動之後之前的連接也就斷開了,若想使用必須想重新連接(需要注意的是,可以使用配置文件進行配置,這樣即使從機重啓,他也會自動連接對應的主機)。

總結:redis主從複製-一主二僕擁有特性:

1. 一旦轉成從機,主機之前的所有數據也將會被備份
2. 如果主機與從機都執行set方法,那麼從機失敗,從機沒有權限寫入操作
3. 如果主機shutdown(死了),那麼從機依然是slave原地待命,連接狀態變成down,此時如果主機重啓,主機再存儲,從機以來可以獲取,即連接不變
4. 如果從機死了,若再次重啓,則變成master, ,斷開連接,即,slaver與master斷開連接之後,除非使用配置文件進行配置,要不然需要重新連接

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章