本次搭建的结构为: 1个master,2个slave 哨兵 sentinel 也运行在这三个容器中 第一步定制镜像
定制镜像只是为了后面使用起来更方便 首先运行一个redis容器 docker run --name redis-A -p 6379:6379 -d redis --port 6379
使用 docker ps 命令可以看到容器已经运行 然后运行 docker exec -it redis-A /bin/bash
进入容器开始定制我们的redis镜像,主要是指容器中哨兵的配置. 我使用的是创建一个脚本来启动 sentinel touch start-sentinel.sh
使用vim 编辑脚本。这个容器中还要安装vim echo "deb http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse" >>/etc/apt/sources.list
echo "deb http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse" >>/etc/apt/sources.list
echo "deb http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse" >>/etc/apt/sources.list
echo "deb http://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse" >>/etc/apt/sources.list
echo "deb http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse" >>/etc/apt/sources.list
echo "deb-src http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse" >>/etc/apt/sources.list
echo "deb-src http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse" >>/etc/apt/sources.list
echo "deb-src http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse" >>/etc/apt/sources.list
echo "deb-src http://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse" >>/etc/apt/sources.list
echo "deb-src http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse" >>/etc/apt/sources.list
#更新安装源
apt-get update
#使用强制安装
apt-get install -f vim
编辑脚本: #!/bin/sh
#master ip
host=$1
#master port
port=$2
#sentinel 端口
sport=$3
#sentinel 端口不设置给
if [ ! -n "$sport" ];then
sport=26379
fi
cd /
#开始写入配置文件
echo "sentinel monitor mymaster $host $port 2" >sentinel.conf
echo "port $sport">>sentinel.conf
#启动哨兵 &可以后台运行
redis-sentinel /sentinel.conf &
执行:chmod +x start-sentinel.sh 赋予执行权限 输入 ps -ef|grep redis 查看运行情况:
![](https://i-blog.csdnimg.cn/blog_migrate/b053577e57009fe65b7ff2480f4b2659.png)
到此镜像定制完毕,重新提交镜像 以便使用 #先停止容器
docker stop redis-A
#将容器commit成为一个镜像
docker commit redis-A redis-a
#运行容器
docker run -p 8080:8080 -p 8081:8081 -v /home/data/:/home/data/ -dt newImageB
![](https://i-blog.csdnimg.cn/blog_migrate/ebd779e2937ca7e3f978d5386ad2af7b.png)
docker images命令就可以看到刚刚提交的镜像
第二步 创建节点 使用我们定制的容器开始创建3个节点 docker run --name redis-node1 -p 7000:7000 -p 27000:27000 -d redis-a --port 7000
docker run --name redis-node2 -p 7001:7001 -p 27001:27001 -d redis-a --port 7001
docker run --name redis-node3 -p 7002:7002 -p 27002:27002 -d redis-a --port 7002
这里我一映射了哨兵的端口是为了测试spring 集成redis(随后会写) #先查看三个节点对应的ip地址
docker inspect redis-node1
#我的是
#172.17.0.4 7000
#172.17.0.5 7001
#172.17.0.6 7002
#进入node2,node3 分别设置SLAVE
docker exec -it redis-node2 /bin/bash
redis-cli -p 7001
SLAVEOF 172.17.0.4 7000
![](https://i-blog.csdnimg.cn/blog_migrate/d49be7f75052b2cf4ef1289d04b6b7e9.png)
然后进入node1 可以看到已结链接到两个从节点
![](https://i-blog.csdnimg.cn/blog_migrate/82fe3979d946774991a6be193e6e8165.png)
最后用脚本分别启动哨兵 cd /
#哨兵端口已创建容器时输入为准
./start-sentinel.sh 172.17.0.4 7000 27000
可以看到3个哨兵已经启动。
![](https://i-blog.csdnimg.cn/blog_migrate/9e496bcc1e6c7bef47cd5fa91c3271bb.png)
停掉 redis-node1容器 可以看到 重新选举出了新的master
![](https://i-blog.csdnimg.cn/blog_migrate/babdd602d93ea6b3ab7af422bc9a38ac.png)
![](https://i-blog.csdnimg.cn/blog_migrate/d8ec573e7b6a72c41e405a6724ddf89e.png)
作者:websky 链接:https://www.jianshu.com/p/0c6759eba031 | | | |
---|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
脚本列出所有容器对应的名称,端口,及ip
ps -ef|grep redis
docker inspect -f='{{.Name}} {{.NetworkSettings.IPAddress}} {{.HostConfig.PortBindings}}' $(docker ps -aq)