如何利用容器實現(xiàn)生產(chǎn)級別的redis sharding集群的一鍵交付,相信很多沒有經(jīng)驗的人對此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。
成都創(chuàng)新互聯(lián)公司是一家專注于做網(wǎng)站、網(wǎng)站設(shè)計與策劃設(shè)計,岷縣網(wǎng)站建設(shè)哪家好?成都創(chuàng)新互聯(lián)公司做網(wǎng)站,專注于網(wǎng)站建設(shè)十年,網(wǎng)設(shè)計領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:岷縣等地區(qū)。岷縣做網(wǎng)站價格咨詢:18980820575
Redis在3.0之后開始支持sharding集群。Redis集群可以讓數(shù)據(jù)自動在多個節(jié)點上分布。如何使用Docker實現(xiàn)Redis集群的一鍵部署交付,是一個有趣的并且有價值的話題。
小編將給大家介紹基于進程的容器技術(shù)實現(xiàn)Redis sharding集群的一鍵部署,充分展現(xiàn)了容器的強大威力。
Redis(redis.io)作為最流行的KV數(shù)據(jù)庫,很長一段時間都是單機運行,關(guān)于如何實現(xiàn)Redis的數(shù)據(jù)在多個節(jié)點上的分布,在Redis3.0出來之前,有很多第三方的方案。建議大家參考這個鏈接:
http://redis.io/topics/partitioning
這是最簡單的實現(xiàn),通過在客戶端利用一致性hash算法,將數(shù)據(jù)分布到不同節(jié)點。這種方法的缺點非常明顯,缺少故障自動failover能力,并且在擴容時數(shù)據(jù)分布的搬遷,也比較費勁。
一個是Redis官方推薦的Twemproxy,是由twitter公司開發(fā);
另一個是國內(nèi)豌豆莢開源的codis;
代理模式最大的好處是仍然使用redis單機的sdk進行開發(fā),維護簡單。
redis3.0繼2.8推出sentinel主從自動failover功能后,推出了sharding集群,這就是Redis Cluster。本次分享主要是介紹如何將Redis集群實現(xiàn)一鍵的部署。
參考文檔:
http://redis.io/topics/cluster-tutorial
Redis官方已經(jīng)提供了Redis 3.2和3.3的鏡像,都可以用來作為Redis集群的鏡像,3.2是穩(wěn)定版本。
目前官方推出了alpine版本的Redis鏡像,alpine鏡像的優(yōu)勢是體積小。此次分享是采用官方的redis:3.2-alpine的鏡像來做集群。
redis官方提供了一個ruby的腳本redis-trib.rb,這個腳本可以用來初始化集群、resharding集群、rebalance集群等。
我們使用官方的腳本來初始化集群。該腳本的運行需要ruby環(huán)境,我們來構(gòu)建一個redis-trib鏡像,以下是構(gòu)建redis-trib鏡像的Dockerfile內(nèi)容:
cat Dockerfile
FROM ruby:2.3.1-alpine ADD https://raw.githubusercontent.com/antirez/redis/3.2.0/src/redis-trib.rb /usr/local/bin/redis-trib.rb RUN gem install redis && chmod 755 /usr/local/bin/redis-trib.rb && \ sed -i '/yes_or_die.msg/a return if ENV["QUIET_MODE"] == "1"' /usr/local/bin/redis-trib.rb ADD entrypoint.sh /entrypoint.sh ENTRYPOINT [“/entrypoint.sh"]
腳本文件
cat entrypoint.sh
#!/bin/sh if [ "$CLUSTER_CMD" = create ]; then if [ -f /usr/local/etc/redis-trib.conf ] ; then . /usr/local/etc/redis-trib.conf QUIET_MODE=1 redis-trib.rb create --replicas $REPLICAS $NODES fi fi
上面兩個文件用來構(gòu)建redis-trib鏡像,Dockerfile中的邏輯比較簡單,將github中的redis-trib.rb文件添加到鏡像中,并讓腳本執(zhí)行支持非交互模式(QUIET_MODE)。
鏡像啟動時,將執(zhí)行集群初始化命令。
port 6379 cluster-enabled yes cluster-config-file nodes.conf cluster-node-timeout 5000 appendonly yes
redis集群的配置文件我們一般放到數(shù)據(jù)目錄/data下,redis進程對/data目錄擁有可讀寫的權(quán)限。
entrypoint.sh文件中,最主要的是讀取redis-trib.conf配置文件,配置文件的格式非常簡單
REPLICAS={{.REPLICAS_NUM}} {{ $rs := service "redis" }} NODES="{{range $i,$rc := $rs.Containers}} {{$rc.IPAddr}}:6379{{end}}"
REPLICAS的意思是每個分片有幾個slave,一般配置1個slave ,即REPLICAS=1NODES的意思是集群的每個節(jié)點,包括master和slave。
所以如果有10個節(jié)點,REPLICAS=1的話,那么將有5個分片(slices)。
準備好上述鏡像和配置文件后,我們開始編排集群
![![容器參數(shù)-1]
redis-trib要在redis容器啟動完成后再啟動,所以啟動優(yōu)先級要比redis低。
通過以上步驟,編排好了Redis-sharding應(yīng)用模版。
以下是部署后的效果圖:
以上內(nèi)容分享了基于進程的容器技術(shù),實現(xiàn)了Redis sharding的一鍵交付。
你會部署了嗎?
so easy
Q1: 如果我想在一個機器上部署多個redis實例可以嗎?
A1: 可以
Q2: 問下你們ui編排工具是自主研發(fā)還是基于什么開源工具?內(nèi)部邏輯是什么.?
A2: 自主研發(fā)的。
通過易用的界面對docker容器運行參數(shù)進行設(shè)置和保存。
每個容器運行參數(shù)和優(yōu)先級以及部署策略構(gòu)成一個個服務(wù),多個服務(wù)組合成一個可以一鍵部署的應(yīng)用模版。
Q3:redis集群的docker我看ip都是同網(wǎng)段的。這個是單獨的docker管理工具處理的?如果只單純搭建redis集群,而無docker集群管理。這個多個redis node如何管理?
A3:csphere平臺內(nèi)部支持網(wǎng)絡(luò)管理功能,并在背后擁有自動的可編程的服務(wù)發(fā)現(xiàn)能力,使得自動化部署集群成為可能。
如果脫離docker手工部署,按照官方文檔一步步操作即可
Q4: 請問這里的模板數(shù)據(jù)是何時傳入進去的?
A4: 模板數(shù)據(jù)分兩種:
配置文件模板里定義的模板變量,這類數(shù)據(jù)是在創(chuàng)建應(yīng)用實例時用戶通過cSphere管理平臺填寫的;
集群服務(wù)相關(guān)的元數(shù)據(jù),如每個容器的IP地址、容器所在的主機參數(shù)等,這類數(shù)據(jù)是cSphere應(yīng)用編排引擎在創(chuàng)建應(yīng)用實例時,自動從集群各節(jié)點收集并注冊到配置模板解析引擎的配置文件模板經(jīng)解析生成最終配置文件,然后裝載到每一個容器里
Q5:請問redis-cluster的擴容、縮容,resharding如何處理的呢?
A5: 擴容增加節(jié)點的話,觸發(fā)trib腳本重新resharding,減少節(jié)點的話,則需要在前面先執(zhí)行,trib腳本里面有添加刪除節(jié)點的命令
Q6: 這是你們的商業(yè)平臺?還是openstack集成docker的結(jié)果?
A6:我們的商業(yè)平臺,為企業(yè)提供整體的PaaS解決方案。希云cSphere平臺底層是docker,希云cSphere平臺可以部署在OpenStack平臺之上。
Q7: redis3.0目前自己出的這個Q5集群方案穩(wěn)定嗎?有沒有經(jīng)過大量的數(shù)據(jù)測試!效率如何?因為我不是專業(yè)做運維的,我是做開發(fā)的對運維的知識比較感興趣但是不專業(yè),希望能得到一個經(jīng)過數(shù)據(jù)支撐的答案
A7: redis當(dāng)前的集群穩(wěn)定性是比較好的,國內(nèi)外有大量互聯(lián)網(wǎng)企業(yè)大規(guī)模的使用,據(jù)我所知,唯品會的redis集群規(guī)模在500臺以上
Q8: 你們的pass平臺在部署容器時還能指讓用戶自主定制部署策略?這樣做的目的是什么?
A8:不同類型的應(yīng)用有不同的資源偏好,比如CPU密集型的,磁盤IO密集型的,通過調(diào)度策略的選擇,用戶可以更深度的控制容器在主機集群上的分布,使應(yīng)用獲得更好的運行效果。
Q9: redis用docker做集群,在內(nèi)存方面有什么需要額外注意的地方嗎?
A9:內(nèi)存方面注意設(shè)置內(nèi)核vm相關(guān)參數(shù),另外配置文件里可以加入內(nèi)存最大大小的設(shè)置等,如果要自動化,可以自動獲取容器的內(nèi)存配額或主機節(jié)點的內(nèi)存size自動計算
看完上述內(nèi)容,你們掌握如何利用容器實現(xiàn)生產(chǎn)級別的redis sharding集群的一鍵交付的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!