mysql cluster_redislt;3.cluster集群模式gt;
不點藍字,我們哪來故事?
本文約:2000字?預計閱讀時間:5分鐘? 1
?????????前言? ? ? ? ? ? ? ??
????現(xiàn)在已經到了國慶的末尾了,大家這個國慶過的怎么樣?是否已經順利地從家中返航?
????當你看到這篇文章的時候,就知道m(xù)oon要來提醒你學習了!多看看自己的錢包?,是不是感覺學習的動力滿滿呢?
????趁著你們玩的這幾天,moon又將這篇redis cluster集群的文章肝了出來,是不是很感動呢,來吧,學起~
? 2
?????????正文? ? ? ? ? ? ? ?
cluster集群模式簡介
????在redis3.0版本中支持了cluster集群部署的方式,這種集群部署的方式能自動將數據進行分片,每個master上放一部分數據,提供了內置的高可用服務,即使某個master掛了,服務還可以正常地提供,我們先來看張圖:
????上圖就是一個最簡單的
????cluster集群的架構圖
? ?使用cluster集群模式,只需要將每個數據庫節(jié)點的cluster-enabled配置選項打開即可,但是每個cluster集群至少要保證有3個主數據庫才能正常運行。
cluster集群模式是怎么存放數據的?
????一個cluster集群中總共有16384個節(jié)點,集群會將這16384個節(jié)點平均分配給每個節(jié)點,當然,我這里的節(jié)點指的是每個主節(jié)點,就如同下圖:
我們先聊聊鍵是如何和16384個插槽做關聯(lián)的:
????redis將每個redis的鍵的鍵名有效部分使用CRC16算法計算出散列值,然后與16384取余數,這樣的就可以使每個鍵能夠盡量的均勻分布在16384個插槽中。
????我們再來說說插槽是如何和節(jié)點做關聯(lián)的:
????①插槽之前沒有被分配過,現(xiàn)在想分配給指定節(jié)點
????②插槽之前被分配過,現(xiàn)在想移動指定節(jié)點
????第一種情況可以通過cluster?add slot?s?命令來實現(xiàn)
????第二種情況的原理相對麻煩一點,但是redis也提供的便捷的方式去操作,我們可以使用redis-trib.rb去實現(xiàn)
如何獲取與插槽對應的節(jié)點
????當客戶端向redis集群中的任意一個節(jié)點發(fā)送命令后,該節(jié)點都會判斷當前鍵的信息是否存在于當前節(jié)點:
????如果存在,那么就會像單機的reids一樣執(zhí)行命令。
????如果不存在,就會返回一個move重定向請求,告訴客戶端負責該數據的節(jié)點是哪一個,然后客戶端會向該節(jié)點發(fā)送命令再次請求獲取數據
新節(jié)點的加入????需要通過cluster meet命令來實現(xiàn):
????cluster?meet ip port?
??? ip port 是我們已運行的redis集群中任意一個節(jié)點的地址和端口號,新節(jié)點在客戶端輸入命令后,會與命令中的節(jié)點進行握手,握手后,命令中的集群節(jié)點會將這個新節(jié)點的信息分享給集群中的每一個節(jié)點。??
故障恢復
????判斷故障的邏輯其實與哨兵模式有點類似,在集群中,每個節(jié)點都會定期的向其他節(jié)點發(fā)送ping命令,通過有沒有收到回復來判斷其他節(jié)點是否已經下線。
如果長時間沒有回復,那么發(fā)起ping命令的節(jié)點就會認為目標節(jié)點疑似下線,也可以和哨兵一樣稱作主觀下線,當然也需要集群中一定數量的節(jié)點都認為該節(jié)點下線才可以,我們來說說具體過程:①當A節(jié)點發(fā)現(xiàn)目標節(jié)點疑似下線,就會向集群中的其他節(jié)點散播消息,其他節(jié)點就會向目標節(jié)點發(fā)送命令,判斷目標節(jié)點是否下線②如果集群中半數以上的節(jié)點都認為目標節(jié)點下線,就會對目標節(jié)點標記為下線,從而告訴其他節(jié)點,讓目標節(jié)點在整個集群中都下線之后當B已經下線,那么B的slave就會開始選舉,選擇是哪個slave升級為master,繼續(xù)提供服務,這個過程和哨兵的過程基本相同,這里就不在贅述的,不知道的小伙伴可以傳送學完redis的三種集群部署后,工資又漲了1000!!<2.哨兵模式>如何提高redis的讀寫能力????這個問題也是我們之前拋出來的問題,我們放一張圖大家就會很容易明白了:
????提高寫能力只需要橫向擴容我們的master節(jié)點
????提高讀能力只需要橫向擴容slave就好了
? 3
? ? ? ? ? 結語? ? ? ? ? ? ? ?
?????在國慶的尾巴和大家聊完了redis部署方式的最終篇-cluster部署,也解決了之前我們留下的問題
????下一篇文章我會和大家聊聊redis的事務和mysql的事務到底有什么不一樣
????我們下期見,記得點贊哦~~
●學完redis的三種集群部署后,工資又漲了1000!!<2.哨兵模式>
●學完redis的三種集群部署后,工資又漲了1000!!<1.主從復制>
●內存屏障?cpu級別的優(yōu)化,你真的懂單例了嗎???
●現(xiàn)在居然還有不知道持久化的......出門右拐不送!!!!
END
? ? ? ? ?關注moon
我們一起吊打面試官!
回復666 ?免費獲得一線大廠面試資料!
點亮 ,告訴大家你也在看
總結
以上是生活随笔為你收集整理的mysql cluster_redislt;3.cluster集群模式gt;的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: @valid注解_springboot使
- 下一篇: mips汇编计算开方_清华考研辅导班-2