netcore部署到docker 实现excel生成_Docker部署Redis集群----第七节(docker-redis-sentinel集群实现篇)...
由于工作時間的問題,今天才給大家分享我們的第七篇章,讓大家久等了....
上一篇章,我們了解到了redis主從復(fù)制的哨兵集群,簡單的一句話就是,“時時對主節(jié)點進行監(jiān)控,一旦發(fā)現(xiàn)多個從節(jié)點都無法正常ping通主節(jié)點,哨兵節(jié)點就會自我協(xié)商推薦某個
從節(jié)點進階為新任盟主成為主節(jié)點Master,并同時把舊的主節(jié)點變更為從節(jié)點。”舉個三者之間的協(xié)議對話。
舊主節(jié)點:Fxxxk,我才是盟主,
哨兵節(jié)點:勝者為王,既然你自甘墮落,只能罷了你!
新任主節(jié)點:風水輪流轉(zhuǎn),誰讓你不爭氣呢,怪我嘍?
下面我們就開始正式進入哨兵集群的搭建:
1、主從復(fù)制節(jié)點規(guī)劃->搭建一主兩從三哨兵
容器名稱 容器IP地址 映射端口號 服務(wù)運行模式 Redis-master 172.60.0.2 6382 -> 6379 Master Redis-slave3 172.60.0.3 6383 -> 6379 Slave3 Redis-slave4 172.60.0.4 6384 -> 6379 Slave4 Redis-sentinel1 172.60.0.6 22536 -> 26379 Sentinel1 Redis-sentinel2 172.60.0.7 22537 -> 26379 Sentinel2 Redis-sentinel3 172.60.0.8 22538 -> 26379 Sentinel3為了保證實踐的可行性和熟悉部分命令的使用,在執(zhí)行本篇章的內(nèi)容時,請注意以下情況:
1、請將前面篇章搭建的容器都刪除掉,然后重新構(gòu)建容器,若不知如何刪除請自行查閱第五節(jié)篇章的命令。
2、當然你可以不刪,但是容器的IP和POST請自行變更就不要跟我上面部署的節(jié)點一樣了。
3、也可以對上一節(jié)篇章的容器進行適量改正,都可以。
4、構(gòu)建容器的命令這里也不啰嗦了,不知道的請查閱第三節(jié)篇章。
2、必須了解哨兵節(jié)點的幾個核心配置
sentinel monitor redis-master IP POST NUM- sentinel monitor:配置命令
- redis-master:被監(jiān)控的主節(jié)點名稱
- IP:被監(jiān)控的主節(jié)點的IP地址
- POST:被監(jiān)控的主節(jié)點的端口號
- NUM:監(jiān)控并反饋多少個從節(jié)點redis-slave發(fā)現(xiàn)主節(jié)點有問題。
實例講解:sentinel monitor masterTop 192.168.0.1 6380 2。當有兩個從節(jié)點Slave發(fā)現(xiàn)并認為主節(jié)點名稱為masterTop ip地址是192.169.0.1 端口為6380的Master有問題,且ping不可達,就會執(zhí)行故障轉(zhuǎn)移命令,而這種不可達是客觀存在的的判定方式,當NUM值越小那么達到下線的條件就會越寬松,【比如若果這里設(shè)置為1,當任意一個從節(jié)點發(fā)現(xiàn)有不可達的情況存在時就會發(fā)生轉(zhuǎn)移,這就不符合常理,前面的篇章有說過有可能是網(wǎng)絡(luò)原因或者是本身的slave有問題就直接判定主有問題是不符合我們項目部署的,就想投票系統(tǒng),投票多者的代表團才有最終的決議權(quán)】反之NUM值越大就會越嚴格,一般的建議是設(shè)置哨兵節(jié)點Sentinel總數(shù)的一半加1公式 NUM = sentinelTotal/2+1
注意:NUM 參數(shù)不能大于sentinel,為什么不能大于,一旦設(shè)置大于了,哨兵集群將變成毫無意義。
sentinel down-after-millseconds redis-master ms- ms:這里是超時時間單位是毫秒。
講解:假如這里設(shè)置10000 就是說明當ping不可達超過10000毫秒時就判定測試主節(jié)點已存在問題。當實例超過該時間沒有返回PING,或者直接返回錯誤, 那么 Sentinel 將這個實例標記為主觀下線(subjectively down,簡稱 SDOWN )。只有一個 Sentinel進程將實例標記為主觀下線并不一定會引起實例的自動故障遷移: 只有在足夠數(shù)量的 Sentinel 都將一個實例標記為主觀下線之后,實例才會被標記為客觀下線(objectively down, 簡稱 ODOWN ), 這時自動故障遷移才會執(zhí)行
sentinel parallel-syncs masterTop NUMNUM:每次向主節(jié)點master發(fā)起的復(fù)制動作的從節(jié)點的個數(shù)。
講解:當哨兵節(jié)點Sentinel的集合對主節(jié)Master故障達成一致時,Sentinel領(lǐng)導(dǎo)者節(jié)點會發(fā)起故障轉(zhuǎn)移操作,并選取某個從節(jié)點Slave為新的主節(jié)點new Master,old Master變更為Slave,此時就會發(fā)生從節(jié)點向新的主節(jié)點發(fā)起復(fù)制的動作,那么parallel-syncs配合NUM就能產(chǎn)生一個關(guān)鍵性的作用,用來限制每次的故障轉(zhuǎn)移后,每次向新的主節(jié)點發(fā)起復(fù)制操作的從節(jié)點的個數(shù),并相對指出哨兵Sentinel是“并行復(fù)制”還是“串行復(fù)制”,當NUM設(shè)置為1時,表示每次發(fā)起復(fù)制的從節(jié)點只能有一個,就是“串行復(fù)制”的特性;當設(shè)置多個時,表示每次發(fā)起復(fù)制請求的從節(jié)點有多個明顯就是“并行復(fù)制”的主要特性,由此可見當NUM為1時非常能夠減輕Master的壓力。我們來畫個圖,讓大家更好地去理解下:
parallel-syncs=3的表示每次三個從節(jié)點發(fā)起復(fù)制動作:并行復(fù)制parallel-syncs=1的表示每次只有一個從節(jié)點發(fā)起復(fù)制動作:串行復(fù)制sentinel auth-pass <master-name> <password>講解:如果 Sentinel 監(jiān)控的主節(jié)點配置了密碼,sentinel auth-pass 配置通過添加主節(jié)點的密碼,防止 Sentinel 節(jié)點對主節(jié)點無法監(jiān)控。就相對于握手協(xié)議,這個應(yīng)該不難理解吧。
sentinel failover-timeout mymaster msms:表示故障轉(zhuǎn)移的時間單位毫秒
講解:如果在該時間(ms)內(nèi)未能完成failover操作,則認為該failover失敗。
3、哨兵節(jié)點的命令
- SENTINEL masters 顯示被監(jiān)控的所有master以及它們的狀態(tài).
- SENTINEL master <master name> 顯示指定master的信息和狀態(tài);
- SENTINEL slaves <master name> 顯示指定master的所有slave以及它們的狀態(tài);
- SENTINEL get-master-addr-by-name <master name> 返回指定master的ip和端口,如果正在進行failover或者failover已經(jīng)完成,將會顯示被提升為master的slave的ip和端口。
- SENTINEL failover <master name> 強制sentinel執(zhí)行failover,并且不需要得到其他sentinel的同意。但是failover后會將最新的配置發(fā)送給其他sentinel。
- 修改配置:
- sentinel monitor test 127.0.0.1 6379 2 添加新的監(jiān)聽
- SENTINEL REMOVE test 放棄對某個master監(jiān)聽
- SENTINEL set failover-timeout mymaster 180000 設(shè)置配置選項
4、構(gòu)建哨兵集群
- 先構(gòu)建好我們的容器:
- 分別進入兩個從節(jié)點配置主從關(guān)系,然后在我們的主節(jié)點可以看到兩個從節(jié)點已經(jīng)連接到主節(jié)點的信息
- 從圖中我們可以很清楚地看到三臺哨兵節(jié)點【容器】redis-sentinel1、redis-sentinel2、redis-sentinel3,接下面我們分別進入到這三臺容器里:
- 然后分別啟動三個哨兵容器
- 好了,哨兵節(jié)點我們部署完了,是不是很簡單呢?接下來,我們看看日志檢測下看看是否已經(jīng)配置成功:
- 由此可見我們的哨兵集群順利搭建成功,下面我們就開始測試下哨兵集群的機制,我們先把我們現(xiàn)在的主節(jié)點172.60.0.2手動讓他停止kill掉,再看看會有什么奇跡發(fā)生:執(zhí)行以下命令
- 我們可以看到進程的陣列,現(xiàn)在我們kill掉【您們在執(zhí)行的時候這里會跟我不一樣,我這是25,你們可能是26、27等】
當我們再次執(zhí)行查看端口號網(wǎng)絡(luò)信息的命令時:
告訴我們需要等待結(jié)果,哨兵節(jié)點開始協(xié)商討論重新選舉一個從節(jié)點為新的主節(jié)點了。我們再看下日志結(jié)果:
- 看到奇跡了沒我們的IP為172.60.0.4被選舉成了主節(jié)點,而我們的舊主節(jié)點172.60.0.2變成了從節(jié)點,那我們進入新任的主節(jié)點里查看下信息
這里就擁有了一個新的從節(jié)點172.60.0.3
- 那么我們現(xiàn)在把舊主節(jié)點重啟下再看看我們的新的主節(jié)點redis-slave4會有什么變化:
而此時的從節(jié)點正在進行復(fù)制動作,offset的偏移量還沒有和redis-slave3一致有一定的差距。
好了,今天就到這了,我也要洗洗睡了 ,很高興為大家準備這些。我們下節(jié)的篇章就為大家講講哨兵節(jié)點的實現(xiàn)原理。感謝大家的支持,要想第一時間發(fā)現(xiàn)新文章,請關(guān)注我和我的專欄,同時歡迎大家點評并討論,謝謝,我們下個篇章繼續(xù)“開河”。
總結(jié)
以上是生活随笔為你收集整理的netcore部署到docker 实现excel生成_Docker部署Redis集群----第七节(docker-redis-sentinel集群实现篇)...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 乌班图配置mysql Java_Ubun
- 下一篇: sql 两表数据合并_多表查询SQL语句