Skip to content

ishells/docker-swarm-ha-web

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

27 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

详细搭建步骤可见博客

docker-swarm-ha-web

一个基于docker swarm的简单高可用web集群

一、简单高可用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、目录结构

image

三、集群搭建准备:

3.1 集群拓扑

image.png

3.2 二进制安装docker( 可使用yum 安装docker )

docker下载地址

3.2.1 manager1节点

① manager1解压二进制包

image.png

② 设置systemed管理

image.png

③ 启动并开机自启

image.png

3.2.2 manager2节点

① manager2解压安装包

image.png

② 设置systemed管理

image.png

③ 启动并开机自启

image.png

3.2.3 manager3节点

① manager3节点解压二进制包

image.png

② 设置systemd管理并开机自启

image.png

3.2.4 node1节点

① node1节点解压

image.png

② 设置systemd管理

image.png

3.3 搭建私有镜像仓库:

① docker pull registry拉取registry镜像仓库

image.png

② 启动镜像容器并挂载本地目录

默认情况下,会将仓库存放于容器内的/var/lib/registry目录下,这样如果容器被删除,则存放于容器中的镜像也会丢失,所以我们一般情况下会指定本地一个目录

image.png

3.4 集群初始化

① 获取worker节点加入的token

image.png

② 获取manager节点加入的token

image.png

③ manager节点加入

image.png

image.png

④ woker节点加入

image.png

image.png

⑤ 查看集群状态

image.png

3.5 自制镜像php、nginx

3.5.1 制作一个centos7基础镜像

① 编写Dockerfile文件

image.png

② 构建基础镜像

image.png

③ 查看镜像

image.png

3.5.2 创建nginx镜像并上传到私有仓库

① 查看目录结构

image.png

② 构建镜像

image.png

③ push镜像到私有仓库

image.png

3.5.3 创建php镜像并上传到私有仓库

需要的文件Dockerfile(php)、php-7.2.3.tar.gz、php-fpm、php.ini、www.conf、Dokerfile的FROM标签需要改为centos:v1,否则centos8编译会报错 ① 构建php镜像

image.png

② push镜像到私有仓库

image.png

③ 查看私有仓库的镜像

image.png

3.6 创建一个overlay网络

① 查看创建的overlay网络

image.png

四、部署服务

4.1 创建mysql服务

① 创建mysql配置文件

image.png

配置文件

image.png

② 创建mysql服务

image.png

③ 查看mysql服务信息

image.png

④ 登入mysql查看配置信息( 物理机如果安装的有mysql,可以通过-h 容器IP登入mysql的容器,在配置文件中设置过 )

image.png

查看信息

image.png

⑤ 在manager1节点上查看持久化数据

image.png

4.2 节点pull镜像

manager1、manager2、manager3、node1、node2节点分别将私有仓库中的镜像pull下来以便创建服务

① manager2节点pull镜像

image.png

② manager3节点pull镜像

image.png

③ node1节点pull镜像

image.png

④ node2节点pull镜像

image.png

4.3 创建php服务

① 创建php服务

image.png

② 查看服务

image.png

4.4 创建nfs共享存储

① 创建目录、修改nfs配置

image.png

配置文件

image.png

② manager1节点启动nfs

image.png

③ 其他worker点安装nfs、启动、尝试挂载

manager2节点

image.png

manager3节点

image.png

node1节点

image.png

被挂载点添加文件

image.png

manager2挂载点测试

image.png

node1挂载点测试

image.png

node2挂载点测试

image.png

4.5 创建nginx服务

① 创建nginx服务

image.png

② 查看服务

image.png

③ 在nfs存储中添加一个nginx配置文件

image.png

④ 所有运行nginx节点的nginx容器需要reload

manager3节点

image.png

node1节点

image.png

node2节点

image.png

⑤ 访问测试

manager1节点测试

image.png

manager3节点测试

image.png

4.6 部署wordpress

① 查看wwwroot数据卷

image.png

② 下载WordPress压缩包,放置网站文件(所有节点操作),并将文件解压到wwwroot对应的文件夹中

manager1放置网站文件

image.png

manager3节点

image.png

4.7 wordpress部署

① 访问url

image.png

② 输入账户密码

image.png

4.8 高可用负载均衡调度器nginx + keepalived部署

① 安装nginx、keepalived软件包

image.png

image.png

② nginx配置文件(主备一样)

image.png

③ keepalived配置文件(Nginx Master)

image.png

④ keepalived配置文件(Nginx Backup)

image.png

⑤ nginx状态脚本(master)

image.png

# chmod + x /etc/keepalived/check_nginx.sh

⑥ nginx状态脚本(slave)

image.png

# chmod + x /etc/keepalived/check_nginx.sh

⑦ 分别启动软件并设置开机自启

image.png

image.png

⑧ 查看keepalived工作状态

image.png

⑨ VIP访问测试

image.png

五、集群高可用测试

5.1 节点的高可用测试

① 模拟leader manager节点的宕机

image.png

② 查看是否产生新的leader

manager2节点成为新的leader

image.png

5.2 service的高可用测试

① 杀掉mysql的一个副本

image.png

② 很快又生成一个新的mysql容器

image.png

③ 通过scale动态扩容副本数量

image.png

5.3 web高可用测试

① 所有节点都可访问web服务

manager1节点

image.png

manager2节点

image.png

manager3节点

image.png

node1节点

image.png

node2节点

image.png

5.3 负载调度器高可用测试

① 通过VIP可以正常访问服务

image.png

② 模拟master调度器宕机

image.png

③ 查看VIP平滑过渡到slave节点

image.png

④ 再次查看VIP是否仍然可访问

VIP仍然正常访问

image.png

About

一个基于docker swarm的简单高可用web集群

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published