天天看點

redis哨兵主伺服器顯示slave,redis 主從及哨兵模式

redis 主從複制相關

#一般是主寫從讀,由主去主動同步資料到從

從伺服器配置

viredis.conf

slaveof192.168.11.128 6379masterauth123456           #主伺服器密碼,注意:有關slaveof的配置隻是配置從伺服器,主伺服器不需要配置

配置主從複制方式二、redis-server --slaveof 192.168.152.128 6379 臨時生效

檢視狀态:info replication

斷開主從複制:在slave節點,執行6380:>slaveof no one

斷開後再變成主從複制:6380:> slaveof 192.168.152.128 6379

資料較重要的節點,主從複制時使用密碼驗證: requirepass

從節點建議用隻讀模式slave-read-only=yes, 若從節點修改資料,主從資料不一緻

傳輸延遲:主從一般部署在不同機器上,複制時存在網絡延時問題,redis提供repl-disable-tcp-nodelay參數決定是否關閉TCP_NODELAY,預設為關閉

參數關閉時:無論大小都會及時釋出到從節點,占帶寬,适用于主從網絡好的場景,

參數啟用時:主節點合并所有資料成TCP包節省帶寬,預設為40毫秒發一次,取決于核心,主從的同步延遲40毫秒,适用于網絡環境複雜或帶寬緊張,如跨機房

一主一從模式

用于主節點故障轉移從節點,當主節點的“寫”指令并發高且需要持久化,可以隻在從節點開啟AOF(主節點不需要),這樣即保證了資料的安全性,也避免持久化對主節點的影響

一主多從模式

針對“讀”較多的場景,“讀”由多個從節點來分擔,但節點越多,主節點同步到多節點的次數也越多,影響帶寬,也加重主節點的穩定

樹狀一主多從:一主多從的缺點(主節點推送次數多壓力大)可用些方案解決,主節點隻推送一次資料到從節點B,再由從節點B推送到C,減輕主節點推送的壓力

資料同步

redis 2.8版本以上使用psync指令完成同步,過程分“全量”與“部分”複制

全量複制:一般用于初次複制場景(第一次建立SLAVE後全量)

部分複制:網絡出現問題,從節點再次連接配接主節點時,主節點補發缺少的資料,每次資料增量同步

心跳:主從有長連接配接心跳,主節點預設每10S向從節點發ping指令,repl-ping-slave-period控制發送頻率

主從的缺點

a)主從複制,若主節點出現問題,則不能提供服務,需要人工修改配置将從變主

b)主從複制主節點的寫能力單機,能力有限

c)單機節點的存儲能力也有限

6.主從故障如何故障轉移

a)主節點(master)故障,從節點slave-1端執行 slaveof no one後變成新主節點;

b)其它的節點成為新主節點的從節點,并從新節點複制資料;

c)需要人工幹預,無法實作高可用。

redis-哨兵模式

哨兵模式是主從基礎上的增強版。依然存在主從角色,隻是主挂了會自動把從切換為主。

哨兵模式是一種特殊的模式,首先Redis提供了哨兵的指令,哨兵是一個獨立的程序,作為程序,它會獨立運作。其原理是哨兵通過發送指令,等待Redis伺服器響應,進而監控運作的多個Redis執行個體。

這裡的哨兵有兩個作用

通過發送指令,讓Redis伺服器傳回監控其運作狀态,包括主伺服器和從伺服器。

當哨兵監測到master當機,會自動将slave切換成master,然後通過釋出訂閱模式通知其他的從伺服器,修改配置檔案,讓它們切換主機

然而一個哨兵程序對Redis伺服器進行監控,可能會出現問題,為此,我們可以使用多個哨兵進行監控。各個哨兵之間還會進行監控,這樣就形成了多哨兵模式。

用文字描述一下故障切換(failover)的過程

假設主伺服器當機,哨兵1先檢測到這個結果,系統并不會馬上進行failover過程,僅僅是哨兵1主觀的認為主伺服器不可用,這個現象成為主觀下線。

當後面的哨兵也檢測到主伺服器不可用,并且數量達到一定值時,那麼哨兵之間就會進行一次投票,投票的結果由一個哨兵發起,進行failover操作。

切換成功後,就會通過釋出訂閱模式,讓各個哨兵把自己監控的從伺服器實作切換主機,這個過程稱為客觀下線。這樣對于用戶端而言,一切都是透明的。

Redis配置哨兵模式

服務類型 是否是主伺服器 IP位址 端口

Redis 是192.168.11.128 6379Redis 否192.168.11.129 6379Redis 否192.168.11.130 6379Sentinel- 192.168.11.128 26379Sentinel- 192.168.11.129 26379Sentinel- 192.168.11.130 26379首先配置Redis的主從伺服器,修改redis.conf檔案如下

bind0.0.0.0# 使得Redis伺服器可以跨網絡通路

requirepass"123456"# 設定密碼

slaveof192.168.11.128 6379# 指定主伺服器,注意:有關slaveof的配置隻是配置從伺服器,主伺服器不需要配置

masterauth123456# 主伺服器密碼,注意:有關slaveof的配置隻是配置從伺服器,主伺服器不需要配置

上述内容主要是配置Redis伺服器,從伺服器比主伺服器多一個slaveof的配置和密碼。

配置3個哨兵,每個哨兵的配置都是一樣的。在Redis安裝目錄下有一個sentinel.conf檔案,copy一份進行修改

protected-mode no# 禁止保護模式

sentinel monitor mymaster 192.168.11.128 6379 2# 配置監聽的主伺服器,這裡sentinel monitor代表監控,mymaster代表伺服器的名稱,

可以自定義,192.168.11.128代表監控的主伺服器,6379代表端口,2代表隻有兩個或兩個以上的哨兵認為主伺服器不可用的時候,才會進行failover操作。

sentinel auth-pass mymaster 123456# sentinel author-pass定義服務的密碼,mymaster是服務名稱,123456是Redis伺服器密碼

啟動流程:

# 啟動Redis伺服器程序

./redis-server ../redis.conf

# 啟動哨兵程序

./redis-sentinel ../sentinel.conf

注意啟動的順序。首先是主機(192.168.11.128)的Redis服務程序,然後啟動從機的服務程序,最後啟動3個哨兵的服務程序。

應用程式連接配接哨兵模式方法

sentinel:

nodes:192.168.43.234:26379,192.168.43.234:26380,192.168.43.234:26381master: mymaster