日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

Redis数据库(四)——Redis集群模式(主从复制、哨兵、Cluster)

發布時間:2024/2/28 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Redis数据库(四)——Redis集群模式(主从复制、哨兵、Cluster) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Redis數據庫(四)——Redis集群模式(主從復制、哨兵、Cluster)

  • 一、Redis主從復制
    • 1、主從復制流程
  • 二、哨兵模式
    • 1、哨兵模式集群架構
    • 2、哨兵模式主要功能
    • 3、哨兵監控整個系統節點的過程
    • 4、主觀下線
    • 5、客觀下線
    • 6、master 選舉
    • 7、故障遷移
    • 8、優點與缺點
  • 三、Cluster群集
  • 四、實驗一(主從復制)
  • 五、實驗二(哨兵模式)
  • 六、實驗三(Cluster群集)
  • 總結
    • 主從復制流程
    • 哨兵主要功能
    • Cluster群集的功能

一、Redis主從復制

  • 通過持久化功能,redis保證了即使在服務器重啟的情況下也不會丟失(或少量丟失)數據,因為持久化會把內存中的數據保存到硬盤上,重啟會從硬盤上加載數據,但是由于數據是存儲在一臺服務器上的,如果這臺服務器出現硬盤故障等問題,也會導致數據丟失。
  • 為了避免單點故障,通常的做法是將數據庫復制多個副本以部署在不同的服務器上,這樣即使有一臺服務器出現故障,其他服務器依然可以繼續提供服務,為此, redis提供了復制(replication)功能,可以實現當一臺數據庫中的數據更新后,自動將更新的數據同步到其他數據庫上。
  • 在復制的概念中,數據庫分為兩類,一類是主數據庫(master) ,另一類是從數據(slave) 。主數據可以進行讀寫操作,當寫操作導致數據變化時會自動將數據同步給從數據庫,而從數據庫一般是只讀的,并接受主數據同步過來的數據。一個主數據庫可以擁有多個從數據庫,而一個從數據庫只能擁有一個主數據庫。

1、主從復制流程

  • 【1】若啟動一個slave機器進程,則它會向master機器發送一個“sync command”命令,請求同步連接

  • 【2】無論是第一次連接還是重新連接,master機器都會啟動一個后臺進程,將數據快照(RDB)保存到數據文件中(執行RDB操作),同時master還會記錄修改數據的所有命令,并緩存在數據文件中

  • 【3】后臺進程完成緩存操作后,master機器就會向slave機器發送數據文件,slave端機器將數據文件保存在硬盤上,然后將其加載到內存中,接著master機器就會將修改數據的所有操作一并發送給slave端機器。若slave出現故障導致宕機,則恢復正常后會自動重新連接

  • 【4】master機器收到slave端機器的連接后,將其完整的數據文件發送給slave端機器,如果master同時收到多個slave發來的同步請求,則master會在后臺啟動一個進程以保存數據文件,然后將其發送給所有的slave端機器,確保所有的slave端機器都正常工作

二、哨兵模式

1、哨兵模式集群架構

  • 哨兵是Redis集群架構中非常重要的一個組件,哨兵的出現主要是解決了主從復制出現故障時需要認為干預的問題

2、哨兵模式主要功能

  • 【1】集群監控:負責監控 Redis master 和 slave 進程是否正常工作
  • 【2】消息通知:如果某個 Redis 實例出現故障,那么哨兵負責發送消息作為報警通知給管理員
  • 【3】故障轉移:如果 master node 掛掉了,會自動轉移到 slave node 上
  • 【4】配置中心:如果故障轉移發生了,通知 client 客戶端習新的 master 地址

3、哨兵監控整個系統節點的過程

  • 【1】首先主節點的信息是配置在哨兵的配置文件中
  • 【2】哨兵節點會和配置的主節點建立起兩條連接命令連接和訂閱連接
  • 【3】哨兵會通過命令連接每10s發送一次INFO命令,通過INFO命令,主節點會返回自己的run_id 和自己的從節點信息
  • 【4】哨兵會對這些從節點也建立兩條連接命令連接和訂閱連接
  • 【5】哨兵通過命令連接向從節點發送INFO命令,獲取到他的一些信息:
    • run_id(redis服務器id)
    • role(職能)
    • 從服務器的復制偏移量 offset
    • 其他
  • 【6】通過命令連接向服務器的 _sentinel:hello 頻道發送一條消息,包括自己的ip端口、run_id、配置(后續投票的時候會用到)等
  • 【7】通過訂閱連接對服務器的 _sentinel:hello 頻道做監聽,所以所有的向該頻道發送的哨兵消息都能被接收到
  • 【8】解析監聽到的消息,進行分析提取,就可以知道還有哪些別的哨兵服務節點也在監聽這些主從節點了,更新結構體將這些哨兵節點記錄下來
  • 【9】向觀察到的其他的哨兵節點建立命令連接

4、主觀下線

  • 哨兵節點會每秒一次的頻率向建立了命令節點的實例發送ping命令,如果在 down-after-milliseconds 毫秒內沒有做出有效響應包括(pong/loading/masterdown)以外的響應,哨兵就會將該實例在本結構體中的狀態標記為 sri_s_down 主觀下線

5、客觀下線

  • 當一個哨兵節點發現主節點處于主觀下線狀態時,就會向其他的哨兵節點發出詢問,該節點是否已經主觀下線。如果超過配置參數 quorum 個節點認為是主觀下線時,該哨兵節點就會將自己維護的結構體中該主節點標記為 sri_o_down 客觀下線

6、master 選舉

  • 在認為主節點客觀下線的情況下,哨兵節點間會發起一次選舉,命令為: SENTINEL is-master-down-by-addr,只是 run_id 這次會將自己的 run_id 帶進去,希望接受者將自己設置為主節點。如果超過半數以上的節點返回將該節點標記為 leader 的情況下,會有該 leader 對故障進行遷移

7、故障遷移

  • 【1】在從節點中挑選出新的從節點
    • 通訊正常
    • 優先級排序
    • 優先級相同時選擇offset最大的
  • 【2】將該節點設置成新的主節點 slaveof no one ,并確保在后續的 INGO 命令時,該節點返回狀態為 master
  • 【3】將其他的從節點設置成從新的主節點服務, slaveof 命令
  • 【4】將舊的主節點變成新的主節點的從節點

8、優點與缺點

  • 【優點】:高可用,哨兵模式是基于主從模式的,所有主從模式的優點,哨兵模式都有;主從可以自動切換,系統更健壯,可用性更高
  • 【缺點】:redis 比較難支持在線擴容,在群集容量達到上限時在線擴容會變得很復雜

三、Cluster群集

  • redis的哨兵模式基本已經可以實現高可用、讀寫分離,但是在這種模式,每臺redis服務器都存儲相同的數據,很浪費內存資源,所以加入了 Cluster 群集模式,實現了redis的分布式存儲,也就是說,每臺redis節點存儲著不同的內容
  • 群集部署建議至少3臺以上的master節點,建議使用3主3從六個節點的模式
  • Cluster 群集由多個redis服務器組成的分布式網絡服務群集,群集中有多個master主節點,每個主節點都可讀可寫,節點之間會互相通信,兩兩相連,redis群集無中心節點

【1】在 redis-Cluster 群集中,可以給每個主節點添加從節點,主節點和從節點直接遵循主從模型的特性,當用戶需要處理更多讀請求的時候,添加從節點可以擴展系統的讀性能
【2】redis-Cluster 的故障轉移:redis群集的主節點內置了類似 redis sentinel 的節點故障檢測和自動故障轉移功能,當群集中的某個主節點下線時,群集中的其他在線主節點會注意到這點,并且對已經下線的主節點進行故障轉移
【3】群集進行故障轉移的方法和 redis sentinel 進行故障轉移的方法基本一樣,不同的是,在集群里面,故障轉移是由集群中其他在線的主節點復制進行的,所以群集不必另外使用 redis sentinel

四、實驗一(主從復制)

主機IP地址軟件 / 安裝包 / 工具
Master192.168.184.10redis-5.0.7.tar.gz
Slave1192.168.184.30redis-5.0.7.tar.gz
Slave2192.168.184.50redis-5.0.7.tar.gz
#關閉防火墻和核心防護 systemctl stop firewalld systemctl disable firewalld setenforce 0#進行redis的安裝(所有主機都需要安裝) yum install -y gcc gcc-c++ make cd /opt tar zxvf redis-5.0.7.tar.gz cd /opt/redis-5.0.7/ make -j 2 && make PREFIX=/usr/local/redis install cd /opt/redis-5.0.7/utils ./install_server.sh Please select the redis executable path [/usr/local/bin/redis-server] /usr/local/redis/bin/redis-server ln -s /usr/local/redis/bin/* /usr/local/bin/#Master節點(192.168.184.10): vim /etc/redis/6379.conf bind 0.0.0.0 #70行,修改bind 項,0.0.0.0監聽所有網段 daemonize yes #137行,開啟守護進程 logfile /var/log/redis_6379.log #172行,指定日志文件目錄 dir /var/lib/redis/6379 #264行,指定工作目錄 appendonly yes #700行,開啟AOF持久化功能 /etc/init.d/redis_6379 restart #重啟redis服務#slaves節點(192.168.184.30、192.168.184.50): vim /etc/redis/6379.conf bind 0.0.0.0 #70行,修改bind 項,0.0.0.0監聽所有網卡 daemonize yes #137行,開啟守護進程 logfile /var/log/redis_6379.log #172行,指定日志文件目錄 dir /var/lib/redis/6379 #264行,指定工作目錄 replicaof 192.168.184.10 6379 #288行,指定要同步的Master節點IP和端口 appendonly yes #700行,開啟AOF持久化功能 /etc/init.d/redis_6379 restart#進行主從復制驗證 tail -f /var/log/redis_6379.log #查看master節點日志 redis-cli info replication #master上驗證從節點




五、實驗二(哨兵模式)

  • 哨兵的核心功能:在主從復制的基礎上,哨兵引入了主節點的自動故障轉移
  • 哨兵:是一個分布式系統,用于對主從結構中的每臺服務器進行監控,當出現故障時通過投票機制選擇新的 master 并將所有 slave 連接到新的 master 。所以整個運行哨兵的集群的數量不得少于3個節點。
#修改配置文件(所有節點) vim /opt/redis-5.0.7/sentinel.conf protected-mode no #17行,關閉保護模式 port 26379 #21行,Redis哨兵默認的監聽端口 daemonize yes #26行,指定sentinel為后臺啟動 logfile "/var/log/sentinel.log" #36行,指定日志存放路徑 dir "/var/lib/redis/6379" #65行,指定數據庫存放路徑 sentinel monitor mymaster 192.168.184.10 6379 2 #84行,修改 指定該哨兵節點監控192.168.184.10:6379這個主節點,該主節點的名稱是mymaster,最后的2的含義與主節點的故障判定有關:至少需要2個哨兵節點同意,才能判定主節點故障并進行故障轉移 sentinel down-after-milliseconds mymaster 30000 #113行,判定服務器down掉的時間周期,默認30000毫秒(30秒) sentinel failover-timeout mymaster 180000 #146行,故障節點的最大超時時間為180000180秒)#啟動哨兵模式 redis-sentinel /opt/redis-5.0.7/sentinel.conf & #先啟動master,再啟動slave#查看哨兵信息 redis-cli -p 26379 info sentinel#模擬故障 netstat -natp | grep redis kill -9 redis的進程#查看哨兵的信息 redis-cli -p 26379 info sentinel#查看日志 tail -f /var/log/sentinel.log






六、實驗三(Cluster群集)

主機IP:端口軟件/安裝包/工具
Master1192.168.184.10:7001redis-5.0.7.tar.gz
Slave1192.168.184.60:7006redis-5.0.7.tar.gz
Master2192.168.184.30:7003redis-5.0.7.tar.gz
Slave2192.168.184.70:7007redis-5.0.7.tar.gz
Master3192.168.184.50:7005redis-5.0.7.tar.gz
Slave3192.168.184.80:7008redis-5.0.7.tar.gz
#其他5個文件夾的配置文件以此類推修改,注意6個端口和IP都要不一樣。 vim /etc/redis/6379.confbind 192.168.184.10 #70行,修改bind項,監聽自己的IP protected-mode no #89行,修改,關閉保護模式 port 7001 #93行,修改,redis監聽端口, daemonize yes #137行,以獨立進程啟動 cluster-enabled yes #833行,取消注釋,開啟群集功能 cluster-config-file nodes-6379.conf #841行,取消注釋,群集名稱文件設置,無需修改 cluster-node-timeout 15000 #847行,取消注釋群集超時時間設置 appendonly yes #700行,修改,開啟AOF持久化#重啟服務 /etc/init.d/redis_6379 restart#加入集群 redis-cli --cluster create 192.168.184.10:7001 192.168.184.30:7003 192.168.184.50:7005 192.168.184.60:7006 192.168.184.70:7007 192.168.184.80:7008 --cluster-replicas 1redis-cli -h 192.168.184.10 -p 7001 -c #加-c參數,節點之間就可以互相跳轉 cluster slots #查看節點的哈希槽編號范圍 set sky blue cluster keyslot sky #查看name鍵的槽編號


總結

主從復制流程

  • 【1】slave向master機器發送“sync command”命令,請求同步連接
  • 【2】master通過fork啟動子進程,將數據快照及緩存命令保存到數據文件中
  • 【3】master向slave發送數據文件,slave保存到硬盤后加載到內存,接著master會將修改數據的所有操作一并發送給slave。若slave出現故障導致宕機,則恢復正常后會自動重新連接
  • 【4】master收到slave的連接后,將完整的數據文件發送給slave,如果有多個同步請求,則master啟動一個后臺進程保存數據文件,然后發送給所有的slave

哨兵主要功能

  • 【1】集群監控:負責監控 Redis master 和 slave 進程是否正常工作
  • 【2】消息通知:如果某個 Redis 實例出現故障,那么哨兵負責發送消息作為報警通知給管理員
  • 【3】故障轉移:如果 master node 掛掉了,會自動轉移到 slave node 上
  • 【4】配置中心:如果故障轉移發生了,通知 client 客戶端習新的 master 地址

Cluster群集的功能

  • 【】數據分區:數據分區(或稱數據分片)是集群最核心的功能。
    • 集群將數據分散到多個節點,一方面突破了Redis單機內存大小的限制,存儲容量大大增加;另一方面每個主節點都可以對外提供讀服務和寫服務,大大提高了集群的響應能力。
    • Redis單機內存大小受限問題,在介紹持久化和主從復制時都有提及;例如,如果單機內存太大,bgsave和bgrewriteaof的fork操作可能導致主進程阻塞,主從環境下主機切換時可能導致從節點長時間無法提供服務,全量復制階段主節點的復制緩沖區可能溢出。
  • 【】高可用:集群支持主從復制和主節點的自動故障轉移(與哨兵類似);當任一節點發生故障時,集群仍然可以對外提供服務。

總結

以上是生活随笔為你收集整理的Redis数据库(四)——Redis集群模式(主从复制、哨兵、Cluster)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。