首頁 >資料庫 >Redis >Redis集群怎麼進行故障檢測?

Redis集群怎麼進行故障檢測?

coldplay.xixi
coldplay.xixi原創
2020-06-30 12:56:292684瀏覽

Redis集群進行故障檢測的方法:先修改Python腳本,每隔1s寫入一條數據;然後循環往Redis集群中寫入數據,並強制殺掉一個主節點觀察應用程式連接情況;最後重啟宕機的8001節點即可。

Redis集群怎麼進行故障檢測?

Redis叢集進行故障偵測的方法:自動故障轉移測試

修改Python腳本,每隔1s寫入一條數據,目的是便於觀察在主節點宕機,集群自動故障轉移這個時間段之之內(1s鐘左右),對於應用程式的影響,或者說應用程式在自動故障轉移前後的表現。

如下腳本循環到Redis叢集中寫入數據,執行期間,強制殺掉一個主節點,觀察應用程式連接情況。
同時,如果發生異常,暫停應用程式2s,因為上面一開始配置的叢集故障轉移時間是1s,如果應用程式暫停2s,完全可以跳過故障轉移的過程,當故障轉移完成之後,應用程式又恢復成正常狀態,雖然8001節點宕機,應用程式繼續連接8001節點,但是應用程式完全無感知。

相關學習推薦:redis影片教學

import timefrom time import ctime,sleepfrom rediscluster import StrictRedisCluster
startup_nodes = [
    {"host":"111.231.253.***", "port":8001},
    {"host":"111.231.253.***", "port":8002},
    {"host":"111.231.253.***", "port":8003},
    {"host":"111.231.253.***", "port":8004},
    {"host":"111.231.253.***", "port":8005},
    {"host":"111.231.253.***", "port":8006}
]
redis_conn= StrictRedisCluster(startup_nodes=startup_nodes, decode_responses=True,password="root")for i in range(0, 100000):    try:
        redis_conn.set('name' + str(i), str(i))        print('setting name' + str(i) +"--->" + time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())))
        time.sleep(1)    except:        print("connect to redis cluster error")
        time.sleep(2)

發現在殺掉主節點之後,僅發生了一次連接錯誤,隨後因為Redis叢集的自動故障轉移成功,對應於程式來說是透明的,因此應用程式隨後正常工作,不受其中一個主節點宕機的影響。

Redis集群怎麼進行故障檢測?

叢集此時的狀態,8001節點宕機,明顯,8001對應的從節點8004接管主節點,升級為master,對外提供服務

Redis集群怎麼進行故障檢測?

觀察升級為主節點的8004實例日誌,會發現在強制殺掉原8001主節點之後,1秒鐘之內,成功替代8001升級為master節點
如果在在故障轉移的過程中,沒有應用程式存取Redis,應用程式甚至完全不知道Redis叢集發生了故障轉移,只要不發生叢集中某一個節點的主從節點同時宕機,整個叢集就沒有問題,且對應用程序完全透明。

Redis集群怎麼進行故障檢測?

接著重啟宕機的8001節點,會發現8001節點自動變成原從節點(8004)的從節點

Redis集群怎麼進行故障檢測?

以上是Redis集群怎麼進行故障檢測?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn