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