1. 程式人生 > >Redis的複製詳解

Redis的複製詳解

複製基礎概念

Redis的主從複製特點

  • 一個master可以有多個slave
  • 可以用級聯複製功能
  • master是以非阻塞的方式來同步資料給slave

其實redis的複製和mysql的主從複製很相似,也可以用來作讀寫分離

Redis的複製過程
首先主伺服器會基於ping的方式檢查從伺服器是否線上,如果線上就直接將記憶體中的資料傳送給從端,然後從端會將資料儲存在檔案中,然後將這個檔案載入到記憶體中實現資料的重建(載入過程稱之為load)

其實,這個主從複製過程是這樣的:
在啟動了slave以後,從端會向master 傳送一個sync command 命令,請求來獲得主庫上的資料,無論從庫是第一次連線進來或者不是第一次連線進來,master都會啟動一個後臺子程序用於將記憶體中的資料快照儲存在資料檔案中,然後將資料檔案傳送到村段,從端讀取該檔案之後會載入到記憶體實現資料重建。

複製過程演示

現在用171作為主庫,172做為從庫。

  1. 修改作為主庫和做為從庫的redis的配置檔案讓他們分別監聽自己ip
[[email protected] ~]# ss -tnl
State      Recv-Q Send-Q        Local Address:Port                       Peer Address:Port              
LISTEN     0      128            10.220.5.171:6379                                  *:*                

[
[email protected]
~]# ss -tnl State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 *:6379 *:*
  1. 在172節點啟動同步
10.220.5.172:6379> SLAVEOF 10.220.5.171 6379  >>>設定master為171
OK
10.220.5.172:6379> KEYS *    >>>檢查資料是否同步過來
1) "name"
2) "addr"
3) "age"

只需要這一個 SLAVEOF host port命令就實現了主從複製
注意:如果主伺服器設定了認證功能(保護模式),那麼在連線的時候要用在slave端配置檔案中加入masterauth 密碼。

從節點的相關配置

# 指定主端的ip和埠
slaveof host port
# 主端有密碼
masterauth 123
# 指定當主節點沒有應答,但是該節點資料已經過期的情況下,由於使用者請求過來,是否使用這個過期資料
slave-serve-stale-data yes
# 如果是從伺服器的話,只讀
slave-read-only yes
# 如果從伺服器數量少於3個,那麼主伺服器就不能接受請求了
min-slaves-to-write 3
# 如果從伺服器之後與主伺服器超過10秒了,就進位制主伺服器執行寫操作
min-slave-max-log 10 

redis簡單主從複製這邊博文就講到這裡,下篇博文將詳細講解基於sentinel的Redis複製的高可用。

------做運維之前很矯情的小年輕-----