Redis學習筆記(三) Redis主從架構和主從從架構 (1)

來源:互聯網
上載者:User
準備

修改pidfile 為下面做準備

關閉RDB持久化修改持久化檔案的儲存位置

啟動Redis

redis-server /etc/redis.conf

使用用戶端串連Redis

redis-cli

串連成功,接下來就可以愉快的玩耍啦~~~ 主從複製(讀寫分離)

Redis的主從複製功能非常強大,一個master可以擁有多個slave,而一個slave又可以擁有多個slave,如此下去,形成了強大的多級伺服器叢集架構. 可以避免Redis單點故障,構建讀寫分離架構,滿足讀多寫少的應用情境.

Redis複製功能的幾個重要方面

1. 一個Master可以有多個Slave;
2. Redis使用非同步複製。從2.8開始,Slave會周期性(每秒一次)發起一個Ack確認複製流(replication stream)被處理進度;
3. 不僅主伺服器可以有從伺服器,從伺服器也可以有自己的從伺服器,多個從伺服器之間可以構成一個圖狀結構;
4. 複製在Master端是非阻塞模式的,這意味著即便是多個Slave執行首次同步時,Master依然可以提供查詢服務;
5. 複製在Slave端也是非阻塞模式的:如果你在redis.conf做了設定,Slave在執行首次同步的時候仍可以使用舊資料集提供查詢;你也可以配置為當Master與Slave失去聯絡時,讓Slave返回用戶端一個錯誤提示;
6. 當Slave要刪掉舊的資料集,並重新載入新版資料時,Slave會阻塞串連請求(一般發生在與Master斷開重連後的恢複階段);
7. 複製功能可以單純地用於資料冗餘(dataredundancy),也可以通過讓多個從伺服器處理唯讀命令請求來提升擴充性(scalability):比如說,繁重的 SORT 命令可以交給附屬節點去運行。
8. 可以通過修改Master端的redis.config來避免在Master端執行持久化操作(Save),由Slave端來執行持久化。 主從架構


準備3個設定檔連接埠分別為

6379 (Master)

6380 (Slave)

6381 (Slave)

  

修改原來的redis.conf檔案 ,拷貝出2個redis.conf檔案

mv /etc/redis.conf /etc/redis.6379.confcp /etc/redis.6379.conf /etc/redis.6380.confcp /etc/redis.6379.conf /etc/redis.6381.conf

通過vi修改6380 和 6381 設定檔

vi /etc/redis.6380.conf

通過命令替換 6379 為 6380

:%s/6379/6380/g
最底下出現  表示修改成功, wq退出並儲存

 

用一樣的方式修改6381 的設定檔

 

注意: 設定檔在前面已經修改pidfile 參數,如果沒有修改一定要修改該參數為不同的值

 

通過設定檔啟動3個Redis執行個體

通過ps 命令查看Redis進程

主從的配置有2種方法:

在redis.conf中設定 slaveof

使用redis-cli用戶端串連到Redis服務中,執行slaveof命令 這種方式在重啟之後就會失去主從複製關係

修改6381的設定檔 ,然後重啟6381 .

通過redis-cli進入6379這個服務

 

查看主從資訊:INFO replication

從庫顯示的資訊

測試主從關係

在主庫寫入資料 ,然後在從庫讀取資料 主從從結構

主從從架構就是

Master下面有個 Slave , 而Slave下面還有一個Slave

我們吧 6381 重啟一下

此時的主從資訊

只剩下一主一從了

 

然後使用redis-cli用戶端串連到Redis服務,執行slaveof命令

查看此時的主從資訊

 

6379:

6379隻有一個從庫 6380

6380:

6380有一個主庫 6379 還有一個從庫 6381

6381:

6381隻有一個主庫 6380

 

這樣主從從架構就搭建好了

 

測試 , 先清空key

在主庫中設定資料

在從庫中擷取資料

6380 和 6381都已經擷取到資料了

 

好了,主從從架構搭建完成! 從庫唯讀

預設情況下redis資料庫充當slave角色時是唯讀不能進行寫操作。

如果進行寫操作就會報錯

我們可以修改Redis的設定檔的配置參數slave-read-only, 修改為no



資料同步的過程

①  當從庫和主庫建立MS關係後,會向主要資料庫發送SYNC命令(同步命令);

 

②  主庫接收到SYNC命令後會開始在後台儲存快照(RDB持久化過程),並將期間接收到的寫命令緩衝起來;所以就算關掉了RDB持久化方式,在他們同步的時候也會產生RDB檔案

以上主庫只做了2件事情

           將接收的命令進行RDB持久化

           在RDB持久化中,將接收的命令緩衝起來

①  當快照完成後,主Redis會將快照檔案和所有緩衝的寫命令發送給從Redis;

 

②  從Redis接收到後,會載入快照檔案並且執行收到的緩衝的命令;

 

③  之後,主Redis每當接收到寫命令時就會將命令發送從Redis,從而保證資料的一致;

 

在這個過程中主從同步是通過RDB來同步資料, 即使禁用了RDB也沒有用,那麼就會產生IO問題,在這個複製過程可能就會出現瓶頸. Redis在2.8.18版本開始實現了無磁碟複製功能

 

Redis在與從庫進行複製初始化時將不會吧快照儲存到磁碟,而是直接通過網路發送給從庫,避免了IO效能問題.

 

修改repl-diskless-sync 為 yes
宕機處理

在主從架構中出現了宕機的情況

 

①  Slave 宕機

在Redis中,從庫重新啟動會自動加入到主從架構中,自動完成同步資料

Redis 2.8之後,在從庫有做持久化的前提下,如果從庫在斷開的期間,主庫的變化不大,從庫再次啟動後,主庫不會將或有的資料進行RDB操作,而是進行差異複寫

②  Master 宕機

一 : 在Slave中執行SLAVEOF NO ONE 命令,斷開主從關係並且提升為主庫繼續服務;

二 : 將主庫重新啟動後,執行 SLAVEOF命令,將其設定為其他Redis的從庫,這個時候資料就同步回來了;

 

 

這樣通過人工的方式來處理Redis的宕機情況步驟雖然少,但是還是容易出現異常的,下面我們通過Redis的哨兵(sentinel)功能來實現高可用的架構





聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.