Redis主從架構和主從從架構叢集搭建詳細步驟
阿新 • • 發佈:2018-12-25
,本文主要介紹Redis主從架構和主從從架構,耐心閱讀完本文,相信你會對Redis主從架構和主從從架構有一個清晰的認識。
Redis主從複製的功能非常強大,它有以下好處:
1.避免Redis單點故障
2.構建讀寫分離架構,滿足讀多寫少的應用場景
1.主從架構
1.1 Redis主從架構拓撲圖結構
1.2 主從結構搭建
Redis叢集不用安裝多個Redis,只需複製多個配置檔案,修改即可。所以如果要進行主從結構搭建,需先安裝單機版Redis。單機版Redis安裝可參照:單機版Redis安裝教程
1.2.1 在安裝好單機版的前提下,複製三份配置檔案
進入redis所在目錄
# cd /opt/redis/redis-3.2.8
建立6379、6380、6381目錄,分別將安裝目錄下的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
以此類推,修改埠6380及6381配置。
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
role:角色資訊
slaveX:從庫資訊
connected_slaves:從庫數量
1.2.6 測試
在主庫寫入資料
在從庫讀取資料
2. 主從從架構
2.1 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效能較差,那麼這個複製過程就會出現瓶頸,慶幸的是,Redis在2.8.18版本開始實現了無磁碟複製功能(不過該功能
還是處於試驗階段)。
原理:Redis在與從資料庫進行復制初始化時將不會將快照儲存到磁碟,而是直接通過網路傳送給從資料庫,避免了IO效能差問題。
開啟無磁碟複製:repl-diskless-sync yes
注:如果要取消Redis主從關係,可以在對應的從庫執行SLAVEOF NO ONE命令,取消主從關係