1. 程式人生 > >Redis主從架構和主從從架構叢集搭建詳細步驟

Redis主從架構和主從從架構叢集搭建詳細步驟

,本文主要介紹Redis主從架構和主從從架構,耐心閱讀完本文,相信你會對Redis主從架構和主從從架構有一個清晰的認識。

Redis主從複製的功能非常強大,它有以下好處:

1.避免Redis單點故障
2.構建讀寫分離架構,滿足讀多寫少的應用場景

1.主從架構

1.1 Redis主從架構拓撲圖結構
Redis主從架構圖示

1.2 主從結構搭建

Redis叢集不用安裝多個Redis,只需複製多個配置檔案,修改即可。所以如果要進行主從結構搭建,需先安裝單機版Redis。單機版Redis安裝可參照:單機版Redis安裝教程

1.2.1 在安裝好單機版的前提下,複製三份配置檔案

進入redis所在目錄
# cd /opt/redis/redis-3.2.8
建立637963806381目錄,分別將安裝目錄下的redis.conf拷貝到這三個目錄下。 # mkdir -p /opt/redis/6379 && cp redis.conf /opt/redis/6379/6379.conf # mkdir -p /opt/redis/6380 && cp redis.conf /opt/redis/6380/6380.conf # mkdir -p /opt/redis/6381 && cp redis.conf /opt/redis/6381/6381.conf

1.2.2 分別修改配置檔案

# vim /opt/redis/6379/6379.conf 
# Redis使用後臺模式 daemonize yes # 關閉保護模式 protected-mode no # 註釋以下內容開啟遠端訪問 # bind 127.0.0.1 # 修改啟動埠為6379 port 6379 # 修改pidfile指向路徑 pidfile /opt/redis/6379/redis_6379.pid 以此類推,修改埠63806381配置。

1.2.3 分別啟動三個Redis例項

/opt/redis/redis-3.2.8/bin/redis-server /opt/redis/6379/6379.conf
/opt/redis/redis-3.2.8/bin/redis-server
/opt/redis/6380/6380.conf /opt/redis/redis-3.2.8/bin/redis-server /opt/redis/6381/6381.conf

1.2.4 設定主從

在Redis中設定主從有2種方式:
1.在redis.conf中設定slaveof
    a)  slaveof <masterip> <masterport>

2、  使用redis-cli客戶端連線到redis服務,執行slaveof命令
    a)  slaveof <masterip> <masterport>

第二種方式在重啟後將失去主從複製關係。

我們這裡使用第二種方式設定主從:

使用Redis客戶端連線上6380埠
# redis-cli -h 192.168.29.128 -p 6380
設定6380埠Redis為6379的從
192.168.29.128:6380> slaveof 192.168.29.128 6379
OK

使用Redis客戶端連線上6381埠
# redis-cli -h 192.168.29.128 -p 6381
設定6381埠Redis為6379的從
192.168.29.128:6381> slaveof 192.168.29.128 6379
OK

1.2.5 檢視Redis主從關係

使用Redis客戶端連線上6379# redis-cli -h 192.168.29.128 -p 6379

檢視Redis主從關係 如下圖所示
192.168.29.128:6379> info replication

Redis主從關係圖

role:角色資訊
slaveX:從庫資訊
connected_slaves:從庫數量

1.2.6 測試
在主庫寫入資料
主庫寫入資料

在從庫讀取資料
從庫讀取資料

2. 主從從架構

2.1 Redis主從從架構拓撲圖結構
Redis主從從架構拓撲圖結構

2.2 主從從架構搭建

Redis的主從架構的缺點是所有的slave節點資料的複製和同步都由master節點來處理,會照成master節點壓力太大,所以我們使用主從從結構來處理

2.2.1 前面步驟同主從架構一致,只是在設定主從結構時,設定6380為6379的從,6381為6380的從

使用Redis客戶端連線上6380# redis-cli -h 192.168.29.128 -p 6380
設定6380埠Redis為6379的從
192.168.29.128:6380> slaveof 192.168.29.128 6379
OK

使用Redis客戶端連線上6381# redis-cli -h 192.168.29.128 -p 6381
設定6381埠Redis為6380的從
192.168.29.128:6381> slaveof 192.168.29.128 6380
OK

2.2.2 檢視主從從架構資訊如下:
主從從架構資訊

主從從架構資訊

主從從架構資訊

2.2.3 測試

在主庫寫入資料
主庫寫入資料

在從庫查詢資料
在從庫查詢資料

在從庫查詢資料

3.從庫只讀

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

可以在配置檔案中開啟非只讀:slave-read-only no

4.主從複製的過程原理

1.當從庫和主庫建立MS關係後,會向主資料庫傳送SYNC命令

2.主庫接收到SYNC命令後會開始在後臺儲存快照(RDB持久化過程),並將期間接收到的寫命令快取起來

3.當快照完成後,主Redis會將快照檔案和所有快取的寫命令傳送給從Redis

4.從Redis接收到後,會載入快照檔案並且執行收到的快取的命令

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

5.無磁碟複製

通過前面的複製過程我們瞭解到,主庫接收到SYNC的命令時會執行RDB過程,即使在配置檔案中禁用RDB持久化也會生成,那麼如果主庫所
在的伺服器磁碟IO效能較差,那麼這個複製過程就會出現瓶頸,慶幸的是,Redis2.8.18版本開始實現了無磁碟複製功能(不過該功能
還是處於試驗階段)。

原理:Redis在與從資料庫進行復制初始化時將不會將快照儲存到磁碟,而是直接通過網路傳送給從資料庫,避免了IO效能差問題。

開啟無磁碟複製:repl-diskless-sync yes

注:如果要取消Redis主從關係,可以在對應的從庫執行SLAVEOF NO ONE命令,取消主從關係