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