Redis数据库(四)哨兵和集群
目錄
一、Redis高可用
1、主從復制
①概念
②作用
③流程
2、哨兵(至少三臺redis)
①概念
②作用
③結構
④故障轉移機制
⑤主節點選舉
3、集群(推薦至少6臺redis)
①簡介
②作用
③集群模式的數據分片
④新master加入
二、主從復制部署
1、環境
2、master節點配置
3、 slave節點配置
4、驗證主從
三、哨兵部署
1、在主從的基礎上配置哨兵
2、啟動哨兵
3、持續查看哨兵信息?
4、模擬故障
四、Redis集群部署
1、配置6個redis服務
2、修改配置文件
3、啟動節點
4、啟動集群
5、集群測試
一、Redis高可用
在Redis中實現高可用的技術主要有持久化、主從復制、哨兵和集群
1、主從復制
主從復制是Redis高可用的基礎,哨兵和集群都是在主從復制的基礎上實現的。主從復制主要實現了數據的舵機備份以及對于讀操作的負載均衡和簡單的故障恢復。但還是有極大的限制:故障恢復無法自動化;寫操作無法負載均衡;存儲能力受單機性能的限制。
①概念
主從復制是指將一臺Redis服務器的數據復制到其他的Redis服務器(主從節點)數據的復制只能由主節點到從節點,是單向的。默認情況下,每臺Redis服務器都是主節點且每一個主節點可有多個或者沒有從節點,但是每一個從節點只能有一個主節點。
②作用
由主從復制實現了數據的熱備份,是持久化以外的一種數據冗余方式。當主節點出現問題時,可以由從節點提供服務,實現快速的故障恢復(實際上是一種服務器的冗余)。在主從復制的基礎上,配合讀寫分離,可以由主節點提供寫服務,從節點提供讀服務,分擔服務器的負載,尤其在寫少讀多的情況下,通過多個從節點分擔讀負載可以大大提高Redis服務器的并發量。
③流程
開啟redis服務,從服務器向主服務器發送SYNC同步請求。主服務器會fork一個子進程產生一個RDB文件(客戶端仍舊寫入新命令)。RDB文件持久化完成后,主服務器會將RDB文件和緩存起來的命令推送給從服務器。
2、哨兵(至少三臺redis)
在主從復制的基礎上,哨兵實現了自動化的故障恢復。
缺陷:寫操作無法負載均衡;存儲能力依然受單機性能的限制。
①概念
哨兵是一個分布式系統,用于對主從結構種的每臺服務器進行監控。在主從復制的基礎上,哨兵引入了主節點的自動故障轉移,當出現故障時通過投票是否離線來選擇新的master節點并將所有slave連接到新的master。
②作用
哨兵會不斷地檢查主節點和從系欸但是否正常。當主節點不能正常工作時哨兵會開始故障轉移操作,通過將一個從節點升級為新的主節點并將原從節點指向新master,同時可以將故障轉移結果發送給客戶端。
③結構
哨兵由兩部分組成:哨兵節點和數據節點。由一個或多個哨兵節點組成一個哨兵系統,不儲存數據。主節點和從節點都是數據節點。
④故障轉移機制
由哨兵節點定期監控主節點是否發生故障。每個哨兵節點每隔1s向主節點、從節點以及其他燒餅節點發送一個ping命令做一次心跳檢測,如果主節點在一定時間范圍內不回復或者時回復一個錯誤信息,那么就認為這個主節點主觀下線。當超過半數的哨兵節點認為該主節點主觀下線,則視為該主節點客觀下線。此時哨兵節點會通過Raft算法實現選舉機制共同選舉出一個哨兵節點為leader來負責處理主節點的故障轉移和通知。
需要注意的是客觀下線是主節點才有的概念,如果從節點和哨兵節點發生故障,被哨兵主觀下線后不會再有后續的客觀下線和故障轉移操作。
⑤主節點選舉
過濾掉不健康的、沒有回復哨兵ping響應的從節點;選擇配置文件中從節點優先級配置最高的;選擇復制偏移量最大,復制最完整的從節點。
3、集群(推薦至少6臺redis)
通過集群,Redis解決了寫操作無法負載均衡以及存儲能力受單機限制的問題,是一個較為完善的高可用方案。
①簡介
redis集群模式是一個可以解決寫的操作無法負載均衡、存儲受單機限制以及故障自動切換功能的一個集群。由多個節點組成,redis的數據分布在這些節點中。節點分為主節點和從節點,只有主節點復制讀寫請求和集群信息的維護,從節點只進行主節點數據和狀態信息的復制。
②作用
數據分區(分片)是居群最核心的功能。
集群將數據分散到多個系欸但,一方面突破了redis單機內存大小的限制,存儲容量大大增加,另一方面每個主節點都可以對外提供讀寫服務,提高了集群的響應能力。
③集群模式的數據分片
redis集群引入了哈希槽的概念,每個集群由16384個哈希槽(編號0-16383),集群中的每個節點負責一部分哈希槽。每個key通過CRC16校驗后對16384取余來決定放置哪個哈希槽,通過這個值去找對應的插槽所對應的節點,然后直接自動跳轉到這個對應的節點上進行存取操作。
總的來說就是集群是分布式的,它可以將多個master當作一個整體來存放數據并且集群中由16384個哈希槽,集群中的master來平分這些槽位。當需要由數據來存儲到集群中時,需要使用CRC16算法得出一個結果再將這個結果對16384取余,最后得到對應的曹魏,根據槽位選定最頂存放的master節點。
④新master加入
如果有新的master節點加入,集群會將現有的每一個哈希槽移除一部分,使得新節點加入后仍可以均分。
二、主從復制部署
1、環境
master? ? ? ? ? ? ? ? 192.168.10.101
slave1? ? ? ? ? ? ? ? ?192.168.10.102
slave2? ? ? ? ? ? ? ? ?192.168.10.103
準備好redis服務
2、master節點配置
監聽所有網段。
開啟持久化。
其他配置與(二)相同。
重啟服務。
3、 slave節點配置
?
添加主服務器ip和端口。
重啟服務。
4、驗證主從
在master節點創建一個新鍵
日志變化?
?從節點變更
三、哨兵部署
1、在主從的基礎上配置哨兵
所有節點上配置
vim /opt/redis-5.0.7/sentinel.conf
關閉保護模式?
指定sentinel后臺啟動
指定日志存放路徑
指定數據庫存放路徑
指定主節點,名稱mymaster,需要至少2個哨兵節點同意才能判定主節點客觀下線。
判定服務器down的時間周期,默認3w毫秒也就是30s
故障節點的最大超時時間為18w毫秒,即180s?
2、啟動哨兵
查看哨兵信息
redis-cli -p 26379 info sentinel?
3、持續查看哨兵信息?
watch -n 1 redis-cli -p 26379 info sentinel
?4、模擬故障
關閉master的redis服務。
master跳轉到192.168.10.102節點。
四、Redis集群部署
以一臺虛擬機模擬三主三從合計6臺服務器
1、配置6個redis服務
2、修改配置文件
注釋,表示監聽所有端口
關閉保護模式
根據之前設置的更改端口
開啟守護進程
開啟AOF持久化
開啟集群功能
集群名稱文件設置
集群超時時間設置?
3、啟動節點
分別進入6個節點啟動服務
4、啟動集群
成功啟動
5、集群測試
redis-cli -p 6001 -c
-c? ? ? ? ? ? ? ? 節點之間可以相互跳轉
cluster? slots
查看節點的哈希槽編號范圍
cluster? keyslot? 鍵名
查看鍵的哈希槽編號
每組分別一主一從
總結
以上是生活随笔為你收集整理的Redis数据库(四)哨兵和集群的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 很不爽,被骗了。。。。。。。
- 下一篇: mysql根据出生日期统计各年龄段男女人