總結記錄/朱季謙
最近買了一臺4核16的騰訊雲輕量應用伺服器,花了我快四百的大洋,打算搭建一堆docker元件叢集,最先開始是通過docker搭建redis叢集,計劃使用三個埠,分別是7001,7002,7003。
騰訊雲伺服器有防火牆限制,故而需要在控制皮膚的防火牆開放這六個埠——
注意,為什麼開放了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指令——
輸入以下內容即可——
#節點埠
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的目錄——
接著,直接複製以下指令——
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容器例項——
正常啟動成功話,通過docker ps -a指令檢視,顯示以下資訊——
這時候,我們只需要進入到其中一個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
最後啟動成功後,會出現以下資訊——
這時,我們可以測試一下,通過指令 redis-cli -c -h 外網IP -p 7001連線到叢集節點上,正常連線上去後,再通過指令cluster info檢視叢集狀態,顯示ok說明叢集正常,這時還可以通過cluster nodes檢視各節點具體槽分配資訊——
到這一步,通過springboot+redis即可連線到騰訊雲伺服器上docker部署的redis叢集了,我測試驗證可行——
參考文章:https://blog.csdn.net/weixin_44015043/article/details/105868513