日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Redis觸發(fā)的主從切換研究(redis觸發(fā)主從切換)

Redis觸發(fā)的主從切換研究

創(chuàng)新互聯(lián)建站主營望都網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,成都App定制開發(fā),望都h5微信平臺小程序開發(fā)搭建,望都網(wǎng)站營銷推廣歡迎望都等地區(qū)企業(yè)咨詢

Redis是一個開源的,基于內(nèi)存的數(shù)據(jù)結(jié)構(gòu)存儲系統(tǒng),被廣泛應(yīng)用于緩存、隊列、發(fā)布/訂閱等場景。Redis中的數(shù)據(jù)可以被持久化到磁盤中,實現(xiàn)數(shù)據(jù)的可靠性和持久性。

在Redis中,可以通過主從復(fù)制的方式實現(xiàn)數(shù)據(jù)的高可用性和可擴展性。主從復(fù)制中,一個Redis實例扮演主節(jié)點的角色,負責(zé)處理寫請求,而其他Redis實例扮演從節(jié)點的角色,負責(zé)復(fù)制主節(jié)點中的數(shù)據(jù),并且可以處理讀請求。主從復(fù)制有助于提升系統(tǒng)的讀寫性能,并且可以對Redis進行水平擴展。

在主從復(fù)制中,一般情況下,主節(jié)點是穩(wěn)定的,從節(jié)點是動態(tài)的。當(dāng)主節(jié)點發(fā)生故障或不可用時,從節(jié)點就需要扮演主節(jié)點的角色,而這種自動的主從切換是需要保證數(shù)據(jù)的一致性和正確性的。

Redis中的主從切換是基于Sentinel機制實現(xiàn)的。sentinel是一個專門的進程,負責(zé)監(jiān)控Redis節(jié)點的可用性,當(dāng)主節(jié)點不可用時,sentinel會自動將從節(jié)點升級為主節(jié)點,并且將原本的從節(jié)點作為新主節(jié)點的從節(jié)點,以此來保證系統(tǒng)的可用性。

那么,在Redis中,當(dāng)主從切換發(fā)生時會發(fā)生什么呢?我們可以從以下幾個方面來分析:

1.判斷主節(jié)點是否可用。sentinel會定期檢測主節(jié)點的可用性,如果主節(jié)點不可用,則sentinel會發(fā)出切換請求。

“`python

class Sentinel:

def check_Master_state(self, master):

“””

檢查主節(jié)點的狀態(tài)

“””

try:

ping_result = master.ping()

info_result = master.info(‘replication’)

if ping_result and “role” in info_result and info_result[“role”] == “master”:

return True

except Exception as e:

self.logger.warning(“Error when checking master state: {}”.format(e))

return False


2.選舉新的主節(jié)點。當(dāng)sentinel收到切換請求后,會進行一次選舉來決定哪個從節(jié)點成為新的主節(jié)點。sentinel會將收到切換請求的所有從節(jié)點進行評分,并選取評分最高的節(jié)點作為新的主節(jié)點。

```python
class Sentinel:
def elect_new_master(self, sentinel_marks):
"""
選舉新的主節(jié)點
"""
candidates = set()
for name, marks in sentinel_marks.items():
if marks.get('s_down', 0)
candidates.add(name)
top_score, top_name = None, None
for name in candidates:
try:
info = self.sentinel_conn(name).sentinel_get_master_info(self.master_name)
except:
continue
if info is None:
continue
score = self.master_monitor.monitored_state.score(info, self.sentinels)
if top_score is None or score > top_score:
top_score, top_name = score, name
if top_name:
self.logger.info('Leader sentinel is [%s]', top_name)
return top_name

3.進行主從切換。選舉出新的主節(jié)點后,sentinel會發(fā)出切換命令,執(zhí)行主從切換。此時,原本的從節(jié)點變?yōu)樾碌闹鞴?jié)點,而原本的主節(jié)點變?yōu)閺墓?jié)點。

“`python

class Sentinel:

def flover(self, new_master_addr):

“””

進行主從切換

“””

self.logger.info(“Flover to {}”.format(new_master_addr))

old_master_addr, next_master_addr = self.master_addr, new_master_addr

try:

next_master = redis.StrictRedis.from_url(“redis://{}”.format(next_master_addr))

# 將主節(jié)點轉(zhuǎn)為從節(jié)點

next_master.slaveof()

# 新主節(jié)點已經(jīng)升級完成

self.master_monitor.set_master(new_master_addr)

self.master_addr = new_master_addr

old_master = redis.StrictRedis.from_url(“redis://{}”.format(old_master_addr))

# 使原主節(jié)點成為從節(jié)點

if self.slave_of_no_one:

old_master.slaveof()

else:

old_master.slaveof(*self.slave_of_no_one.split())

# sentinel開始新一輪監(jiān)控

self.master_monitor.reset()

except Exception as e:

self.logger.warning(“flover fl {}”.format(e))


綜上所述,Redis中的主從切換是基于sentinel機制實現(xiàn)的,當(dāng)主節(jié)點不可用時,sentinel會自動將從節(jié)點升級為主節(jié)點,并且將原本的從節(jié)點作為新主節(jié)點的從節(jié)點,以此來保證系統(tǒng)的可用性。通過以上代碼的分析,我們可以更深入地了解Redis的主從切換的實現(xiàn)原理,以及如何保證數(shù)據(jù)的一致性和正確性。

創(chuàng)新互聯(lián)【028-86922220】值得信賴的成都網(wǎng)站建設(shè)公司。多年持續(xù)為眾多企業(yè)提供成都網(wǎng)站建設(shè),成都品牌網(wǎng)站設(shè)計,成都高端網(wǎng)站制作開發(fā),SEO優(yōu)化排名推廣服務(wù),全網(wǎng)營銷讓企業(yè)網(wǎng)站產(chǎn)生價值。


本文名稱:Redis觸發(fā)的主從切換研究(redis觸發(fā)主從切換)
本文鏈接:http://m.5511xx.com/article/dhdhpph.html