騰訊雲輕量伺服器通過Docker搭建外網可訪問連線的redis5.x叢集

朱季謙發表於2022-01-23

總結記錄/朱季謙

最近買了一臺4核16的騰訊雲輕量應用伺服器,花了我快四百的大洋,打算搭建一堆docker元件叢集,最先開始是通過docker搭建redis叢集,計劃使用三個埠,分別是7001,7002,7003。

騰訊雲伺服器有防火牆限制,故而需要在控制皮膚的防火牆開放這六個埠——

image
注意,為什麼開放了7001,7002,7003,還需要開放它們對應的匯流排埠17001,17002,17003呢?因為這是它們叢集心跳連線的埠,若不開放,將在對各啟動容器節點建立叢集時,會建立叢集分配槽時失敗。

完成這一步後,就可以開始通過docker拉取redis的映象了,這裡拉取的是redis:5.0.5版本——

docker pull redis:5.0.5

建立redis-template.conf模板,將根據該模板自動生成各節點對應的redis.conf檔案——

mkdir /app/redis && cd /app/redis/src && mkdir redis-cluster && cd ./redis-cluster && touch redis-template.conf

接著,修改redis-template.conf模板檔案內容,直接使用vi redis-template.conf指令——

image
輸入以下內容即可——

#節點埠
port ${PORT}
#設定為叢集節點
cluster-enabled yes
#外網連線必須設定為 no
protected-mode no
#叢集節點檔案
cluster-config-file nodes.conf
cluster-node-timeout 5000
#改成你的外網ip,假設,我的騰訊雲伺服器外網ip是14.253.73.xx
cluster-announce-ip 14.253.73.xx
#外網埠
cluster-announce-port ${PORT}
#匯流排埠
cluster-announce-bus-port 1${PORT}

appendonly yes

docker中建立一個redis叢集專用的網路redis-net供叢集使用

docker network create redis-net

進入到存放redis-template.conf模板檔案的目錄下——

cd /app/redis/redis-cluster/

直接在命令列中複製以下指令,然後回車執行——

for port in `seq 7001 7003`; do 
  mkdir -p ./${port}/conf && PORT=${port} envsubst < ./redis-template.conf > ./${port}/conf/redis.conf && mkdir -p ./${port}/data;
done

執行完後,通過指令ll檢視,發現自動生成了7001~7003的目錄——
image
接著,直接複製以下指令——

for port in `seq 7001 7003`; do 
  docker run -d -ti -p ${port}:${port} -p 1${port}:1${port} -v /app/redis/redis-cluster/${port}/conf/redis.conf:/usr/local/etc/redis/redis.conf -v /app/redis/redis-cluster/${port}/data:/data  --restart always --name redis-${port} --net redis-network --sysctl net.core.somaxconn=1024 redis redis-server /usr/local/etc/redis/redis.conf; 
done

回車後,即可自動啟動docker容器例項——
image
正常啟動成功話,通過docker ps -a指令檢視,顯示以下資訊——

image
這時候,我們只需要進入到其中一個docker容器的redis中,將各節點組成叢集,這裡進入到redis-7001容器中——

docker exec -it redis-7001 /bin/bash

接著執行以下指令即可——

redis-cli --cluster create 外網ip:7001 外網ip:7002 外網ip:7003  --cluster-replicas 0

注意:後續若改成三主三從時,這裡的叢集指令為——

redis-cli --cluster create 外網ip:7001 外網ip:7002 外網ip:7003 外網ip:7004 外網ip:7005 外網ip:7006 --cluster-replicas 1

當出現以下請求時,直接填寫 yes 即可——

Can I set the above configuration? (type 'yes' to accept): yes

最後啟動成功後,會出現以下資訊——

image
這時,我們可以測試一下,通過指令 redis-cli -c -h 外網IP -p 7001連線到叢集節點上,正常連線上去後,再通過指令cluster info檢視叢集狀態,顯示ok說明叢集正常,這時還可以通過cluster nodes檢視各節點具體槽分配資訊——
image
到這一步,通過springboot+redis即可連線到騰訊雲伺服器上docker部署的redis叢集了,我測試驗證可行——
image

參考文章:https://blog.csdn.net/weixin_44015043/article/details/105868513

相關文章