项目名称:基于docker swarm的web(nginx)集群
项目环境:
docker20.10.2
centos8.1.19
nginx1.19.6
服务器数量:5台;配置:2G,1核
项目描述:
实现一个高可用的负载均衡web服务器集群,底层采用swarm管理的docker集群提供web服务,大量使用容器来完成web服务的扩展性,高可用性
项目步骤:
1 设置规划集群拓扑图。
一台 Nginx 负载均衡器,一台 NFS 服务器,其余三台为 swarm 集群中的 web 服务器。规划设计好网段,路由,IP。
1.1 配置虚拟机环境
IP:192.168.80.10 主机名:manager10 担任角色:swarm manager
IP:192.168.80.11 主机名:node11 担任角色:swarm node1
IP:192.168.80.12 主机名:node12 担任角色:swarm node2
IP:192.168.80.13 主机名:nfs-server 担任角色:nfs
IP:ens33:192.168.80.254 主机名:LB 担任角色:load balancer
ens37:192.168.0.120 (不用配置网关,否则内网不知道走哪条默认路由)
[root@sc-LB ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens37
BOOTPROTO=none
NAME=ens3
DEVICE=ens37
ONBOOT=yes
IPADDR=192.168.80.254
NATMASK=255.255.255.0
修改主机名,方便识别辨认
# 192.168.80.10 主机上执行
[root@manager10 ~]# hostnamectl set-hostname manager10
2.使用 nginx 做负载均衡,
使用 nginx 做负载均衡,设置 SNAT 路由转发,实现内网部分的服务器也能上网。
2.1 搭建nginx负载均衡
nginx负载均衡器里的配置
upstream mydownload {
server 192.168.80.10 weight=1;
server 192.168.80.11 weight=1;
server 192.168.80.12 weight=1;
}
server {
listen 80;
server_name www.sc.cn;
location / {
proxy_pass http://mydownload;
}
2.2 设置SNAT路由转发,
在LB服务器上设置SNAT路由转发,使内网的80网段的服务器能上网
[root@LB ~]# cat iptables_snat.sh
#!/bin/bash
echo 1 >/proc/sys/net/ipv4/ip_forward #打开路由功能
iptables -F #清理防火墙规则
iptables -F -t nat
iptables -t nat -A POSTROUTING -s 192.168.80.0/24 -o ens33 -j SNAT --to-source 192.168.0.160
#iptables -t nat -A POSTROUTING -s 192.168.80.0/24 -o ens33 -j MASQUERADE
[root@LB ~]#
记得关闭防火墙
3.后台使用 swarm 管理整个 docker 集群
每个 docker 宿主机启动 10 个容器,总共 30 个容器,用于 提供 web 服务。
3.1 启动docker swarm集群
2)配置hosts文件(可配置可不配置)
[root@manager43 ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.31.43 manager43
192.168.31.188 node188
192.168.31.139 node139
3.2 使用scp复制到node主机
[root@manager43 ~]# scp /etc/hosts root@192.168.31.188:/etc/hosts
[root@manager43 ~]# scp /etc/hosts root@192.168.31.139:/etc/hosts
3)设置防火墙
关闭三台机器上的防火墙。如果开启防火墙,则需要在所有节点的防火墙上依次放行2377/tcp(管理端口)、7946/udp(节点间通信端口)、4789/udp(overlay 网络端口)端口
[root@manager43 ~]# systemctl disable firewalld.service
[root@manager43 ~]# systemctl stop firewalld.service
4) 安装docker并配置加速器(在三台主机都要安装
[root@manager43 ~]# yum -y install docker
[root@node188 ~]# yum -y install docker
[root@node139 ~]# yum -y install docker
5) 创建Swarm集群
[root@manager43 ~]# docker swarm init --advertise-addr 192.168.80.10
Swarm initialized: current node (z2n633mty5py7u9wyl423qnq0) is now a manager.
To add a worker to this swarm, run the following command:
#这就是添加节点的方式(要保存初始化后token,因为在节点加入时要使用token作为通讯的密钥)
docker swarm join --token SWMTKN-1-