一 前期准备
1、centos 7 系统+docker环境(略)
二 安装集群环境
1、安装redis镜像
docker pull redis ##获取最新redis版本
备注:redis官方集群方案 为4.0版本之后自带
2、安装ruby镜像 tag省略默认下载lasted
docker pull ruby
3、安装结果如下
![4f0675664388a5ba9acf040339896cd0.png](https://img-blog.csdnimg.cn/img_convert/4f0675664388a5ba9acf040339896cd0.png)
docker 本地镜像
三、集群配置
1、创建虚拟网卡
docker network create redis-net
docker network ls ##查看网卡信息
![ffc11e3762b75e1b561b0c3a657655de.png](https://img-blog.csdnimg.cn/img_convert/ffc11e3762b75e1b561b0c3a657655de.png)
docker 虚拟网卡信息
备注:创建redis-net虚拟网卡目的是让docker容器能与宿主(centos7)桥接网络并间接与外界连接
2、查看redis-net虚拟网卡网关ip
docker network inspect redis-net
![08f3289c8df04c40cf8205094db0e606.png](https://img-blog.csdnimg.cn/img_convert/08f3289c8df04c40cf8205094db0e606.png)
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 ##持久化模式
logfile redis.log ##日志文件
masterauth test@2019 ##密码,非必要
requirepass test@2019 ##同步密码,非必要
备注:此模版文件为集群节点通用文件 其中${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、验证上步
cd /home/redis-cluster
tree --charset gb2312 ##跟上charset,避免出现乱码
cat 701*/conf/redis.conf
![42443ea51fbfa9f1f4a676b441042eb7.png](https://img-blog.csdnimg.cn/img_convert/42443ea51fbfa9f1f4a676b441042eb7.png)
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
![0a7416d2ec2808562df216775d641a74.png](https://img-blog.csdnimg.cn/img_convert/0a7416d2ec2808562df216775d641a74.png)
8、查看容器分配ip
docker network inspect redis-net
![22e2d9cc10fe317158dcb6d61ef206f4.png](https://img-blog.csdnimg.cn/img_convert/22e2d9cc10fe317158dcb6d61ef206f4.png)
备注:每个容器对应分配了ip 需要修改节点配置文件redis.conf与其对应 并重启容器。
9、修改宿主挂载目录文件中文件redis.conf 对应的ip地址
vi /home/redis-cluster/701*/conf/redis.conf ##其中*用具体数字代替,依次修改,编辑ip为【8】查询分配的ip 并esc+:wq退出
备注:6个都要修改redis.conf
10、暂停容器并删除容器 以便重复6步骤
for port in `seq 7010 7015`; do
docker stop redis-${port};
docker rm redis-${port};
done
再重复【6】步骤redis启动容器
11、启动redis-cluster集群
docker exec -it redis-7010 redis-cli -a test@2019 --cluster create 172.18.0.2:7010 172.18.0.3:7011 172.18.0.4:7012 172.18.0.5:7013 172.18.0.6:7014 172.18.0.7:7015 --cluster-replicas 1
备注:--cluster-replicas 1 表示1主1备,前3个会自动设置为主,后面3个自动设置为备
12、进入客户端操作
docker exec -it redis-7010 redis-cli -h 192.168.2.88 -p 7010 -a test@2019 -c
备注:
-h:宿主主机地址
-p:端口
-a:密码
-c:以集群方式进入
备注:windows下docker部署类似,切换到linux环境(Switch to Windows containers),最终处于如下图状态。
![d531734c6ad23c46b304e32b524766d2.png](https://img-blog.csdnimg.cn/img_convert/d531734c6ad23c46b304e32b524766d2.png)
windows的下docker操作可以利用windows自带的工具PowerShell
![bcbef1f2dac030f36dce53d0e589d7e2.png](https://img-blog.csdnimg.cn/img_convert/bcbef1f2dac030f36dce53d0e589d7e2.png)