基于docker swarm的web集群

1. 规划网络拓扑图

在这里插入图片描述

2. 准备机器,配置ip和软件安装

1.准备5台centos7.9.2009的虚拟机
2.根据网络拓扑图配置ip地址(注意网络通信)

3. 开启nfs服务

  1. 在NFS虚拟机上下载NFS服务
[root@localhost ~] yum install nfs-utils -y
  1. 开启NFS服务并设置开机启动
[root@localhost ~]  service nfs-server start
Redirecting to /bin/systemctl start nfs-server.service
[root@localhost ~] systemctl enable nfs-server
Created symlink from /etc/systemd/system/multi-user.target.wants/nfs-server.service to /usr/lib/systemd/system/nfs-server.service.

  1. 建立需要挂载的目录并且授权
[root@localhost ~] mkdir /web
[root@localhost ~] chmod 777 /web
[root@localhost ~] ll -d /web
drwxrwxrwx. 2 root root 6 817 15:27 /web

4.更改配置文件,挂载文件夹

[root@localhost ~] cat /etc/exports
/web  192.168.174.0/24(rw,all_squash,sync)
[root@localhost ~] mount   192.168.174.128:/web  /web
让客户机开机的时候自动挂载nfs共享的文件夹
[root@localhost~ web]# echo "mount   192.168.80.13:/web  /web" >>/etc/rc.local 

(docker集群都挂载以保证数据一致)
说明: /etc/exports是nfs默认的配置文件

说明:各项权限的说明:

rw:可读写

ro: 只读

no_root_squash:对root用户不压制,如果客户端以root用户写入,在服务端都映射为服务端的root用户

root_squash: nfs服务:默认情况使用的是相反参数root_squash,如果客户端是用户root操作,会被压制成nobody用户

all_squash: 不管客户端的使用nfs的用户是谁,都会压制成nobody用户

insecure: 允许从客户端过来的非授权访问

sync: 数据同步写入到内存和硬盘

async: 数据先写入内存,不直接写入到硬盘

anonuid: 指定uid的值,此uid必须存在于/etc/passwd中 --》 anonymous

anongid:指定gid的值

 [root@localhost ~]# exportfs -rv
/web  192.168.174.0/24(rw,all_squash,sync)
[root@NFS-SERVER web]

说明:完成设置后,使用exportfs实用程序有选择地导出目录,而无需重新启动NFS服务

说明:exportfs的参数:

-r: Reexport all directories: 重新导出所有目录

-v: verbose,输出详情

[root@localhost ~b] exportfs -v
/web  192.168.174.0/24(rw,all_squash,sync)

4. 安装启动docker swarm集群

  1. 修改主机名
    192.168.174.128 主机上执行
[root@manager1 ~] hostnamectl set-hostname manager1

192.168.174.131 主机上执行

[root@node2 ~] hostnamectl set-hostname node2

192.168.174.129 主机上执行

[root@node3 ~] hostnamectl set-hostname node3
  1. 配置hosts文件(可配置可不配置)
[root@manager1 ~] cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
 
192.168.174.128 manager1
192.168.174.131 node2
192.168.31.129 node3

使用scp复制到node主机

[root@manager1 ~] scp /etc/hosts root@192.168.174.131:/etc/hosts
[root@manager1 ~] scp /etc/hosts root@192.168.174.129:/etc/hosts
  1. 设置防火墙
    关闭三台机器上的防火墙。如果开启防火墙,则需要在所有节点的防火墙上依次放行2377/tcp(管理端口)、7946/udp(节点间通信端口)、4789/udp(overlay 网络端口)端口。
[root@manager1 ~] systemctl disable firewalld.service
[root@manager1 ~] systemctl stop firewalld.service
  1. 安装启动docker(命令依次使用)
yum install -y yum-utils
yum-config-manager     --add-repo     https://download.docker.com/linux/centos/docker-ce.repo
yum install docker-ce docker-ce-cli containerd.io
systemctl start docker
systemctl  enable docke
  1. 创建启动swarm服务
    创建swarm(在manager1上)
[root@manager1 ~] docker swarm init --advertise-addr 192.168.174.128
Swarm initialized: current node (g8hyq7b24dsfy93s6l9mx3c6g) is now a manager.

To add a worker to this swarm, run the following command:

docker swarm join --token SWMTKN-1-5y27v1oaiwrb9jvedcv9hssfxnqjw4mubjkd8vwwmyqdsaumbl-2gy1wvaraly12bko6hhe4qcy1 192.168.174.128:2377

To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

在node2,和node3上输入

docker swarm join --token SWMTKN-1-5y27v1oaiwrb9jvedcv9hssfxnqjw4mubjkd8vwwmyqdsaumbl-2gy1wvaraly12bko6hhe4qcy1 192.168.174.128:2377

创建网络

[root@manager1] docker network create -d overlay nginx_net
kuq50xm3jchwus2a39c00oz2o

使用swarm批量创建容器(同时创建卷并且挂载/web)
注意端口不要被占用

[root@manager1]docker service create -d \
    --name nfs-service \
    --mount 'type=volume,source=nfsvolume,target=/usr/share/nginx/html,volume-driver=local,volume-opt=type=nfs,volume-opt=device=:/web,"volume-opt=o=addr=192.168.174.136,rw,nfsvers=4,async"' \
    --replicas 5  \
    -p 80:80 \
    nginx:latest

实现的功能:
‘type=volume,source=nfsvolume,target=/usr/share/nginx/html,volume-driver=local,volume-opt=type=nfs,volume-opt=device=:/web,“volume-opt=o=addr=192.168.174.136,rw,nfsvers=4,async”’
自动在整个swarm集群的所有的节点(worker和manager)上创建一个卷叫nfsvolume 挂载到192.168.174.136的/web目录下,挂载选项:rw,nfsvers=4,async

5. 配置最前面的负载均衡器

nginx负载均衡器里的配置

  upstream mydownload {
        server  192.168.174.128 weight=1;
        server  192.168.174.131 weight=1;
        server  192.168.174.129 weight=1;
        }

    server {
        listen       80;
        server_name  localhost;
        location / {
            proxy_pass http://myweb1;
        }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值