日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁(yè) > > 充電吧
[導(dǎo)讀]Redis復(fù)制的原理和使用方式,在一主多從的Redis系統(tǒng)中,從數(shù)據(jù)庫(kù)在整個(gè)系統(tǒng)中起到了數(shù)據(jù)冗余備份和讀寫分離的作用。當(dāng)主數(shù)據(jù)庫(kù)遇到異常中斷服務(wù)后,開發(fā)者可以通過手動(dòng)的方式選擇一個(gè)從數(shù)據(jù)庫(kù)來升格為主數(shù)

Redis復(fù)制的原理和使用方式,在一主多從的Redis系統(tǒng)中,從數(shù)據(jù)庫(kù)在整個(gè)系統(tǒng)中起到了數(shù)據(jù)冗余備份和讀寫分離的作用。

當(dāng)主數(shù)據(jù)庫(kù)遇到異常中斷服務(wù)后,開發(fā)者可以通過手動(dòng)的方式選擇一個(gè)從數(shù)據(jù)庫(kù)來升格為主數(shù)據(jù)庫(kù),以使得系統(tǒng)能夠繼續(xù)提供服務(wù)。然而整個(gè)過程相對(duì)麻煩且需要人工介入。 為此,Redis 2.8中提供了哨兵工具來實(shí)現(xiàn)自動(dòng)化的系統(tǒng)監(jiān)控和故障恢復(fù)功能。


哨兵的作用就是監(jiān)控Redis系統(tǒng)的運(yùn)行狀況。它的功能包括以下兩個(gè)。

1.監(jiān)控主數(shù)據(jù)庫(kù)和從數(shù)據(jù)庫(kù)是否正常運(yùn)行。?

2.主數(shù)據(jù)庫(kù)出現(xiàn)故障時(shí)自動(dòng)將從數(shù)據(jù)庫(kù)轉(zhuǎn)換為主數(shù)據(jù)庫(kù)。



在一主多從的Redis系統(tǒng)中,可以使用多個(gè)哨兵進(jìn)行監(jiān)控任務(wù)以保證系統(tǒng)足夠穩(wěn)健,此時(shí)不僅哨兵會(huì)同時(shí)監(jiān)控主數(shù)據(jù)庫(kù)和從數(shù)據(jù)庫(kù),哨兵之間也會(huì)互相監(jiān)控。



配置哨兵


[root@TA30-53?redis_master]#?vi?sentinel.conf
sentinel?monitor?mymaster?127.0.0.1?6379?2
sentinel?auth-pass?mymaster?123456


其中mymaster表示要監(jiān)控的主數(shù)據(jù)庫(kù)的名字,可以自定義。這個(gè)名字必須僅由大小寫字母、數(shù)字和“.-_”這 3 個(gè)字符組成。


后兩個(gè)參數(shù)表示主數(shù)據(jù)庫(kù)的地址和端口。

最后的1表示最低通過票數(shù)。


接下來執(zhí)行來啟動(dòng)Sentinel進(jìn)程,并將上述配置文件的路徑傳遞給哨兵:


[root@TA30-53?local]#?cd?redis_master/src/
[root@TA30-53?src]#?./redis-sentinel?../sentinel.conf


?配置哨兵監(jiān)控一個(gè)系統(tǒng)時(shí),只需要配置其監(jiān)控主數(shù)據(jù)庫(kù)即可,哨兵會(huì)自動(dòng)發(fā)現(xiàn)所有復(fù)制該主數(shù)據(jù)庫(kù)的從數(shù)據(jù)庫(kù)。?

啟動(dòng)哨兵后,哨兵輸出如下內(nèi)容:


[root@TA30-53?redis_master]#?./src/redis-sentinel?./sentinel.conf??
30327:X?26?Jun?16:49:08.340?*?Increased?maximum?number?of?open?files?to?10032?(it?was?originally?set?to?1024).
????????????????_._??????????????????????????????????????????????????
???????????_.-``__?''-._?????????????????????????????????????????????
??????_.-``????`.??`_.??''-._???????????Redis?3.0.7?(00000000/0)?64?bit
??.-``?.-```.??```/????_.,_?''-._???????????????????????????????????
?(????'??????,???????.-`??|?`,????)?????Running?in?sentinel?mode
?|`-._`-...-`?__...-.``-._|'`?_.-'|?????Port:?26379
?|????`-._???`._????/?????_.-'????|?????PID:?30327
??`-._????`-._??`-./??_.-'????_.-'???????????????????????????????????
?|`-._`-._????`-.__.-'????_.-'_.-'|??????????????????????????????????
?|????`-._`-._????????_.-'_.-'????|???????????http://redis.io????????
??`-._????`-._`-.__.-'_.-'????_.-'???????????????????????????????????
?|`-._`-._????`-.__.-'????_.-'_.-'|??????????????????????????????????
?|????`-._`-._????????_.-'_.-'????|??????????????????????????????????
??`-._????`-._`-.__.-'_.-'????_.-'???????????????????????????????????
??????`-._????`-.__.-'????_.-'???????????????????????????????????????
??????????`-._????????_.-'???????????????????????????????????????????
??????????????`-.__.-'???????????????????????????????????????????????

30327:X?26?Jun?16:49:08.342?#?WARNING:?The?TCP?backlog?setting?of?511?cannot?be?enforced?because?/proc/sys/net/core/somaxconn?is?set?to?the?lower?value?of?128.
30327:X?26?Jun?16:49:08.342?#?Sentinel?runid?is?9bcfa5e06a5218120fb698fb41fce1cc7dc41251
30327:X?26?Jun?16:49:08.342?#?+monitor?master?mymaster?127.0.0.1?6379?quorum?1
30327:X?26?Jun?16:49:08.353?*?+slave?slave?127.0.0.1:6380?127.0.0.1?6380?@?mymaster?127.0.0.1?6379
30327:X?26?Jun?16:49:08.354?*?+slave?slave?127.0.0.1:6381?127.0.0.1?6381?@?mymaster?127.0.0.1?6379

其中+slave 表示新發(fā)現(xiàn)了從數(shù)據(jù)庫(kù)。



現(xiàn)在哨兵已經(jīng)在監(jiān)控這3個(gè)Redis實(shí)例了,這時(shí)我們將主數(shù)據(jù)庫(kù)(即運(yùn)行在6379端口上的Redis實(shí)例)關(guān)閉,等待指定時(shí)間后(可以配置,默認(rèn)為 30 秒),哨兵會(huì)輸出如下內(nèi)容:

30553:X?26?Jun?16:58:52.100?#?+sdown?master?mymaster?127.0.0.1?6379
30553:X?26?Jun?16:58:52.100?#?+odown?master?mymaster?127.0.0.1?6379?#quorum?1/1

+sdown表示哨兵主觀認(rèn)為主數(shù)據(jù)庫(kù)停止服務(wù)了,+odown則表示哨兵客觀認(rèn)為主數(shù)據(jù)庫(kù)停止服務(wù)了。



此時(shí)哨兵開始執(zhí)行故障恢復(fù),即挑選一個(gè)從數(shù)據(jù)庫(kù),將其升格為主數(shù)據(jù)庫(kù)。同時(shí)輸出如下內(nèi)容:


30553:X?26?Jun?16:57:45.646?#?Sentinel?runid?is?cbf8017edb7e379fef7d2984be1d2a22c95f7835
30553:X?26?Jun?16:57:45.646?#?+monitor?master?mymaster?127.0.0.1?6379?quorum?1
30553:X?26?Jun?16:58:52.100?#?+sdown?master?mymaster?127.0.0.1?6379
30553:X?26?Jun?16:58:52.100?#?+odown?master?mymaster?127.0.0.1?6379?#quorum?1/1
30553:X?26?Jun?16:58:52.100?#?+new-epoch?1
30553:X?26?Jun?16:58:52.100?#?+try-failover?master?mymaster?127.0.0.1?6379
30553:X?26?Jun?16:58:52.109?#?+vote-for-leader?cbf8017edb7e379fef7d2984be1d2a22c95f7835?1
30553:X?26?Jun?16:58:52.109?#?+elected-leader?master?mymaster?127.0.0.1?6379
30553:X?26?Jun?16:58:52.109?#?+failover-state-select-slave?master?mymaster?127.0.0.1?6379
30553:X?26?Jun?16:58:52.171?#?+selected-slave?slave?127.0.0.1:6381?127.0.0.1?6381?@?mymaster?127.0.0.1?6379
30553:X?26?Jun?16:58:52.171?*?+failover-state-send-slaveof-noone?slave?127.0.0.1:6381?127.0.0.1?6381?@?mymaster?127.0.0.1?6379
30553:X?26?Jun?16:58:52.243?*?+failover-state-wait-promotion?slave?127.0.0.1:6381?127.0.0.1?6381?@?mymaster?127.0.0.1?6379
30553:X?26?Jun?16:58:53.163?#?+promoted-slave?slave?127.0.0.1:6381?127.0.0.1?6381?@?mymaster?127.0.0.1?6379
30553:X?26?Jun?16:58:53.163?#?+failover-state-reconf-slaves?master?mymaster?127.0.0.1?6379
30553:X?26?Jun?16:58:53.246?*?+slave-reconf-sent?slave?127.0.0.1:6380?127.0.0.1?6380?@?mymaster?127.0.0.1?6379
30553:X?26?Jun?16:58:54.211?*?+slave-reconf-inprog?slave?127.0.0.1:6380?127.0.0.1?6380?@?mymaster?127.0.0.1?6379
30553:X?26?Jun?16:58:55.240?*?+slave-reconf-done?slave?127.0.0.1:6380?127.0.0.1?6380?@?mymaster?127.0.0.1?6379
30553:X?26?Jun?16:58:55.331?#?+failover-end?master?mymaster?127.0.0.1?6379
30553:X?26?Jun?16:58:55.331?#?+switch-master?mymaster?127.0.0.1?6379?127.0.0.1?6381
30553:X?26?Jun?16:58:55.331?*?+slave?slave?127.0.0.1:6380?127.0.0.1?6380?@?mymaster?127.0.0.1?6381
30553:X?26?Jun?16:58:55.331?*?+slave?slave?127.0.0.1:6379?127.0.0.1?6379?@?mymaster?127.0.0.1?6381
30553:X?26?Jun?16:59:25.352?#?+sdown?slave?127.0.0.1:6379?127.0.0.1?6379?@?mymaster?127.0.0.1?6381

+try-failover表示哨兵開始進(jìn)行故障恢復(fù),


+failover-end表示哨兵完成故障恢復(fù),期間涉及領(lǐng)頭哨兵的選舉、備選從數(shù)據(jù)庫(kù)的選擇等

+switch-master表示主數(shù)據(jù)庫(kù)從6379遷移到6381,即6381的從數(shù)據(jù)庫(kù)被升為主數(shù)據(jù)庫(kù),同時(shí)兩個(gè)+slave則列出了新的主數(shù)據(jù)庫(kù)的兩個(gè)從數(shù)據(jù)庫(kù),為6380和6379。

6379就是之前停止服務(wù)的主數(shù)據(jù)庫(kù),停止服務(wù)了,而6381端口的從數(shù)據(jù)庫(kù)已經(jīng)升為主數(shù)據(jù)庫(kù),當(dāng)6379端口的實(shí)例恢復(fù)服務(wù)后,會(huì)轉(zhuǎn)變?yōu)?381端口實(shí)例的從數(shù)據(jù)庫(kù)來運(yùn)行,所以哨兵將6379端口實(shí)例的信息修改成了6381端口實(shí)例的從數(shù)據(jù)庫(kù)。

故障恢復(fù)完成后,可以使用Redis命令行客戶端重新檢查6380和6381兩個(gè)端口上的實(shí)例的復(fù)制信息:

[root@TA30-53?local]#?./redis_slave1/src/redis-cli?-p?6380?-a?123456
127.0.0.1:6380>?info?replication
#?Replication
role:slave
master_host:127.0.0.1
master_port:6381
master_link_status:up
master_last_io_seconds_ago:2
master_sync_in_progress:0
slave_repl_offset:54239
slave_priority:100
slave_read_only:1
connected_slaves:0
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0


[root@TA30-53?redis_slave2]#?./src/redis-cli?-p?6381?-a?123456?info?replication
#?Replication
role:master
connected_slaves:1
slave0:ip=127.0.0.1,port=6380,state=online,offset=57634,lag=1
master_repl_offset:57767
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:57766

可以看到6381端口上的實(shí)例已經(jīng)確實(shí)升格為主數(shù)據(jù)庫(kù)了,同時(shí)6380端口上的實(shí)例是其從數(shù)據(jù)庫(kù)。整個(gè)故障恢復(fù)過程就此完成。


此時(shí)將6379端口上的實(shí)例重新啟動(dòng),


[root@TA30-53?local]#?./redis_master/src/redis-server?./redis_master/redis.conf


哨兵會(huì)監(jiān)控到這一變化,并輸出:


30553:X?26?Jun?17:17:07.568?#?-sdown?slave?127.0.0.1:6379?127.0.0.1?6379?@?mymaster?127.0.0.1?6381
30553:X?26?Jun?17:17:17.528?*?+convert-to-slave?slave?127.0.0.1:6379?127.0.0.1?6379?@?mymaster?127.0.0.1?6381

-sdown表示實(shí)例6379已經(jīng)恢復(fù)服務(wù)了(與+sdown相反),


+convert-to-slave表示將6379端口的實(shí)例設(shè)置為6381端口實(shí)例的從數(shù)據(jù)庫(kù)。

這時(shí)使用Redis命令行客戶端查看6379端口實(shí)例的復(fù)制信息為:

[root@TA30-53?local]#?./redis_master/src/redis-cli?-p?6379?-a?123456?info?replication????????????
#?Replication
role:slave
master_host:127.0.0.1
master_port:6381
master_link_status:down
master_last_io_seconds_ago:-1
master_sync_in_progress:0
slave_repl_offset:1
master_link_down_since_seconds:1498469302
slave_priority:100
slave_read_only:1
connected_slaves:0
min_slaves_good_slaves:0
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0


同時(shí)6381端口實(shí)例的復(fù)制信息為:



127.0.0.1:6380>?info?replication
#?Replication
role:master
connected_slaves:1
slave0:ip=127.0.0.1,port=6381,state=online,offset=8683,lag=0
master_repl_offset:8683
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:8682

為什么不是倆,后面再研究。。。。


原理

一個(gè)哨兵進(jìn)程啟動(dòng)時(shí)會(huì)讀取配置文件的內(nèi)容,通過如下的配置找出需要監(jiān)控的主數(shù)據(jù)庫(kù):

?sentinel monitor master-name ip redis-port quorum?

其中 master-name 是一個(gè)由大小寫字母、數(shù)字和“.-_”組成的主數(shù)據(jù)庫(kù)的名字,

考慮到故障恢復(fù)后當(dāng)前監(jiān)控的系統(tǒng)的主數(shù)據(jù)庫(kù)的地址和端口會(huì)產(chǎn)生變化,所以哨兵提供了命令可以通過主數(shù)據(jù)庫(kù)的名字獲取當(dāng)前系統(tǒng)的主數(shù)據(jù)庫(kù)的地址和端口號(hào)。

ip 表示當(dāng)前系統(tǒng)中主數(shù)據(jù)庫(kù)的地址,redis-port 表示端口號(hào),quorum用來表示執(zhí)行故障恢復(fù)操作前至少需要幾個(gè)哨兵節(jié)點(diǎn)同意。

一個(gè)哨兵節(jié)點(diǎn)可以同時(shí)監(jiān)控多個(gè)Redis主從系統(tǒng),只需要提供多個(gè)sentinel monitor配置即可,例如:

sentinel monitor mymaster 127.0.0.1 6379 2

sentinel monitor othermaster 192.168.1.3 6380 4

同時(shí)多個(gè)哨兵節(jié)點(diǎn)也可以同時(shí)監(jiān)控同一個(gè) Redis 主從系統(tǒng),從而形成網(wǎng)狀結(jié)構(gòu)。


哨兵啟動(dòng)后,會(huì)與要監(jiān)控的主數(shù)據(jù)庫(kù)建立兩條連接,這兩個(gè)連接的建立方式與普通的Redis客戶端無(wú)異。其中一條連接用來訂閱該主數(shù)據(jù)的__sentinel__:hello頻道以獲取其他同樣監(jiān)控該數(shù)據(jù)庫(kù)的哨兵節(jié)點(diǎn)的信息,另外哨兵也需要定期向主數(shù)據(jù)庫(kù)發(fā)送 INFO 等命令來獲取主數(shù)據(jù)庫(kù)本身的信息


和主數(shù)據(jù)庫(kù)的連接建立完成后,哨兵會(huì)定時(shí)執(zhí)行下面3個(gè)操作。 (1)每10秒哨兵會(huì)向主數(shù)據(jù)庫(kù)和從數(shù)據(jù)庫(kù)發(fā)送INFO命令。 (2)每 2 秒哨兵會(huì)向主數(shù)據(jù)庫(kù)和從數(shù)據(jù)庫(kù)的__sentinel__:hello 頻道發(fā)送自己的信息。 (3)每1秒哨兵會(huì)向主數(shù)據(jù)庫(kù)、從數(shù)據(jù)庫(kù)和其他哨兵節(jié)點(diǎn)發(fā)送PING命令。


首先,發(fā)送INFO命令使得哨兵可以獲得當(dāng)前數(shù)據(jù)庫(kù)的相關(guān)信息(包括運(yùn)行ID、復(fù)制信息等)從而實(shí)現(xiàn)新節(jié)點(diǎn)的自動(dòng)發(fā)現(xiàn)。

配置哨兵監(jiān)控 Redis 主從系統(tǒng)時(shí)只需要指定主數(shù)據(jù)庫(kù)的信息即可,哨兵借助 INFO 命令來獲取所有復(fù)制該主數(shù)據(jù)庫(kù)的從數(shù)據(jù)庫(kù)信息的。

啟動(dòng)后,哨兵向主數(shù)據(jù)庫(kù)發(fā)送 INFO 命令,通過解析返回結(jié)果來得知從數(shù)據(jù)庫(kù)列表,而后對(duì)每個(gè)從數(shù)據(jù)庫(kù)同樣建立兩個(gè)連接,兩個(gè)連接的作用和前文介紹的與主數(shù)據(jù)庫(kù)建立的兩個(gè)連接完全一致。在此之后,哨兵會(huì)每 10 秒定時(shí)向已知的所有主從數(shù)據(jù)庫(kù)發(fā)送INFO命令來獲取信息更新并進(jìn)行相應(yīng)操作,比如對(duì)新增的從數(shù)據(jù)庫(kù)建立連接并加入監(jiān)控列表,對(duì)主從數(shù)據(jù)庫(kù)的角色變化(由故障恢復(fù)操作引起)進(jìn)行信息更新等。


接下來哨兵向主從數(shù)據(jù)庫(kù)的__sentinel__:hello 頻道發(fā)送信息來與同樣監(jiān)控該數(shù)據(jù)庫(kù)的哨兵分享自己的信息。

發(fā)送的消息內(nèi)容為:

可以看到消息包括的哨兵的基本信息,以及其監(jiān)控的主數(shù)據(jù)庫(kù)的信息。哨兵會(huì)訂閱每個(gè)其監(jiān)控的數(shù)據(jù)庫(kù)的__sentinel__:hello頻道,所以當(dāng)其他哨兵收到消息后,會(huì)判斷發(fā)消息的哨兵是不是新發(fā)現(xiàn)的哨兵。如果是則將其加入已發(fā)現(xiàn)的哨兵列表中并創(chuàng)建一個(gè)到其的連接(與數(shù)據(jù)庫(kù)不同,哨兵與哨兵之間只會(huì)創(chuàng)建一條連接用來發(fā)送 PING命令,而不需要?jiǎng)?chuàng)建另外一條連接來訂閱頻道,因?yàn)樯诒恍枰嗛啍?shù)據(jù)庫(kù)的頻道即可實(shí)現(xiàn)自動(dòng)發(fā)現(xiàn)其他哨兵)。同時(shí)哨兵會(huì)判斷信息中主數(shù)據(jù)庫(kù)的配置版本,如果該版本比當(dāng)前記錄的主數(shù)據(jù)庫(kù)的版本高,則更新主數(shù)據(jù)庫(kù)的數(shù)據(jù)。


實(shí)現(xiàn)了自動(dòng)發(fā)現(xiàn)從數(shù)據(jù)庫(kù)和其他哨兵節(jié)點(diǎn)后,哨兵要做的就是定時(shí)監(jiān)控這些數(shù)據(jù)庫(kù)和節(jié)點(diǎn)有沒有停止服務(wù)。

每隔一定時(shí)間向這些節(jié)點(diǎn)發(fā)送PING命令。

時(shí)間間隔與down-after-milliseconds選項(xiàng)有關(guān),當(dāng)down-after-milliseconds的值小于1秒時(shí),哨兵會(huì)每隔down-after-milliseconds指定的時(shí)間發(fā)送一次PING命令,

當(dāng)down-after-milliseconds的值大于1秒時(shí),哨兵會(huì)每隔1秒發(fā)送一次PING命令。

例如:?

//每隔 1 秒發(fā)送一次 PING命令?

sentinel down-after-milliseconds mymaster 60000?

//每隔 600 毫秒發(fā)送一次 PING命令?

sentinel down-after-milliseconds othermaster 600?

當(dāng)超過down-after-milliseconds選項(xiàng)指定時(shí)間后,如果被PING的數(shù)據(jù)庫(kù)或節(jié)點(diǎn)仍然未進(jìn)行回復(fù),則哨兵認(rèn)為其主觀下線(subjectively down)。

主觀下線表示從當(dāng)前的哨兵進(jìn)程看來,該節(jié)點(diǎn)已經(jīng)下線。

如果該節(jié)點(diǎn)是主數(shù)據(jù)庫(kù),則哨兵會(huì)進(jìn)一步判斷是否需要對(duì)其進(jìn)行故障恢復(fù):哨兵發(fā)送 SENTINEL is-master-down-by-addr命令詢問其他哨兵節(jié)點(diǎn)以了解他們是否也認(rèn)為該主數(shù)據(jù)庫(kù)主觀下線,如果達(dá)到指定數(shù)量時(shí),哨兵會(huì)認(rèn)為其客觀下線(objectively down),并選舉領(lǐng)頭的哨兵節(jié)點(diǎn)對(duì)主從系統(tǒng)發(fā)起故障恢復(fù)。這個(gè)指定數(shù)量即為quorum參數(shù)。

例如,

sentinel monitor mymaster 127.0.0.1 6379 2

該配置表示只有當(dāng)至少兩個(gè) Sentinel 節(jié)點(diǎn)(包括當(dāng)前節(jié)點(diǎn))認(rèn)為該主數(shù)據(jù)庫(kù)主觀下線時(shí),當(dāng)前哨兵節(jié)點(diǎn)才會(huì)認(rèn)為該主數(shù)據(jù)庫(kù)客觀下線。

進(jìn)行接下來的選舉領(lǐng)頭哨兵步驟。

雖然當(dāng)前哨兵節(jié)點(diǎn)發(fā)現(xiàn)了主數(shù)據(jù)庫(kù)客觀下線,需要故障恢復(fù),但是故障恢復(fù)需要由領(lǐng)頭的哨兵來完成,這樣可以保證同一時(shí)間只有一個(gè)哨兵節(jié)點(diǎn)來執(zhí)行故障恢復(fù)。

選舉領(lǐng)頭哨兵的過程使用了Raft算法,具體過程如下。

(1)發(fā)現(xiàn)主數(shù)據(jù)庫(kù)客觀下線的哨兵節(jié)點(diǎn)(下面稱作A)向每個(gè)哨兵節(jié)點(diǎn)發(fā)送命令,要求對(duì)方選自己成為領(lǐng)頭哨兵。

(2)如果目標(biāo)哨兵節(jié)點(diǎn)沒有選過其他人,則會(huì)同意將A設(shè)置成領(lǐng)頭哨兵。

(3)如果A發(fā)現(xiàn)有超過半數(shù)且超過quorum參數(shù)值的哨兵節(jié)點(diǎn)同意選自己成為領(lǐng)頭哨兵,則A成功成為領(lǐng)頭哨兵。

(4)當(dāng)有多個(gè)哨兵節(jié)點(diǎn)同時(shí)參選領(lǐng)頭哨兵,則會(huì)出現(xiàn)沒有任何節(jié)點(diǎn)當(dāng)選的可能。此時(shí)每個(gè)參選節(jié)點(diǎn)將等待一個(gè)隨機(jī)時(shí)間重新發(fā)起參選請(qǐng)求,進(jìn)行下一輪選舉,直到選舉成功。


選出領(lǐng)頭哨兵后,領(lǐng)頭哨兵將會(huì)開始對(duì)主數(shù)據(jù)庫(kù)進(jìn)行故障恢復(fù)。

故障恢復(fù)的過程相如下。

?首先領(lǐng)頭哨兵將從停止服務(wù)的主數(shù)據(jù)庫(kù)的從數(shù)據(jù)庫(kù)中挑選一個(gè)來充當(dāng)新的主數(shù)據(jù)庫(kù)。挑選的依據(jù)如下。

(1)所有在線的從數(shù)據(jù)庫(kù)中,選擇優(yōu)先級(jí)最高的從數(shù)據(jù)庫(kù)。優(yōu)先級(jí)可以通過slave-priority選項(xiàng)來設(shè)置。

(2)如果有多個(gè)最高優(yōu)先級(jí)的從數(shù)據(jù)庫(kù),則復(fù)制的命令偏移量越大(即復(fù)制越完整)越優(yōu)先。

(3)如果以上條件都一樣,則選擇運(yùn)行ID較小的從數(shù)據(jù)庫(kù)。

選出一個(gè)從數(shù)據(jù)庫(kù)后,領(lǐng)頭哨兵將向從數(shù)據(jù)庫(kù)發(fā)送 SLAVEOF NO ONE命令使其升格為主數(shù)據(jù)庫(kù)。

而后領(lǐng)頭哨兵向其他從數(shù)據(jù)庫(kù)發(fā)送SLAVEOF命令來使其成為新主數(shù)據(jù)庫(kù)的從數(shù)據(jù)庫(kù)。

最后一步則是更新內(nèi)部的記錄,將已經(jīng)停止服務(wù)的舊的主數(shù)據(jù)庫(kù)更新為新的主數(shù)據(jù)庫(kù)的從數(shù)據(jù)庫(kù),使得當(dāng)其恢復(fù)服務(wù)時(shí)自動(dòng)以從數(shù)據(jù)庫(kù)的身份繼續(xù)服務(wù)。


哨兵的部署

哨兵以獨(dú)立進(jìn)程的方式對(duì)一個(gè)主從系統(tǒng)進(jìn)行監(jiān)控,監(jiān)控的效果好壞與否取決于哨兵的視角是否有代表性。

如果一個(gè)主從系統(tǒng)中配置的哨兵較少,哨兵對(duì)整個(gè)系統(tǒng)的判斷的可靠性就會(huì)降低。

整體來講,相對(duì)穩(wěn)妥的哨兵部署方案是使得哨兵的視角盡可能地與每個(gè)節(jié)點(diǎn)的視角一致,即:

(1)為每個(gè)節(jié)點(diǎn)(無(wú)論是主數(shù)據(jù)庫(kù)還是從數(shù)據(jù)庫(kù))部署一個(gè)哨兵;

(2)使每個(gè)哨兵與其對(duì)應(yīng)的節(jié)點(diǎn)的網(wǎng)絡(luò)環(huán)境相同或相近。?

這樣的部署方案可以保證哨兵的視角擁有較高的代表性和可靠性。















本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅(qū)動(dòng)電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: 驅(qū)動(dòng)電源

在工業(yè)自動(dòng)化蓬勃發(fā)展的當(dāng)下,工業(yè)電機(jī)作為核心動(dòng)力設(shè)備,其驅(qū)動(dòng)電源的性能直接關(guān)系到整個(gè)系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動(dòng)勢(shì)抑制與過流保護(hù)是驅(qū)動(dòng)電源設(shè)計(jì)中至關(guān)重要的兩個(gè)環(huán)節(jié),集成化方案的設(shè)計(jì)成為提升電機(jī)驅(qū)動(dòng)性能的關(guān)鍵。

關(guān)鍵字: 工業(yè)電機(jī) 驅(qū)動(dòng)電源

LED 驅(qū)動(dòng)電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個(gè)照明設(shè)備的使用壽命。然而,在實(shí)際應(yīng)用中,LED 驅(qū)動(dòng)電源易損壞的問題卻十分常見,不僅增加了維護(hù)成本,還影響了用戶體驗(yàn)。要解決這一問題,需從設(shè)計(jì)、生...

關(guān)鍵字: 驅(qū)動(dòng)電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動(dòng)電源的公式,電感內(nèi)電流波動(dòng)大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關(guān)鍵字: LED 設(shè)計(jì) 驅(qū)動(dòng)電源

電動(dòng)汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動(dòng)汽車的核心技術(shù)之一是電機(jī)驅(qū)動(dòng)控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機(jī)驅(qū)動(dòng)系統(tǒng)中的關(guān)鍵元件,其性能直接影響到電動(dòng)汽車的動(dòng)力性能和...

關(guān)鍵字: 電動(dòng)汽車 新能源 驅(qū)動(dòng)電源

在現(xiàn)代城市建設(shè)中,街道及停車場(chǎng)照明作為基礎(chǔ)設(shè)施的重要組成部分,其質(zhì)量和效率直接關(guān)系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進(jìn)步,高亮度白光發(fā)光二極管(LED)因其獨(dú)特的優(yōu)勢(shì)逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關(guān)鍵字: 發(fā)光二極管 驅(qū)動(dòng)電源 LED

LED通用照明設(shè)計(jì)工程師會(huì)遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關(guān)鍵字: LED 驅(qū)動(dòng)電源 功率因數(shù)校正

在LED照明技術(shù)日益普及的今天,LED驅(qū)動(dòng)電源的電磁干擾(EMI)問題成為了一個(gè)不可忽視的挑戰(zhàn)。電磁干擾不僅會(huì)影響LED燈具的正常工作,還可能對(duì)周圍電子設(shè)備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關(guān)鍵字: LED照明技術(shù) 電磁干擾 驅(qū)動(dòng)電源

開關(guān)電源具有效率高的特性,而且開關(guān)電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機(jī)重量也有所下降,所以,現(xiàn)在的LED驅(qū)動(dòng)電源

關(guān)鍵字: LED 驅(qū)動(dòng)電源 開關(guān)電源

LED驅(qū)動(dòng)電源是把電源供應(yīng)轉(zhuǎn)換為特定的電壓電流以驅(qū)動(dòng)LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動(dòng)電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: LED 隧道燈 驅(qū)動(dòng)電源
關(guān)閉