腾讯云轻量服务器通过Docker搭建外网可访问连接的redis5.x集群

原创/朱季谦

最近买了一台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指令------

输入以下内容即可------

XML 复制代码
#节点端口
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容器中------

bash 复制代码
docker exec -it redis-7001 /bin/bash

接着执行以下指令即可------

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集群了,我测试验证可行------

相关推荐
SUPER52662 小时前
FastApi项目启动失败 got an unexpected keyword argument ‘loop_factory‘
java·服务器·前端
一只小bit3 小时前
MySQL 库的操作:从创建配置到备份恢复
服务器·数据库·mysql·oracle
利刃大大3 小时前
【高并发服务器】二、时间轮定时器设计与实现
服务器·项目·cpp·高并发服务器
心灵宝贝5 小时前
libopenssl-1_0_0-devel-1.0.2p RPM 包安装教程(openSUSE/SLES x86_64)
linux·服务器·数据库
emma羊羊8 小时前
【文件读写】图片木马
linux·运维·服务器·网络安全·靶场
迎風吹頭髮8 小时前
UNIX下C语言编程与实践32-UNIX 僵死进程:成因、危害与检测方法
服务器·c语言·unix
爱奥尼欧10 小时前
【Linux】网络部分——Socket编程 UDP实现网络云服务器与本地虚拟机的基本通信
linux·服务器·网络
liu****10 小时前
基于websocket的多用户网页五子棋(九)
服务器·网络·数据库·c++·websocket·网络协议·个人开发
liu****10 小时前
基于websocket的多用户网页五子棋(八)
服务器·前端·javascript·数据库·c++·websocket·个人开发
一水鉴天11 小时前
整体设计 逻辑系统程序 之18 Source 容器(Docker)承载 C/P/D 三式的完整设计与双闭环验证 之2
docker·架构·认知科学·公共逻辑