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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

redis配置主从没效果_跟我一起学Redis之加个哨兵让主从复制更加高可用

發布時間:2023/12/20 数据库 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 redis配置主从没效果_跟我一起学Redis之加个哨兵让主从复制更加高可用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Redis哨兵(Sentinel)其實本質就是一個RedisServer節點,通過設置 運行模式 來開啟哨兵的功能;主要功能如下:

  • 監控(Monitoring ):哨兵節點會不斷地檢查的主服務和從服務的運行狀態;
  • 自動故障遷移(Automatic failover) :當Redis主從模式中的主服務器發生故障時,哨兵節點會根據一定的策略自動進行故障遷移,即在原有主服務器下的從服務器中,自動選出一個從服務器作為新的主服務器,及時處理故障;
  • 通知(Notification) :當被監控的Redis服務器故障時,哨兵節點可以向相關人員或客戶端發送通知提醒;
  • 配置提供者(Configuration provider) :可以通過哨兵節點為客戶端提供主從模式中的主節點地址,這里的客戶端指平時寫的程序;

老規矩,還是先不說那么多理論,先來實操一把,然后再來總結:

哨兵模式搭建

先來個最基礎的:一個哨兵監控一主二從的環境;后面小伙伴就知道如何擴展啦,如下圖所示(這里通過一臺機器演示,所以通過端口進行區分各個redis節點):

Redis哨兵模式是基于Redis主從復制的,所以先來搭建主從復制環境,這個過程在 上一篇 中已經詳細分享,這里就不細說,直接動手啦;

  • 搭建主從復制環境,如上圖所示,6377作為主服務器,6388和6399作為從服務器,這里是通過配置文件的形式修改,最終效果如下:
  • 主從復制環境搭建完畢之后,接下來需要有一個哨兵對其進行監控;之前有說過,Redis的功能通過配置文件就能快速實現,針對哨兵有一個單獨的配置文件,這里就起名為: sentinel.conf ,內容如下:sentinel monitor mymaster 127.0.0.1 6377 1大概意思就是哨兵要監控對應的主服務器,其他啥都不用配置;這里對于配置文件內容先不解釋這么多,接下來會專門進行介紹,先把環境搭建起來,玩一把再說;
  • 啟動哨兵,兩種方式:redis-sentinel啟動,redis-sentinel其實是用redis的一個代碼分支分離出來的,安裝完redis就有,命令如下:./redis-sentinel ZoeConfig/sentinel.confredis-server啟動,指定為哨兵模式即可,命令如下:./redis-server ZoeConfig/sentinel.conf --sentinel啟動效果如下:如上圖所示,Redis哨兵其實本質還是一個Redis節點,只是運行模式不一樣而已;
  • 哨兵模式運行起來,模擬主服務器宕機,這里直接將6377服務器shutdown, 注意看哨兵打印的日志:先將主服務器6377關掉,如下:由于哨兵定時對主服務器進行監控,如果在30秒內(默認30秒)發現主服務器無法正常通訊時,就開始進行投票選舉原主服務器下的從服務器作為新主服務器,哨兵打印日志如下:大概流程如下圖:哨兵最后的狀態會持久化到指定的配置文件中,之前只是簡單配置了一條監控語句,現在如下:
  • 驗證故障轉移結果;光說6388變成了主服務器沒證據,連上6388看看,同時再看看6399有沒有換新主人,如下圖:6388主從信息:對應的配置文件中將之前的主從關系配置已經去掉了。6399主從信息:對應的配置文件也已經改了,如下:
  • 以上就完成了哨兵模式搭建的演示啦,是不是很簡單,只要稍微改改配置文件即可完成自動化故障恢復。 到這小伙伴可能會問,原來故障的主服務器恢復了會怎么樣? 一個哨兵誤判主服務器下線或高并發抗不住怎么辦?嘿嘿嘿,接著來搞,接下來邊操作邊總結;

    原故障的主服務器恢復之后只能當小兵

    原有通訊異常的主服務器如果恢復正常,那它還能恢復原來的地位嗎?,還是另有安排呢?這個很好演示,直接將之前shutdown的主服務器重新起來即可;6377啟動后查看主從關系信息如下圖:

    如上圖實操驗證,原來異常的主服務器(6377)恢復之后就變成新主服務器(6388)的從服務器了(原來再屌,現在也只是小弟,重新再混等機會)。

    哨兵集群高可用

    以上演示就一個哨兵,這樣有很明顯的兩個缺點,如下:

    • 單個哨兵容易導致誤判主節點下線,比如主節點正常,只是在與哨兵之間通訊出現短暫異常,如果是單個哨兵,在指定的時間間隔沒有通訊就認為主節點下線了,但其實沒有;如果哨兵集群,可以詢問多個哨兵指定的主節點是否下線,這樣就顯得更有保障;
    • 哨兵掛了,故障轉移就沒法繼續啦,哨兵集群的話就會選擇其他哨兵繼續處理;

    配置哨兵集群超級簡單,就是增加節點即可,哨兵節點會通過發布與訂閱功能來自動發現正在監視 相同主服務器 的其他哨兵 , 這一功能是通過向頻道 sentinel :hello 發送信息來實現的。如下圖再新增一個哨兵節點,同時增加一個配置文件,由于默認端口為26379,上一個哨兵已經占用,這里在新增的配置文件中指定新哨兵的端口為:26388;

    配置文件名為 sentinel26388.conf ,內容如下:

    sentinel monitor mymaster 127.0.0.1 6388 1port 26388

    指定配置文件啟動第二個哨兵,啟動命令為 ./redis-sentinel ZoeConfig/sentinel26388.conf ,效果如下:

    哨兵如何做到互相交流和監控從服務器的

    到這應該有小伙伴會有疑問:在配置哨兵的時候,只配置監控主服務器,從服務器是怎么知道的?哨兵之間的交流是通過什么形式實現的?

    關于從服務器:哨兵會自動詢問主服務器獲得對應從服務器的信息,因為從服務器會在連接主服務器的時候把相關信息給主服務器,所以哨兵能通過主服務器拿到從服務器的信息;

    關于哨兵之間:哨兵節點會通過發布與訂閱功能來自動發現正在監視 相同主服務器 的其他哨兵 , 這一功能是通過向頻道 sentinel :hello 發送信息來實現的;

    注:一個哨兵可以同時監控多個主服務器;

    哨兵配置文件介紹

    以上配置只是為了快速實現演示,其實關于哨兵還有其他很多配置,接下來都過一遍:

    • port:哨兵的端口,默認是26379,可以通過此配置項進行修改;
    • dir:哨兵的工作目錄;
    • sentinel monitor : 指定哨兵監控的主服務器;master-name:對監控的節點進行命名,方便后續根據名稱獲取信息;ip:主節點ip;redis-port:主節點的端口;quorum:整數,及設置有幾個哨兵統一認為主節點下線為條件,滿足這個數量就將主節點標記為客觀下線;例:sentinel monitor mymaster 127.0.0.1 6388 2,意思就是當有兩個哨兵都認為監控的mymaster主節點下線了,就將此主節點標記為客觀下線;則可以進行下一步故障轉移操作了;
    • sentinel auth-pass : 設置主節點和從節點的連接密碼,這里只能統一設置,所以主節點和從節點的密碼要一樣;
    • sentinel down-after-milliseconds : 設置失聯時間,單位為毫秒,默認為30秒,如果哨兵在30秒內沒有接收到主節點的應答,就認為主節點異常了,并將其標記為主觀下線;
    • sentinel parallel-syncs : 故障轉移之后,在新的主從關系下,同時有多少個從節點向主節點要求進行數據同步; 默認設置是1,即一個一個同步,這樣可以減少主節點同步壓力;如果主節點機器性能允許,可以適當增加數量;
    • sentinel failover-timeout : 用于故障轉移超時過程判斷,默認設置為180000,即3分鐘;
    • sentinel notification-script : 設置腳本路徑; 哨兵有任何警告級別時間發生時都會執行這個腳本,可以通過該腳本實現郵件等信息通知;

    連接哨兵常用的命令

    • info sentinel:獲取監控的主節點信息;
    • sentinel masters:獲取監控主節點的詳細信息;
    • sentinel master :上面我們指定的是mymaster,信息和上面類似;
    • sentinel get-master-addr-by-name :根據指定的名稱獲取ip地址和端口信息,上面我們指定的名稱是mymaster;
    • sentinel is-master-down-by-addr:查看監控的主節點是否下線,哨兵之間判斷主節點是否下線原理就是通過此命令;
    • sentinel slaves :獲取監控主節點的從節點信息;上面我們指定的是mymaster
    • sentinel failover :該命令可以 強制對指定監控執行故障轉移 ,即便當前的主節點運行完好也能執行;例如,需要換掉當前監控的主節點,便可以提前通過failover命令進行故障轉移;上面我們指定的名稱是mymaster;

    總結

    以上是生活随笔為你收集整理的redis配置主从没效果_跟我一起学Redis之加个哨兵让主从复制更加高可用的全部內容,希望文章能夠幫你解決所遇到的問題。

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