1. 程式人生 > >redis主從複製【master-slave叢集】

redis主從複製【master-slave叢集】

一、叢集的作用

1: 主從備份 防止主機宕機
2: 讀寫分離,分擔master的任務
3: 任務分離,主從伺服器分別分擔備份工作與計算工作

二、叢集的搭建方式

第一種方式:星型方式,即多臺從伺服器圍繞著主伺服器配置

這裡寫圖片描述

第二種方式:線性方式

這裡寫圖片描述

這種方式搭建叢集有一個優點,當master宕機後,可直接切換到slave1上。

三、主從通訊過程

流程圖如下:

這裡寫圖片描述

簡述一下上面的通訊過程:
當我們為一個主伺服器設定了slave從伺服器的時候,主伺服器就需要和從伺服器同步,主伺服器發生改變的時候會dump出rdb(一大整塊快照)到slave中,在主伺服器和從伺服器同步的時候,主伺服器有時會發生修改,所以需要通過緩衝aof日誌檔案到從伺服器實現同步,然後通過replicationFeedSlaves這一程序進行通訊。

四、搭建redis叢集

下面,我們來動手搭建redis叢集,我們會啟動三臺伺服器,一臺master,兩臺slave,master埠6379,一臺slave伺服器埠號6380,另一臺埠號6381,為了降低redis的io流的負擔,我們master關閉rdb,slave1開啟aof,slave2關閉rdb與aof。

1.首先,複製兩個slave的配置檔案。

root@myhadoop:/myredis# cp redis.conf redis6380.conf
root@myhadoop:/myredis# cp redis.conf redis6381.conf

2.然後修改redis6380.conf檔案

pidfile /var/run/redis_6380.pid
...
port 6380
...
#做6379埠主伺服器的slave
slaveof localhost 6379   
#關閉aof
appendonly no
#設定從伺服器為只讀,防止從伺服器被修改主從不一致
slave-read-only yes

同理修改redis6381.conf檔案

pidfile /var/run/redis_6381.pid
...
port 6381
...
#做6379埠主伺服器的slave
slaveof localhost 6379   
#關閉aof
appendonly no
#關閉rdb
#save 900 1 #save 300 10 #save 60 10000 #設定從伺服器為只讀,防止從伺服器被修改主從不一致 slave-read-only yes

master配置檔案redis.conf只需要關閉rdb即可。

至此,我們就搭建完了redis叢集,下面我們來測試叢集是否搭建成功。

啟動三臺伺服器:
這裡寫圖片描述
連線伺服器:
這裡寫圖片描述

這裡寫圖片描述

這裡寫圖片描述

怎麼證明我們叢集搭建好了呢?我們先在主伺服器寫入資料,然後我們在從伺服器中如果可以讀到相應的資料說明我們叢集搭建成功了。

這裡寫圖片描述

這裡寫圖片描述

這裡寫圖片描述

從圖中可以看出我們叢集已經搭建成功了。

五、主從複製的缺陷

每次salave斷開後,(無論是主動斷開,還是網路故障)再連線master,都要master全部dump出來rdb,再aof,即同步的過程都要重新執行1遍.所以要記住,多臺slave不要一下都啟動起來,否則master可能IO劇增,致使master宕機癱瘓。

最後,還有一點需要說一下,有時候會需要為我們的叢集來設定密碼,當然在內網中訪問大可不必設定密碼,這裡簡單提一下。
在主伺服器中設定密碼,如下面設定主伺服器密碼為123。

requirepass 123

然後在兩臺從伺服器上設定認證密碼即可。

masterauth 123

在再次啟動伺服器的時候,主伺服器需要通過 “”auth 密碼“命令連線伺服器才能獲取資料,從伺服器不需要輸入祕密即可訪問。

至此,我們討論完怎麼搭建簡單的redis叢集實現主從複製。