《如何使用Docker實(shí)現(xiàn)Redis 3.0集群的一鍵部署交付?》要點(diǎn):
本文介紹了如何使用Docker實(shí)現(xiàn)Redis 3.0集群的一鍵部署交付?,希望對(duì)您有用。如果有疑問,可以聯(lián)系我們。
張春源
希云cSphere合伙人,國(guó)內(nèi)早期的Docker布道者,對(duì)企業(yè)應(yīng)用Docker化有豐富的實(shí)踐經(jīng)驗(yàn),擅長(zhǎng)利用Docker踐行Devops文化.國(guó)內(nèi)第一套Docker系列實(shí)戰(zhàn)視頻課程講師,視頻播放量累計(jì)10萬(wàn)+
Redis在3.0之后開始支持sharding集群.Redis集群可以讓數(shù)據(jù)自動(dòng)在多個(gè)節(jié)點(diǎn)上分布.如何使用Docker實(shí)現(xiàn)Redis集群的一鍵部署交付,是一個(gè)有趣的并且有價(jià)值的話題.
本文將給大家介紹基于進(jìn)程的容器技術(shù)實(shí)現(xiàn)Redis sharding集群的一鍵部署,充分展現(xiàn)了容器的強(qiáng)大威力.
Redis(redis.io)作為最流行的KV數(shù)據(jù)庫(kù),很長(zhǎng)一段時(shí)間都是單機(jī)運(yùn)行,關(guān)于如何實(shí)現(xiàn)Redis的數(shù)據(jù)在多個(gè)節(jié)點(diǎn)上的分布,在Redis3.0出來之前,有很多第三方的方案.建議大家參考這個(gè)鏈接:
這是最簡(jiǎn)單的實(shí)現(xiàn),通過在客戶端利用一致性hash算法,將數(shù)據(jù)分布到不同節(jié)點(diǎn).這種方法的缺點(diǎn)非常明顯,缺少故障自動(dòng)failover能力,并且在擴(kuò)容時(shí)數(shù)據(jù)分布的搬遷,也比較費(fèi)勁.
代理模式最大的好處是仍然使用redis單機(jī)的sdk進(jìn)行開發(fā),維護(hù)簡(jiǎn)單.
redis3.0繼2.8推出sentinel主從自動(dòng)failover功能后,推出了sharding集群,這就是Redis Cluster.
本次分享主要是介紹如何將Redis集群實(shí)現(xiàn)一鍵的部署,參考文檔:
Redis官方已經(jīng)提供了Redis 3.2和3.3的鏡像,都可以用來作為Redis集群的鏡像,3.2是穩(wěn)定版本.
目前官方推出了alpine版本的Redis鏡像,alpine鏡像的優(yōu)勢(shì)是體積小.此次分享是采用官方的redis:3.2-alpine的鏡像來做集群.
redis官方提供了一個(gè)ruby的腳本redis-trib.rb,這個(gè)腳本可以用來初始化集群、resharding集群、rebalance集群等.
我們使用官方的腳本來初始化集群.該腳本的運(yùn)行需要ruby環(huán)境,我們來構(gòu)建一個(gè)redis-trib鏡像,以下是構(gòu)建redis-trib鏡像的Dockerfile內(nèi)容:
cat Dockerfile
腳本文件
cat entrypoint.sh
上面兩個(gè)文件用來構(gòu)建redis-trib鏡像,Dockerfile中的邏輯比較簡(jiǎn)單,將github中的redis-trib.rb文件添加到鏡像中,并讓腳本執(zhí)行支持非交互模式(QUIET_MODE).
鏡像啟動(dòng)時(shí),將執(zhí)行集群初始化命令.
redis集群的配置文件我們一般放到數(shù)據(jù)目錄/data下,redis進(jìn)程對(duì)/data目錄擁有可讀寫的權(quán)限.
entrypoint.sh文件中,最主要的是讀取redis-trib.conf配置文件,配置文件的格式非常簡(jiǎn)單
REPLICAS的意思是每個(gè)分片有幾個(gè)slave,一般配置1個(gè)slave ,即REPLICAS=1NODES的意思是集群的每個(gè)節(jié)點(diǎn),包括master和slave.
所以如果有10個(gè)節(jié)點(diǎn),REPLICAS=1的話,那么將有5個(gè)分片(slices).
準(zhǔn)備好上述鏡像和配置文件后,我們開始編排集群
redis-trib要在redis容器啟動(dòng)完成后再啟動(dòng),所以啟動(dòng)優(yōu)先級(jí)要比redis低.
通過以上步驟,編排好了Redis-sharding應(yīng)用模版.
以下是部署后的效果圖:
以上內(nèi)容分享了基于進(jìn)程的容器技術(shù),實(shí)現(xiàn)了Redis sharding的一鍵交付.
你會(huì)部署了嗎?
so easy
Q1: 如果我想在一個(gè)機(jī)器上部署多個(gè)redis實(shí)例可以嗎?
A1: 可以
Q2: 問下你們ui編排工具是自主研發(fā)還是基于什么開源工具?內(nèi)部邏輯是什么.?
A2: 自主研發(fā)的.
通過易用的界面對(duì)docker容器運(yùn)行參數(shù)進(jìn)行設(shè)置和保存.
每個(gè)容器運(yùn)行參數(shù)和優(yōu)先級(jí)以及部署策略構(gòu)成一個(gè)個(gè)服務(wù),多個(gè)服務(wù)組合成一個(gè)可以一鍵部署的應(yīng)用模版.
Q3:redis集群的docker我看ip都是同網(wǎng)段的.這個(gè)是單獨(dú)的docker管理工具處理的?如果只單純搭建redis集群,而無docker集群管理.這個(gè)多個(gè)redis node如何管理?
A3:csphere平臺(tái)內(nèi)部支持網(wǎng)絡(luò)管理功能,并在背后擁有自動(dòng)的可編程的服務(wù)發(fā)現(xiàn)能力,使得自動(dòng)化部署集群成為可能.
如果脫離docker手工部署,按照官方文檔一步步操作即可
Q4: 請(qǐng)問這里的模板數(shù)據(jù)是何時(shí)傳入進(jìn)去的?
A4: 模板數(shù)據(jù)分兩種:
- 配置文件模板里定義的模板變量,這類數(shù)據(jù)是在創(chuàng)建應(yīng)用實(shí)例時(shí)用戶通過cSphere管理平臺(tái)填寫的;
- 集群服務(wù)相關(guān)的元數(shù)據(jù),如每個(gè)容器的IP地址、容器所在的主機(jī)參數(shù)等,這類數(shù)據(jù)是cSphere應(yīng)用編排引擎在創(chuàng)建應(yīng)用實(shí)例時(shí),自動(dòng)從集群各節(jié)點(diǎn)收集并注冊(cè)到配置模板解析引擎的配置文件模板經(jīng)解析生成最終配置文件,然后裝載到每一個(gè)容器里
Q5:請(qǐng)問redis-cluster的擴(kuò)容、縮容,resharding如何處理的呢?
A5: 擴(kuò)容增加節(jié)點(diǎn)的話,觸發(fā)trib腳本重新resharding,減少節(jié)點(diǎn)的話,則需要在前面先執(zhí)行,trib腳本里面有添加刪除節(jié)點(diǎn)的命令
Q6: 這是你們的商業(yè)平臺(tái)?還是openstack集成docker的結(jié)果?
A6:我們的商業(yè)平臺(tái),為企業(yè)提供整體的PaaS解決方案.希云cSphere平臺(tái)底層是docker,希云cSphere平臺(tái)可以部署在OpenStack平臺(tái)之上.
Q7: redis3.0目前自己出的這個(gè)Q5集群方案穩(wěn)定嗎?有沒有經(jīng)過大量的數(shù)據(jù)測(cè)試!效率如何?因?yàn)槲也皇菍I(yè)做運(yùn)維的,我是做開發(fā)的對(duì)運(yùn)維的知識(shí)比較感興趣但是不專業(yè),希望能得到一個(gè)經(jīng)過數(shù)據(jù)支撐的答案
A7: redis當(dāng)前的集群穩(wěn)定性是比較好的,國(guó)內(nèi)外有大量互聯(lián)網(wǎng)企業(yè)大規(guī)模的使用,據(jù)我所知,唯品會(huì)的redis集群規(guī)模在500臺(tái)以上
Q8: 你們的pass平臺(tái)在部署容器時(shí)還能指讓用戶自主定制部署策略?這樣做的目的是什么?
A8:不同類型的應(yīng)用有不同的資源偏好,比如CPU密集型的,磁盤IO密集型的,通過調(diào)度策略的選擇,用戶可以更深度的控制容器在主機(jī)集群上的分布,使應(yīng)用獲得更好的運(yùn)行效果.
Q9: redis用docker做集群,在內(nèi)存方面有什么需要額外注意的地方嗎?
A9:內(nèi)存方面注意設(shè)置內(nèi)核vm相關(guān)參數(shù),另外配置文件里可以加入內(nèi)存最大大小的設(shè)置等,如果要自動(dòng)化,可以自動(dòng)獲取容器的內(nèi)存配額或主機(jī)節(jié)點(diǎn)的內(nèi)存size自動(dòng)計(jì)算
原文出處:高效運(yùn)維微信公眾號(hào)
轉(zhuǎn)載請(qǐng)注明本頁(yè)網(wǎng)址:
http://www.snjht.com/jiaocheng/4495.html