使用docker搭建redis-cluster環(huán)境

? ? 臨時(shí)接到一個(gè)測(cè)試任務(wù)苫昌,而測(cè)試需要用到redis-cluster環(huán)境哩至,卻沒有現(xiàn)成的環(huán)境可用惕耕,于是只能自力更生搭建測(cè)試環(huán)境纺裁。一開始想采用在宿主機(jī)上硬搭,但苦于沒有那么多的服務(wù)器司澎,于是決定試試docker欺缘。以下為詳細(xì)搭建步驟:

基礎(chǔ)環(huán)境信息

? 基礎(chǔ)環(huán)境如下所示:

CentOS Linux release 7.5.1804
Docker version 18.09.4

? 以下操作均在root用戶下面操作,如果是非root用戶挤安,需要在各命令前面添加sudo

搭建步驟

  • 1谚殊、下載redis鏡像

docker pull redis

? 如果需要拉取指定版本,需要在redis后面添加版本號(hào)蛤铜,如果不指定則拉取最新版本鏡像嫩絮,可以使用docker search redis來搜索鏡像

01 dockerSearchRedis.png

? 查看本地鏡像,可以使用命令docker images

02ShowLocalImages.png
  • 2围肥、創(chuàng)建虛擬網(wǎng)卡

? 創(chuàng)建虛擬網(wǎng)卡剿干,主要是用于redis-cluster能于外界進(jìn)行網(wǎng)絡(luò)通信,一般常用橋接模式穆刻。

docker network create redis-net

? 查看docker的網(wǎng)卡信息置尔,可使用命令docker network ls

03ShowDockerNetwork.png

? 查看dockerr網(wǎng)絡(luò)詳細(xì)信息,可使用命令docker network inspect redis-net

04InspectNICInfo.png
  • 3氢伟、創(chuàng)建redis配置文件模板

mkdir -p /home/redis-cluster
cd /home/redis-cluster
vim redis-cluster.tmpl

在redis-cluster.tmpl中輸入以下內(nèi)容

port ${PORT}
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
cluster-announce-ip 192.168.168.131
cluster-announce-port ${PORT}
cluster-announce-bus-port 1${PORT}
appendonly yes

各節(jié)點(diǎn)解釋如下所示:

  • port:節(jié)點(diǎn)端口榜轿,即對(duì)外提供通信的端口
  • cluster-enabled:是否啟用集群
  • cluster-config-file:集群配置文件
  • cluster-node-timeout:連接超時(shí)時(shí)間
  • cluster-announce-ip:集群各節(jié)點(diǎn)IP地址
  • cluster-announce-port:集群節(jié)點(diǎn)映射端口
  • cluster-announce-bus-port:集群總線端口
  • appendonly:持久化模式

cluster-announce-ip:這個(gè)IP需要特別注意一下,如果要對(duì)外提供訪問功能朵锣,需要填寫宿主機(jī)的IP谬盐,如果填寫docker分配的IP(172.x.x.x),可能會(huì)導(dǎo)致部分集群節(jié)點(diǎn)在跳轉(zhuǎn)時(shí)失敗猪勇。

  • 4设褐、創(chuàng)建節(jié)點(diǎn)配置文件

? 在redis-cluser中執(zhí)行以下命令

for port in $(seq 8010 8015); \
do \
  mkdir -p ./${port}/conf  \
  && PORT=${port} envsubst < ./redis-cluster.tmpl > ./${port}/conf/redis.conf \
  && mkdir -p ./${port}/data; \
done

? 驗(yàn)證上述命令執(zhí)行的結(jié)果是否正確

05CheckConfigFile.png
06CheckRedisConf.png
  • 5、創(chuàng)建redis節(jié)點(diǎn)容器

? 執(zhí)行以下命令即可

for port in $(seq 8010 8015); \
do \
   docker run -it -d -p ${port}:${port} -p 1${port}:1${port} \
  --privileged=true -v /home/redis-cluster/${port}/conf/redis.conf:/usr/local/etc/redis/redis.conf \
  --privileged=true -v /home/redis-cluster/${port}/data:/data \
  --restart always --name redis-${port} --net redis-net \
  --sysctl net.core.somaxconn=1024 redis redis-server /usr/local/etc/redis/redis.conf; \
done

? 驗(yàn)證容器是否創(chuàng)建成功

07CreateRedisContainers.png

? 查看docker給每個(gè)節(jié)點(diǎn)分配的IP信息

08ShowInternalIP.png
  • 6泣刹、創(chuàng)建redis-cluster集群

? 進(jìn)入一個(gè)容器節(jié)點(diǎn)

docker exec -it redis-8010 bash

? 在進(jìn)入容器后助析,執(zhí)行以下命令:

cd /usr/local/bin/

redis-cli --cluster create 192.168.168.131:8010 192.168.168.131:8011 192.168.168.131:8012 192.168.168.131:8013 192.168.168.131:8014 192.168.168.131:8015

出現(xiàn)選擇提示信息,輸入yes椅您,結(jié)果如下所示:

09CreateRedisCluster.png
  • 7外冀、連接redis-cluster,并添加數(shù)據(jù)到redis

在節(jié)點(diǎn)8010中輸入以下命令

redis-cli -c -h 192.168.168.131 -p 8010

10SetValueForRedis.png
  • 8掀泳、驗(yàn)證集群是否可以任意地方訪問

以下驗(yàn)證是基于Windows版本的redis雪隧。其下載地址如下:

https://github.com/microsoftarchive/redis/releases

在Windows中驗(yàn)證的結(jié)果如下所示:

11TestRedisCluster.png

搭建中遇到的問題

  • 1、所有都搭建完成后员舵,在創(chuàng)建redis-cluster時(shí)一直報(bào)錯(cuò)

Could not connect to Redis at 192.168.168.131:8010: No route to host

這個(gè)原因是因?yàn)樗拗鳈C(jī)的防火墻未關(guān)脑沿,導(dǎo)致相應(yīng)的端口被阻止,創(chuàng)建的時(shí)候臨時(shí)關(guān)閉防火墻马僻,后面再允許相應(yīng)的端口即可庄拇。
  • 2、在成功創(chuàng)建完redis-cluster后韭邓,可以成功連接措近,但在獲取值時(shí),一直處于跳轉(zhuǎn)中女淑,導(dǎo)致最終出現(xiàn)TTL exhaust

-> Redirected to slot [15495] located at 172.18.0.7:8015

這種情況通常是因?yàn)樵谇懊鎸懪渲梦募t郑,將cluster-announce-ip寫成了docker分配的IP,只需要將該IP換為宿主機(jī)的IP即可鸭你。

其他參考

? ? 在搭建過程屈张,可能在出現(xiàn)問題后,需要停止或直接刪除docker容器袱巨,可以使用以下參考命令

批量停止docker 容器:

docker ps -a | grep -i "redis-801*" | awk '{print $1}' | xargs docker stop

批量刪除docker 容器:

docker ps -a | grep -i "redis-801*" | awk '{print $1}' | xargs docker rm -f

批量刪除文件

rm -rf 801{0..5}/conf/redis.conf

? ? 以上就是基于docker搭建redis-cluster的簡(jiǎn)單步驟袜茧,實(shí)際應(yīng)用中可能并沒有這么簡(jiǎn)單,該文也僅用于參考瓣窄。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末笛厦,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子俺夕,更是在濱河造成了極大的恐慌裳凸,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,607評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件劝贸,死亡現(xiàn)場(chǎng)離奇詭異姨谷,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)映九,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,239評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門梦湘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事捌议『甙危” “怎么了?”我有些...
    開封第一講書人閱讀 164,960評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵瓣颅,是天一觀的道長倦逐。 經(jīng)常有香客問我,道長宫补,這世上最難降的妖魔是什么檬姥? 我笑而不...
    開封第一講書人閱讀 58,750評(píng)論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮粉怕,結(jié)果婚禮上健民,老公的妹妹穿的比我還像新娘。我一直安慰自己贫贝,他們只是感情好秉犹,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,764評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著平酿,像睡著了一般凤优。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蜈彼,一...
    開封第一講書人閱讀 51,604評(píng)論 1 305
  • 那天筑辨,我揣著相機(jī)與錄音,去河邊找鬼幸逆。 笑死棍辕,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的还绘。 我是一名探鬼主播楚昭,決...
    沈念sama閱讀 40,347評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼拍顷!你這毒婦竟也來了抚太?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,253評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤昔案,失蹤者是張志新(化名)和其女友劉穎尿贫,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體踏揣,經(jīng)...
    沈念sama閱讀 45,702評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡庆亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,893評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了捞稿。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片又谋。...
    茶點(diǎn)故事閱讀 40,015評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡拼缝,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出彰亥,到底是詐尸還是另有隱情咧七,我是刑警寧澤,帶...
    沈念sama閱讀 35,734評(píng)論 5 346
  • 正文 年R本政府宣布剩愧,位于F島的核電站猪叙,受9級(jí)特大地震影響娇斩,放射性物質(zhì)發(fā)生泄漏仁卷。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,352評(píng)論 3 330
  • 文/蒙蒙 一犬第、第九天 我趴在偏房一處隱蔽的房頂上張望锦积。 院中可真熱鬧,春花似錦歉嗓、人聲如沸丰介。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,934評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽哮幢。三九已至,卻和暖如春志珍,著一層夾襖步出監(jiān)牢的瞬間橙垢,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,052評(píng)論 1 270
  • 我被黑心中介騙來泰國打工伦糯, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留柜某,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,216評(píng)論 3 371
  • 正文 我出身青樓敛纲,卻偏偏與公主長得像喂击,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子淤翔,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,969評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容