1. 程式人生 > >redis簡單搭建主從複製

redis簡單搭建主從複製

本次主要搭建redis複製模式,這裡共兩臺虛擬機器,搭建一主二從複製模式。上一篇redis在CentOS安裝已經介紹過redis如何安裝的,這裡不再贅述。注意:本文並沒有加入哨兵
節點安排:
(1)master1:192.168.121.140:6381
(2)master2:192.168.121.140:6382(備用)
(2)slave1:192.168.121.139:6379
(3)slave2:192.168.121.139:6380
本文主要研究以下問題:
(1)當salve沒有和master建立關係之前,master首先set部分資料,再其建立關係後,master之前set的資料會不會同步到兩個slave節點?
(2)當兩個slave節點之一掛掉,然後再次重啟,檢視redis節點的role是什麼?
(3)當master節點掛掉,檢視兩個slave的role是什麼?
(4)驗證能不能再slave節點set資料?
(5)當重新啟動一個master2之後,將slave1與其建立主從關係,那麼slave1和master1的關係還保留嗎?
為了探究上面的答案,下面我們一步步動手驗證起來把
第一步:首先介紹下伺服器上的目錄結構
192.168.121.139節點:


我們需要新建兩個資料夾並命名為6379和6380,redis目錄為redis相關的原始碼和配置,如下圖:
在這裡插入圖片描述
192.168.121.140節點:
在這裡插入圖片描述
第二步:拷貝並修改配置檔案
首先我們將139節點的redis目錄下的redis.conf檔案拷貝到資料夾6379下,然後進入到6379資料夾下。我們接下來需要修改配置資料夾的以下配置:
(1)daemonize:是否開啟守護執行緒,預設no,修改為yes
在這裡插入圖片描述
(2)port:監聽埠,修改為6379
在這裡插入圖片描述
(3)pidfile:程序號,修改值為/data/redis/6379/6379.pid
在這裡插入圖片描述
(4)logfile:日誌檔案目錄,修改為/data/redis/6379/6379.log
在這裡插入圖片描述

(5)dir:工作目錄,這裡應該為資料夾,修改為/data/redis/6379
在這裡插入圖片描述
(6)bind:修改為機器真實ip地址,記住一定不要配置127.0.0.1,否則slave連線不上master。當然如果是slave可以不用修改。
按照上述步驟修改完後,啟動redis-server後,在6379資料夾下就會自動生成配置的檔案
在這裡插入圖片描述
其他的節點配置都是一樣的,可以按照上面的步驟修改為對應的值。

第三步:啟動三個節點
首先在139節點,進入到/data/redis/redis/src資料夾下,執行下面命令啟動6379和6380redis

./redis-server /data/redis/6379/6379.conf
./redis-server /data/redis/6380/6380.conf
同樣140節點,進入到到/data/redis/redis/src資料夾下,執行下面命令啟動6381redis

./redis-server /data/redis/6381/6381.conf

第四步:使用redis提供的客戶端連線redis,探究我們最初的5個問題
分別在139和140節點,進入到/data/redis/redis/src資料夾下,執行下面命令連線redis服務

./redis-cli -p 6379
./redis-cli -p 6380
./redis-cli -p 6381
通過命令info replication檢視各節點的主從資訊
在這裡插入圖片描述
剛開始各節點的role都是master。

下面我們驗證第一個問題:
(1)當salve沒有和master建立關係之前,master首先set部分資料,再其建立關係後,master之前set的資料會不會同步到兩個slave節點?
首先我們在140的6381set一個數據set k2 v2
在這裡插入圖片描述
然後檢視139節點上6379和6380上有沒有k2
在這裡插入圖片描述
在這裡插入圖片描述
我們可以知道這兩個redis並沒有 k2的值
下面我們,將6379和6380設定為slave,執行下面命令,ip地址是master的ip地址,埠號是master監聽埠

SLAVEOF 192.168.121.140 6380
SLAVEOF 192.168.121.140 6381
我們再次執行info replication命令,我們看到6379和6380的role是slave
在這裡插入圖片描述
在這裡插入圖片描述
這是我們再次檢視是否存在 k2時,結果為:
在這裡插入圖片描述
在這裡插入圖片描述
結論:當salve沒有和master建立關係之前,master首先set部分資料,再其建立關係後,master之前set的資料會同步到兩個slave節點

(2)當兩個slave節點之一掛掉,然後再次重啟,檢視redis節點的role是什麼?
首先我們停掉6379節點,執行shutdown命令,然後重啟檢視role
在這裡插入圖片描述
結論:當兩個slave節點之一掛掉,然後再次重啟,檢視redis節點的role還是master。這裡需要注意的是如果我們把slaveof配置在conf檔案中,則重啟會載入配置檔案,最終還是slave。
(3)當master節點掛掉,檢視兩個slave的role是什麼?
我們執行shutdown命令停掉master,檢視兩個slave的role
在這裡插入圖片描述
在這裡插入圖片描述
結論:當master關掉後,兩個slave還是的role還是slave,只是master_link_status是down,標識和master斷開連線了。
(4)驗證能不能再slave節點set資料?
隨便在任意slave節點set值,檢視情況
在這裡插入圖片描述
結論:slave節點不能set資料,只能讀資料,但是在master節點可以讀寫資料。
(5)當重新啟動一個master2之後,將slave1與其建立主從關係,那麼slave1和master1的關係還保留嗎?
按照第二步重新啟動一個master節點6382,在6379執行slaveof 192.168.121.140 6382後,檢視role和快取的資料
在這裡插入圖片描述
在這裡插入圖片描述
可以看到之前master1同步的資料沒有了,並且其主節點已經換成master2了,說明一個slave只能和一個master建立關係。

總結:本文主要研究redis在主從複製模式下,研究了主和從的關係。一點一滴進步。