一  前期准备

1、centos 7 系统(网络桥接)+docker环境
2、centos 7 基本命令支持 
yum install wegt ##安装下载工具yum install net-tools ##安装网络工具yum install tree
##安装tree命令(方便查看集群配置文件结构)yum -y update ##跟新系统



二 安装集群环境

1 安装ruby镜像   tag省略默认下载lasted
docker pull ruby
2 安装redis镜像  
docker pull redis:4.0
备注:redis官方集群方案 为4.0版本自带

3 安装结果如下




备注:mysql镜像与本教程无关,redis两个版本其实为相同镜像,不影响使用

三、集群配置

1 创建虚拟网卡
docker create network redis-netdocker network ls ##查看网卡信息


备注:创建redis-net虚拟网卡 目的是让docker容器能与宿主(centos7)桥接网络 并间接与外界连接

2 查看redis-net虚拟网卡网关ip
docker network inspect redis-net | grep "Gateway" | grep --color=auto -P
'(\d{1,3}.){3}\d{1,3}' -o


备注:docker network inspect network-name 显示 network-name对应配置信息         (gerp
过滤网关配置行 并筛选ip ) 可人工   

3 创建配置文件模版
mkdir /home/redis-cluster ##在home 目录下创建 集群配置文件加 cd /home/redis-cluster
##在创建目录中 touch redis-cluster.tmpl ##创建模版件vi redis-cluster.tmpl ##编辑模版文件
备注:编辑如下  esc+:wq退出
port ${PORT} ##节点端口 cluster-enabled yes ##cluster集群模式 cluster-config-file
nodes.conf ##集群配置名 cluster-node-timeout 5000 ##超时时间 cluster-announce-ip
172.18.0.1 ##实际为各节点网卡分配ip 先用上网关ip代替 cluster-announce-port ${PORT} ##节点映射端口
cluster-announce-bus-port 1${PORT} ##节点总线端 appendonly yes ##持久化模式
备注:此模版文件为集群节点通用文件  其中${PORT} 将读取命令行变量  ip则根据网卡分配ip进行替换  以保证节点配置文件除端口以及ip 全部一致。



4 创建节点配置文件
cd /home/redis-clusterfor port in `seq 7010 7015`; do \ mkdir -p
./${port}/conf \ && PORT=${port} envsubst < ./redis-cluster.tmpl >
./${port}/conf/redis.conf \ && mkdir -p ./${port}/data; \ done
备注:命令译为 循环7010 - 7015 在当前目录下创建 701*/conf 目录结构     (mkdir -p 递归创建目录)
          设置701*为PORT变量 将当前目录下 模版文件 复制到 701*/conf/redis.conf 文件中
          在当前目录下创建 701*/data 目录结构 

5 验证上步
tree cat 701*/conf/redis.conf


 备注:data目录本步骤为空   节点对应配置文件ip本步骤对应网管ip

6 启动redis节点容器
for port in `seq 7010 7015`; do \ docker run -d -ti -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
备注:命令译为  循环7010 - 7015  运行redis 容器

docker  run            运行
-d                          守护进程模式
--restart always     保持容器启动
--name redis-710* 容器起名
--net redis-net    容器使用虚拟网卡
-p                        指定宿主机器与容器端口映射 701*:701*
-P                        指定宿主机与容器redis总线端口映射 1701*:1701*
 --privileged=true -v
/home/redis-cluster/701*/conf/redis.conf:/usr/local/etc/redis/redis.conf
    付权将宿主701*节点文件挂载到容器/usr/local/etc/redis/redis.conf 文件中
--privileged=true -v /home/redis-cluster/${port}/data:/data \
   付权将宿主701*/data目录挂载到容器/data目录中
--sysctl net.core.somaxconn=1024 redis redis-server
/usr/local/etc/redis/redis.conf;
   容器根据挂载的配置文件启动 redis服务端

7 验证容器启动
docker ps



8 查看容器分配ip
docker network inspect redis-net
结果




备注:每个容器对应分配了ip 需要修改节点配置文件redis.conf与其对应  并重启容器。

9 修改节点 配置文件重启redis服务(容器中命令中度缺失不推荐)
docker exec -it redis-701* /bin/bash ##以命令行形式进入 redis-701*容器 vi
/usr/local/etc/redis/redis.conf ##编辑ip为上查询分配的ip 并esc+:wq退出


备注:6个节点均要修改 并重新启动redis-service 根据修改的节点文件

10 修改宿主挂载目录文件中文件 重复6、7 进行11
vi /home/redis-cluster/701*/conf/redis.conf ##编辑ip为查询分配的ip 并esc+:wq退出


暂停容器并删除容器 以便重复6步骤
for port in `seq 7010 7015`; do \ docker stop redis-${port}; docker rm
redis-${port}; done
备注:6个都要修改redis.conf   

11 启动redis-cluster集群
echo yes | docker run -i --rm --net redis-net ruby sh -c '\ gem install redis
\ && wget http://download.redis.io/redis-stable/src/redis-trib.rb \ && ruby
redis-trib.rb create --replicas 1 \ '"$(for port in `seq 7010 7015`; do \ echo
-n "$(docker inspect --format '{{ (index .NetworkSettings.Networks
"redis-net").IPAddress }}' "redis-${port}")":${port} ' ' ; \ done)"
备注:docker run -i    交互模式启动 ruby sh  
  gem intall redis    安装redis
--net redis-net   使用虚拟网卡桥接
wget     下载 redis集群启动 redis-trib.rb 包
ruby redis-trib create --replicas  1  17.18.0.x:701*  ....     ruby 运行集群包
添加redis节点6个 










祝你成功!




友情链接
KaDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:ixiaoyang8@qq.com
QQ群:637538335
关注微信