1. 程式人生 > >redis安裝+主從+哨兵模式和坑。

redis安裝+主從+哨兵模式和坑。

一、安裝

版本:3.2.11

1.解壓
2.進入解壓後的目錄 執行 make
3.執行 make install (這一步需要root許可權的使用者執行


上面的操作後基本上一個單節點的redis就算是安裝好了,進入src目錄 執行redis-server 就可以成功啟動redis。

二、主從模式(master/slaver)

我的理解:
主從的作用或者說優勢大概有兩點
1.備份資料,當某個節點有問題時(無論是master還是slaver)方便從正常的節點恢復資料。
2.負載均衡,slaver節點只能讀,可以分擔一些master的讀取操作。

注:slaver預設是隻能讀的,但是可以通過在master節點的redis.conf檔案中將slave-read-only設定為no(預設yes)讓slave設定為可以寫。但是不推薦這樣操作,master節點寫資料時,會同時推送到slaver節點下,從而保持資料的一致性,但是在slave節點寫的資料不會同步到master中,就會有問題。

主從模式的配置十分簡單,在slaver節點的redis.conf中增加 slaveof 【masterIp】 【masterPort】

缺點:由於從節點只能讀,所以缺點很明顯加入master掛掉以後,redis就不能對外提供服務了,因為剩下的slave不能成為master,這個問題影響還是很大的。所以就有了下面的哨兵模式。

三、sentinel模式

sentinel的中文含義是哨兵、守衛。也就是說既然主從模式中,當master節點掛了以後,slave節點不能主動選舉一個master節點出來,那麼我就安排一個或多個sentinel來做這件事,當sentinel發現master節點掛了以後,sentinel就會從slave中重新選舉一個master。

對sentinel模式的理解:

1.sentinel模式是建立在主從模式的基礎上,如果只有一個Redis節點,sentinel就沒有任何意義

2.當master節點掛了以後,sentinel會在slave中選擇一個做為master,並修改它們的配置檔案,其他slave的配置檔案也會被修改,比如slaveof屬性會指向新的master

3.當master節點重新啟動後,它將不再是master而是做為slave接收新的master節點的同步資料

4.sentinel因為也是一個程序有掛掉的可能,所以sentinel也會啟動多個形成一個sentinel叢集

5.當主從模式配置密碼時,sentinel也會同步將配置資訊修改到配置檔案中,不需要擔心。

6.一個sentinel或sentinel叢集可以管理多個主從Redis。

7.sentinel最好不要和Redis部署在同一臺機器,不然Redis的伺服器掛了以後,sentinel也掛了

8.sentinel監控的Redis叢集都會定義一個master名字,這個名字代表Redis叢集的master Redis。

注:當使用哨兵模式的時候 客戶端就不需要直接連線redis,而是連線哨兵的ip和埠,由sentinel來提供具體的可提供服務的Redis實現,這樣當master節點掛掉以後,sentinel就會感知並將新的master節點提供給使用者。

sentinel模式基本可以滿足一般生產的需求,具備高可用性。但是當資料量過大到一臺伺服器存放不下的情況時,主從模式或sentinel模式就不能滿足需求了,這個時候需要對儲存的資料進行分片,將資料儲存到多個Redis例項中,這就需要叢集模式。

cluster的出現是為了解決單機Redis容量有限的問題,將Redis的資料根據一定的規則分配到多臺機器。
cluster可以說是sentinel和主從模式的結合體,通過cluster可以實現主從和master重選功能,所以如果配置兩個副本三個分片的話,就需要六個Redis例項。
因為Redis的資料是根據一定規則分配到cluster的不同機器的,當資料量過大時,可以新增機器進行擴容
  這種模式適合資料量巨大的快取要求,當資料量不是很大使用sentinel即可。

四、主從+哨兵的配置

對於單純的主從來講不需要配置太多,只需要在slave節點 加上
slaveof 【masterIp】 【masterPort】 就可以了。
然後分別啟動master和slave就可以了。

其他的引數:
port:埠
masterauth:master設定連線密碼
requirepass:連線master是認證的密碼
(由於哨兵模式在master節點掛掉之後會修改配置檔案,所以masterauth和requirepass不管是主從都需要設定)
bind:這個屬性並不是配置內個ip可以訪問它,而是設定他可以讓別人用內個ip進行訪問,例如設定127.0.0.1 則只能本地伺服器使用127.0.0.1進行訪問,還有一種情況若伺服器配置了多個網絡卡,例如A:10.10.10.1;B:10.10.10.2,此時在bind中配置了A,那以B訪問則訪問不到

protected-mode:是否只允許內網訪問。

以上配置都是在redis.conf中設定的。

下面來看哨兵的配置

哨兵的啟動和redis-server的啟動沒有關係,一個哨兵的叢集可以監控多個不同的redis主從例項

1.
sentinel monitor master-name ip redis-port quorum
例:
sentinel monitor mymaster 192.168.98.136 6379 1

quorum:quorum個sentinel認為master死了時,才能真正認為該master已經不可用了。(sentinel叢集中各個sentinel也有互相通訊,通過gossip協議)

2.
sentinel auth-pass mymaster mypwd

連線master 需要的密碼

3.
down-after-milliseconds

sentinel會向master傳送心跳PING來確認master是否存活,如果master在“一定時間範圍”內不迴應PONG 或者是回覆了一個錯誤訊息,那麼這個sentinel會主觀地(單方面地)認為這個master已經不可用了(subjectively down, 也簡稱為SDOWN)。而這個down-after-milliseconds就是用來指定這個“一定時間範圍”的,單位是毫秒。

注:哨兵不會馬上進行failover主備切換,因為還要考慮其他哨兵的意見,需要超過某個數量的哨兵都認為master涼涼了,才會準備進行準備切換。在這個時候也不是馬上就能failover的,還是需要需要sentinel中的大多數sentinel授權後才可以進行failover

例如,叢集中有5個sentinel,票數被設定為2,當2個sentinel認為一個master已經不可用了以後,將會觸發failover,但是,進行failover的那個sentinel必須先獲得至少3個sentinel的授權才可以實行failover。
如果票數被設定為5,要達到ODOWN狀態,必須所有5個sentinel都主觀認為master為不可用,要進行failover,那麼得獲得所有5個sentinel的授權。

4.
protected-mode
這個屬性在哨兵設定中很容易出現坑,由於哨兵間需要進行通訊進行授權,所以這個屬性設定為yes時只可以進行內網訪問,看伺服器的情況如果主從切換失敗了,可以試試把這個屬性設定為no。

參考部落格:
https://blog.csdn.net/yypzye/article/details/52281282
https://www.cnblogs.com/zhoujinyi/p/5569462.html