91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Redis中怎么實現低成本高可用方案

發布時間:2021-08-05 16:40:28 來源:億速云 閱讀:174 作者:Leah 欄目:編程語言

這篇文章將為大家詳細講解有關Redis中怎么實現低成本高可用方案,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

Sentinel介紹

Sentinel是Redis官方為集群提供的高可用解決方案。在實際項目中可以使用sentinel去做redis自動故障轉移,減少人工介入的工作量。另外sentinel也給客戶端提供了監控消息的通知,這樣客戶端就可根據消息類型去判斷服務器的狀態,去做對應的適配操作。

下面是Sentinel主要功能列表:

  • Monitoring:Sentinel持續檢查集群中的master、slave狀態,判斷是否存活。

  • Notification:在發現某個redis實例死的情況下,Sentinel能通過API通知系統管理員或其他程序腳本。

  • Automatic failover:如果一個master掛掉后,sentinel立馬啟動故障轉移,把某個slave提升為master。其他的slave重新配置指向新master。

  • Configuration provider:對于客戶端來說sentinel通知是有效可信賴的。客戶端會連接sentinel去請求當前master的地址,一旦發生故障sentinel會提供新地址給客戶端。

 

Sentinel配置

Sentinel本質上只是一個運行在特殊模式下的redis服務器,通過不同配置來區分提供服務。sentinel.conf配置:

// [監控名稱] [ip] [port] [多少sentinel同意才發生故障轉移]
sentinel monitor mymaster 127.0.0.1 6379 2
// [監控名稱] [Master多少毫秒后不回應ping命令,就認為master是主觀下線狀態]
sentinel down-after-milliseconds mymaster 60000
// [故障轉移超時時間]
sentinel failover-timeout mymaster 180000
//[在執行故障轉移時,最多可以有多少個從服務器同時對新的主服務器進行同步]
sentinel parallel-syncs mymaster 1
 

sentinel需要使用redis2.8版本以上,啟動如下:

redis-sentinel sentinel.conf
 

啟動后Sentinel會:

  • 以10秒一次的頻率,向被監視的master發送info命令,根據回復獲取master當前信息。

  • 以1秒一次的頻率,向所有redis服務器、包含sentinel在內發送PING命令,通過回復判斷服務器是否在線。

  • 以2秒一次的頻率,通過向所有被監視的master,slave服務器發送包含當前sentinel,master信息的消息。

另外建議sentinel至少起3個實例以上,并配置2個實例同意即可發生轉移。5個實例,配置3個實例同意以此類推。

 

故障轉移消息接收的3種方式

Redis服務器一旦發送故障后,sentinel通過raft算法投票選舉新master。故障轉移過程可以通過sentinel的API獲取/訂閱接收事件消息。

搜索Java知音公眾號,回復“后端面試”,送你一份Java面試題寶典.pdf

 

腳本接收

  • 當故障轉移期間,可以指定一個“通知”腳本用來告知系統管理員,當前集群的情況。
  • 腳本被允許執行的最大時間為60秒,如果超時,腳本將會被終止(KILL)
sentinel notification-script mymaster /var/redis/notify.sh 
 
  • 故障轉移期之后,配置通知客戶端的腳本.
sentinel client-reconfig-script mymaster /var/redis/notifyReconfig.sh 
   

客戶端直接接收

Sentinel的故障轉移消息通知使用的是redis發布訂閱。就是說在故障轉移期間所有產生的事件信息,都通過頻道(channel)發布出去。比如我們加臺slave服務器,sentinel監聽到后會發布加slave的消息到"+slave"頻道上,客戶端只需要訂閱"+slave"頻道即可接收到對應消息。

其消息格式如下:
[實例類型] [事件服務器名稱] [服務器ip] [服務器端口] @[master名稱] [ip] [端口]

<instance-type> <name> <ip> <port> @ <master-name> <master-ip> <master-port>
 

通知消息格式示例:

*          //訂閱類型, *即訂閱所有事件消息。
-sdown     //消息類型
slave 127.0.0.1:6379 127.0.0.1 6379 @ mymaster 127.0.0.1 6381
 

訂閱消息示例:

using (RedisSentinel rs = new RedisSentinel(CurrentNode.Host, CurrentNode.Port))
            {
                var redisPubSub = new RedisPubSub(node.Host, node.Port);
                redisPubSub.OnMessage += OnMessage;
                redisPubSub.OnSuccess += (msg) =>{};
                redisPubSub.OnUnSubscribe += (obj) =>{};
                redisPubSub.OnError = (exception) =>{ };
                redisPubSub.PSubscribe("*");
            }
   

服務間接接收

這種方式在第二種基礎上擴展了一層,即應用端不直接訂閱sentinel。單獨做服務去干這件事情,然后應用端提供API供這個服務回調通知。這樣做的好處在于:

  • 減少應用端監聽失敗出錯的可能性。

  • 應用端由主動方變成被動方,降低耦合。

  • 性能提高,輪詢變回調。

  • 獨立成服務可擴展性更高。

比如:

1:以后換掉sentinel,我們只需要動服務即可,應用端無需更改。

2:可以在服務內多增加一層守護線程去主動拉取redis狀態,這樣可確保即使sentinel不生效,也能及時察覺redis狀態,并通知到應用端。當然這種情況很極端,因為sentinel配的也是多節點,同時掛的幾率非常小。

示例:

應用端提供回調API,在這個API邏輯下去刷新內存中的Redis連接。

http://127.0.0.1/redis/notify.api
 

獨立服務監控到狀況后,調用API通知應用端:

 httprequest.post("http://127.0.0/redis/notify.api");
   

整體設計

推薦使用第三種,其整體流程圖如下:

Redis中怎么實現低成本高可用方案  
 


關于Redis中怎么實現低成本高可用方案就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

巴青县| 晋中市| 南雄市| 鄱阳县| 额敏县| 永定县| 三明市| 黄浦区| 普兰店市| 福贡县| 台北县| 雷山县| 沅江市| 海宁市| 景宁| 琼海市| 霍山县| 梁河县| 台前县| 工布江达县| 南皮县| 洞头县| 鸡东县| 常州市| 乾安县| 古交市| 三河市| 千阳县| 南雄市| 郧西县| 二连浩特市| 凌源市| 三原县| 武平县| 黔西| 天峨县| 嘉禾县| 锡林浩特市| 朝阳市| 成都市| 青龙|