搭建基于docker swarm的nginx集群(centos-7)
搭建步骤
-
准备四台虚拟机
-
配置国内repo源,这是使用阿里云提供的repo源
# 备份初始repo源
cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
#下载repo文件
cd /etc/yum.repos.d/
curl http://mirrors.163.com/.help/CentOS7-Base-163.repo -o CentOS-Base.repo
# 更新缓存
yum clean all
yum makecache fast
-
在一台虚拟机上安装ansible,并配置免密通道,方便集群操作
ansible的安装与部署 -
四台机器全部安装好docker,并启动
docker的安装步骤 -
创建swarm集群
# 初始化集群
[root@swarm-manager1 ~]# docker swarm init --advertise-addr 192.168.44.131
# manager令牌
[root@swarm-manager1 ~]# docker swarm join-token manager
- 添加swarm集群manager
出现报错信息:no route to host
可能是leader manager的防火墙没有关
# 停止防火墙服务
systemctl stop firewalld
setenforce 0
# 永久关闭selinux
sed -i '/^SELINUX/ s/enforcing/disabled/g' /etc/selinux/config
发现问题还是没有解决
试着将集群所有结点的主机关闭防火墙
问题解决
# 添加manager到集群
[root@swarm-manager2 ~]# docker swarm join --token SWMTKN-1-1lbndvl3vrziip1y377uuoe3uzl6ox7nja3mr6ymr92emulhwz-8z39sv42a09z0isjfn1vfa6c4 192.168.44.131:2377
[root@swarm-manager3 ~]# docker swarm join --token SWMTKN-1-1lbndvl3vrziip1y377uuoe3uzl6ox7nja3mr6ymr92emulhwz-8z39sv42a09z0isjfn1vfa6c4 192.168.44.131:2377
- 添加swarm集群worker
[root@docker-node /]# docker swarm join --token SWMTKN-1-1lbndvl3vrziip1y377uuoe3uzl6ox7nja3mr6ymr92emulhwz-er23pec2dwap03v88sztrrhk9 192.168.44.131:2377
- swarm集群搭建完成
swarm集群弹性创建服务
# 启动一个服务
docker service create -p 8080:80 --name my-nginx nginx
# 创建副本
docker service scale my-nginx=5
高可用
docker swarm使用raft协议来支持管理结点的高可用
本次搭建的集群有三个管理结点,试着关闭管理结点集群是否能正常工作
关闭manager2发现集群可正常工作
[root@swarm-manager2 ~]# systemctl stop docker
# 更新服务
[root@swarm-manager1 ~]# docker service update my-nginx
[root@swarm-manager3 ~]# systemctl stop docker
再关闭manager3发现集群不能正常工作
使用nfs挂载卷
nfs部署安装
docker volume create --driver local --opt type=nfs --opt o=addr=192.168.0.8,rw --opt device=:/web yongzhou
docker service create --name nfs-sc-nginx --publish 80:80 --mount type=volume,source=sc_xieyuqi2,destination=/app --replicas 10 nginx
/usr/share/nginx/html -->启动nginx需要去读写的目录
/app 是我们自定义镜像的nginx里的网页存放的目录
/app -->volume-->nfs server