成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

Redis集群容器化安裝

sf_wangchong / 2531人閱讀

摘要:本文將講解如何基于搭建集群,的集群設(shè)計(jì)包括兩個(gè)部分主從復(fù)制和哈希。至此,集群基本安裝成功。后期運(yùn)維基本命令集群節(jié)點(diǎn)槽常見(jiàn)問(wèn)題把所有的物理節(jié)點(diǎn)映射到個(gè)哈希槽上,負(fù)責(zé)維護(hù)。

Redis集群概述

Redis作為當(dāng)前非常熱門(mén)的內(nèi)存型數(shù)據(jù)結(jié)構(gòu)存儲(chǔ),可用于數(shù)據(jù)存儲(chǔ),緩存和消息代理等。本文將講解如何基于docker搭建Redis集群,Redis的集群設(shè)計(jì)包括兩個(gè)部分:主從復(fù)制和哈希Slot。
1.1. 主從復(fù)制
主從復(fù)制在數(shù)據(jù)庫(kù)中很常見(jiàn),一般用來(lái)做讀寫(xiě)分離,Redis中也是如此。要求只有1個(gè)Master(主節(jié)點(diǎn)),可以有N個(gè)slaver(從節(jié)點(diǎn)),而且Slaver也可以有自己的Slaver,由于這種主從的關(guān)系決定他們是在配置階段就要指定他們的上下級(jí)關(guān)系,而不是Zookeeper那種平行關(guān)系是自主推優(yōu)出來(lái)的。
讀寫(xiě)分離,Master只負(fù)責(zé)寫(xiě)和同步數(shù)據(jù)給Slaver,Slaver承擔(dān)了被讀的任務(wù),所以Slaver的擴(kuò)容只能提高讀效率不能提高寫(xiě)效率。
Slaver先將Master那邊獲取到的信息壓入磁盤(pán),再load進(jìn)內(nèi)存,client端是從內(nèi)存中讀取信息的。當(dāng)一個(gè)新的Slaver加入到這個(gè)集群時(shí),會(huì)主動(dòng)找Master來(lái)拜碼頭,Master發(fā)現(xiàn)新的小弟后將全量數(shù)據(jù)發(fā)送給新的Slaver,數(shù)據(jù)量越大性能消耗也就越大,所以盡量避免在運(yùn)行時(shí)做Slaver的擴(kuò)容。
優(yōu)點(diǎn):讀寫(xiě)分離,通過(guò)增加Slaver可以提高并發(fā)讀的能力。
缺點(diǎn):Master寫(xiě)能力是瓶頸,維護(hù)Slaver開(kāi)銷(xiāo)也總將會(huì)變成瓶頸。
1.2. 哈希Slot
哈希Slot名字上可能不好理解,其實(shí)就是數(shù)據(jù)庫(kù)中的“水平劃分”。如果你之前有了解過(guò)數(shù)據(jù)庫(kù)的表分區(qū)的話(huà),就會(huì)發(fā)現(xiàn)下來(lái)對(duì)于哈希Slot的描述,就和數(shù)據(jù)庫(kù)表分區(qū)里面的“HASH分區(qū)”原理上大致相同。

對(duì)象保存到Redis之前先經(jīng)過(guò)CRC16哈希到一個(gè)指定的Node上,例如圖中Object4最終Hash到了Node1上。
每個(gè)Node被平均分配了一個(gè)Slot段,對(duì)應(yīng)著0-16384,Slot不能重復(fù)也不能缺失,否則會(huì)導(dǎo)致對(duì)象重復(fù)存儲(chǔ)或無(wú)法存儲(chǔ)。
Node之間也互相監(jiān)聽(tīng),一旦有Node退出或者加入,會(huì)按照Slot為單位做數(shù)據(jù)的遷移。例如Node1如果掉線(xiàn)了,0-5640這些Slot將會(huì)平均分?jǐn)偟絅ode2和Node3上,由于Node2和Node3本身維護(hù)的Slot還會(huì)在自己身上不會(huì)被重新分配,所以遷移過(guò)程中不會(huì)影響到 5641-16384 Slot段的使用。
優(yōu)點(diǎn):將Redis的寫(xiě)操作分?jǐn)偟搅硕鄠€(gè)節(jié)點(diǎn)上,提高寫(xiě)的并發(fā)能力,擴(kuò)容簡(jiǎn)單。
缺點(diǎn):每個(gè)Node承擔(dān)著互相監(jiān)聽(tīng)、高并發(fā)數(shù)據(jù)寫(xiě)入、高并發(fā)數(shù)據(jù)讀出,工作任務(wù)繁重。
1.3. 合二為一
看到這里大家也就發(fā)現(xiàn)了,主從和哈希的設(shè)計(jì)優(yōu)缺點(diǎn)正好是相互彌補(bǔ)的,將二者結(jié)合在一起,就是Redis集群的終極形態(tài),先Hash分邏輯節(jié)點(diǎn),然后每個(gè)邏輯節(jié)點(diǎn)內(nèi)部是主從,如圖:

2.集群安裝
默認(rèn)我們已經(jīng)有了docker環(huán)境,現(xiàn)在開(kāi)始基于docker安裝Redis集群。redis 5.0 版本之前,網(wǎng)上有很多教程都是通過(guò)redis-trib.rb 來(lái)創(chuàng)建集群,但是redis 5.0 版本以后,就只能通過(guò) redis-cli 來(lái)實(shí)現(xiàn)。本文即通過(guò) redis-cli 創(chuàng)建集群,因?yàn)閞edis集群的節(jié)點(diǎn)選舉方式是需要半數(shù)以上的master通過(guò),所以建議創(chuàng)建奇數(shù)個(gè)節(jié)點(diǎn)。本例中創(chuàng)建3個(gè)Master節(jié)點(diǎn),并為每個(gè)Master節(jié)點(diǎn)各分配1個(gè)Slave節(jié)點(diǎn)。
2.1. 宿主機(jī)環(huán)境
首先需要找一份原始的redis.conf文件,將其重命名為:redis-cluster.tmpl,并配置如下幾個(gè)參數(shù),此文件的目的是生成每一個(gè)redis實(shí)例的redis.conf:

vi redis-cluster.tmpl

然后執(zhí)行下列腳本,給3個(gè)Master和3個(gè)Slave創(chuàng)建各自的掛載卷目

錄當(dāng)前目錄結(jié)構(gòu)為

2.2. 創(chuàng)建Redis節(jié)點(diǎn)
假設(shè)我們只考慮單純的docker環(huán)境,并無(wú)docker-compose和k8s之類(lèi)的服務(wù)編排,每個(gè)redis容器之間必須要保證通訊,可以通過(guò)創(chuàng)建docker network。(使用微服務(wù)編排的情況,后續(xù)再討論)

現(xiàn)在我們就可以運(yùn)行docker redis 的 master 和 slave 實(shí)例了

查看已創(chuàng)建的redis容器

2.3. 構(gòu)建集群
通過(guò)redis-cli 命令構(gòu)建集群,隨便找一個(gè)redis容器,運(yùn)行redis-cli --cluster create --cluster-replicas 1 ip:port 命令即可

記住構(gòu)建集群時(shí),要保證節(jié)點(diǎn)redis數(shù)據(jù)為空,否則會(huì)出現(xiàn)下列錯(cuò)誤。

2.4. 集群驗(yàn)證
集群搭建完成后,我們通過(guò) redis-cli 命令連接集群節(jié)點(diǎn)驗(yàn)證一下。redis 集群節(jié)點(diǎn)的連接命令是通過(guò) redis-cli -c -h ${ip} -p ${port}


可以看到通過(guò) "cluster info"命令看到集群的基本信息,所有的slot (16384) 都分配完畢。然后通過(guò) "cluster nodes" 命令查看到每個(gè)master節(jié)點(diǎn)的slot分配的區(qū)域。至此,redis集群基本安裝成功。
3.后期運(yùn)維
3.1. 基本命令
集群

節(jié)點(diǎn)

槽(slot)

3.2. 常見(jiàn)問(wèn)題
(1)redis-cluster 把所有的物理節(jié)點(diǎn)映射到[ 0 ~ 16383 ]個(gè)slot(哈希槽)上,cluster負(fù)責(zé)維護(hù) node<->slot<->value。
(2)集群任意一個(gè)節(jié)點(diǎn)中,如果master掛掉,但是還有slaver,slave將自動(dòng)升為 master,系統(tǒng)正常。
(3)集群任意一個(gè)節(jié)點(diǎn)中,如果master掛掉,并且沒(méi)有slaver,集群將進(jìn)入fail狀態(tài)。
(4)如果集群超過(guò)半數(shù)以上節(jié)點(diǎn)的master掛掉,不管是否有slaver,集群都將進(jìn)入fail狀態(tài)。
(5)節(jié)點(diǎn)判斷是否失效的選舉,是集群中所有的master參與的,如果半數(shù)以上的master節(jié)點(diǎn)與當(dāng)前被檢測(cè)的master節(jié)點(diǎn)通訊檢測(cè)超時(shí)(cluster-node-timerout),就認(rèn)為當(dāng)前master節(jié)點(diǎn)掛掉了。
本人創(chuàng)業(yè)團(tuán)隊(duì)產(chǎn)品MadPecker,主要做BUG管理、測(cè)試管理、應(yīng)用分發(fā)
網(wǎng)址:www.madpecker.com,有需要的朋友歡迎試用、體驗(yàn)!
本文為MadPecker團(tuán)隊(duì)技術(shù)人員編寫(xiě),轉(zhuǎn)載請(qǐng)標(biāo)明出處

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/27912.html

相關(guān)文章

  • Redis集群容器安裝

    摘要:本文將講解如何基于搭建集群,的集群設(shè)計(jì)包括兩個(gè)部分主從復(fù)制和哈希。至此,集群基本安裝成功。后期運(yùn)維基本命令集群節(jié)點(diǎn)槽常見(jiàn)問(wèn)題把所有的物理節(jié)點(diǎn)映射到個(gè)哈希槽上,負(fù)責(zé)維護(hù)。 Redis集群概述 Redis作為當(dāng)前非常熱門(mén)的內(nèi)存型數(shù)據(jù)結(jié)構(gòu)存儲(chǔ),可用于數(shù)據(jù)存儲(chǔ),緩存和消息代理等。本文將講解如何基于docker搭建Redis集群,Redis的集群設(shè)計(jì)包括兩個(gè)部分:主從復(fù)制和哈希Slot。1.1....

    xiaoqibTn 評(píng)論0 收藏0
  • Redis集群容器安裝

    摘要:本文將講解如何基于搭建集群,的集群設(shè)計(jì)包括兩個(gè)部分主從復(fù)制和哈希。對(duì)象保存到之前先經(jīng)過(guò)哈希到一個(gè)指定的上,例如圖中最終到了上。至此,集群基本安裝成功。返回個(gè)槽中的鍵常見(jiàn)問(wèn)題把所有的物理節(jié)點(diǎn)映射到個(gè)哈希槽上,負(fù)責(zé)維護(hù)。 1. Redis集群概述 Redis作為當(dāng)前非常熱門(mén)的內(nèi)存型數(shù)據(jù)結(jié)構(gòu)存儲(chǔ),可用于數(shù)據(jù)存儲(chǔ),緩存和消息代理等。本文將講解如何基于docker搭建Redis集群,Redis的...

    davidac 評(píng)論0 收藏0
  • 關(guān)于Docker Swarm,你可能需要了解更多實(shí)踐經(jīng)驗(yàn)

    摘要:雖然可以使用相同的方式部署應(yīng)用到云端,使用外部負(fù)載均衡器,但動(dòng)態(tài)添加或者減少負(fù)載均衡節(jié)點(diǎn)依舊是痛點(diǎn)。這對(duì)使用外部負(fù)載均衡器幫助巨大。 數(shù)人云今天帶來(lái)的本篇文章將分享Docker在應(yīng)用程序生命周期每個(gè)階段中所扮演的角色,以及遷移到Swarm集群時(shí)需要考慮的問(wèn)題。 利用Docker來(lái)開(kāi)發(fā) Docker讓工作更輕松。如需要一個(gè)部署安裝MySQL數(shù)據(jù)庫(kù),或者安裝Ghost,又或者Redis數(shù)據(jù)...

    bitkylin 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<