docker 部署 redis-cluster集群

一  前期准备

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 安装结果如下

docker 部署 redis-cluster集群_第1张图片

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

三、集群配置

1 创建虚拟网卡

docker create network redis-net
docker 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-cluster
for 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

docker 部署 redis-cluster集群_第2张图片 docker 部署 redis-cluster集群_第3张图片

 备注: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

结果

docker 部署 redis-cluster集群_第4张图片

备注:每个容器对应分配了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退出

docker 部署 redis-cluster集群_第5张图片

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

10 修改宿主挂载目录文件中文件 重复6、7 进行11

vi  /home/redis-cluster/701*/conf/redis.conf  ##编辑ip为查询分配的ip 并esc+:wq退出

docker 部署 redis-cluster集群_第6张图片

暂停容器并删除容器 以便重复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个 


docker 部署 redis-cluster集群_第7张图片


祝你成功!



你可能感兴趣的:(docker,redis,docker)