總結記錄/朱季謙
最近買了一台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 && 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-net --sysctl net.core.somaxconn=1024 redis:5.0.5 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