一个基于docker swarm的简单高可用web集群
1、3个master节点,2个work节点,2个负载均衡节点,数据库集群(没有尝试搭建数据库集群)
2、如上结构,在manager1节点创建私人仓库registry,镜像持久化存储 manager1节点初始化集群,其他节点加入集群,将lnmp的镜像push到私人仓库,然后各个节点pull各种镜像,在master节点上创建某一种服务将会引导工作节点创建对应的容器,容器也会平均分配到每一个work节点。
3、集群工作节点的web服务自身就具有高可用性,访问不同节点的ip都能访问到相同的服务,副本数量可控,manager leader节点宕机会推选出新的leader,然后在添加2个keeplived + nginx 负载均衡实现VIP访问web服务,负载均衡调度其高可用,master节点宕机可平规过渡VIP.
1、目录结构
① manager1解压二进制包
② 设置systemed管理
③ 启动并开机自启
① manager2解压安装包
② 设置systemed管理
③ 启动并开机自启
① manager3节点解压二进制包
② 设置systemd管理并开机自启
① node1节点解压
② 设置systemd管理
① docker pull registry拉取registry镜像仓库
② 启动镜像容器并挂载本地目录
默认情况下,会将仓库存放于容器内的/var/lib/registry目录下,这样如果容器被删除,则存放于容器中的镜像也会丢失,所以我们一般情况下会指定本地一个目录
① 获取worker节点加入的token
② 获取manager节点加入的token
③ manager节点加入
④ woker节点加入
⑤ 查看集群状态
① 编写Dockerfile文件
② 构建基础镜像
③ 查看镜像
① 查看目录结构
② 构建镜像
③ push镜像到私有仓库
需要的文件Dockerfile(php)、php-7.2.3.tar.gz、php-fpm、php.ini、www.conf、Dokerfile的FROM标签需要改为centos:v1,否则centos8编译会报错 ① 构建php镜像
② push镜像到私有仓库
③ 查看私有仓库的镜像
① 查看创建的overlay网络
① 创建mysql配置文件
配置文件
② 创建mysql服务
③ 查看mysql服务信息
④ 登入mysql查看配置信息( 物理机如果安装的有mysql,可以通过-h 容器IP登入mysql的容器,在配置文件中设置过 )
查看信息
⑤ 在manager1节点上查看持久化数据
manager1、manager2、manager3、node1、node2节点分别将私有仓库中的镜像pull下来以便创建服务
① manager2节点pull镜像
② manager3节点pull镜像
③ node1节点pull镜像
④ node2节点pull镜像
① 创建php服务
② 查看服务
① 创建目录、修改nfs配置
配置文件
② manager1节点启动nfs
③ 其他worker点安装nfs、启动、尝试挂载
manager2节点
manager3节点
node1节点
被挂载点添加文件
manager2挂载点测试
node1挂载点测试
node2挂载点测试
① 创建nginx服务
② 查看服务
③ 在nfs存储中添加一个nginx配置文件
④ 所有运行nginx节点的nginx容器需要reload
manager3节点
node1节点
node2节点
⑤ 访问测试
manager1节点测试
manager3节点测试
① 查看wwwroot数据卷
② 下载WordPress压缩包,放置网站文件(所有节点操作),并将文件解压到wwwroot对应的文件夹中
manager1放置网站文件
manager3节点
① 访问url
② 输入账户密码
① 安装nginx、keepalived软件包
② nginx配置文件(主备一样)
③ keepalived配置文件(Nginx Master)
④ keepalived配置文件(Nginx Backup)
⑤ nginx状态脚本(master)
# chmod + x /etc/keepalived/check_nginx.sh
⑥ nginx状态脚本(slave)
# chmod + x /etc/keepalived/check_nginx.sh
⑦ 分别启动软件并设置开机自启
⑧ 查看keepalived工作状态
⑨ VIP访问测试
① 模拟leader manager节点的宕机
② 查看是否产生新的leader
manager2节点成为新的leader
① 杀掉mysql的一个副本
② 很快又生成一个新的mysql容器
③ 通过scale动态扩容副本数量
① 所有节点都可访问web服务
manager1节点
manager2节点
manager3节点
node1节点
node2节点
① 通过VIP可以正常访问服务
② 模拟master调度器宕机
③ 查看VIP平滑过渡到slave节点
④ 再次查看VIP是否仍然可访问
VIP仍然正常访问