目录

1、Swarm中使用Volume和NFS服务

1.1、为什么需要nfs服务器?nfs是什么?nfs解决了什么问题?

2、布置一台nfs服务器

2.1、客户机上能否有写的权限要看两种权限

2.2、sync(同步)和async(异步)

2.3、如果我们在启动了NFS之后又修改了/etc/exports,是不是还要重新启动nfs呢?

2.4、实现开机自动挂载

2.5、Create a service which creates an NFS volume(创建NFS卷的服务)

Share data among machines(在机器之间数据共享)

3、负载均衡(load balancing)

3.1、为什么需要负载均衡?

3.2、安装负载均衡

3.2.1、利用脚本编译安装

3.2.2、配置nginx里的负载均衡功能

3.3、负载均衡的方法


注意:本文中使用的机器都是上个文章中提到的,若是想要了解可以看这篇文章

[docker]十、docker swarm是什么?以及创建docker swarm_FanMY_71的博客-CSDN博客

1、Swarm中使用Volume和NFS服务

目的:随便访问任何一台节点服务器上的web服务,看到的页面都是一样的,即满足volume被swarm里的service使用。所有的节点服务器都到同一台文件服务器上拿网页数据就可以了。

这台文件服务器就是nfs服务,另外这台机器里也需要安装docker

1.1、为什么需要nfs服务器?nfs是什么?nfs解决了什么问题?

廉价的解决方法:nfs;有钱的解决方法:san。

1.2、san

1.2.1、san和nfs比较

nfs配置:

  1. 随便一台linux机器,安装nfs服务,就可以进行共享;对磁盘啊、cpu、内存等要求极低
  2. 使用的是传统的tcp/ip网络
  3. 磁盘的性能不是特别的好,没有定制,也没有raid(磁盘阵列),所以磁盘坏了整个服务就G了

现在企业中都不适用nfs,因为nfs很网络不稳定容易丢失数据。

san配置:

  • 通过光纤存储网络,速度快,一次性写入的数据多,容量大
  • 专业的存储服务器
  • HBA卡插到业务服务器上

1.2.2、为什么要使用nfs?不用其他的东西

用nfs主要是为了模拟企业里,所有的服务器到一台集中存放数据的服务器拿数据。nfs是最简单而且廉价的解决方案。不是不想用别的比如san,但是负担不起。

1.3、NAS

NAS(Network Attached Storage)网络存储基于标准网络协议实现数据传输,为网络中的Windows / Linux / Mac OS 等各种不同操作系统的计算机提供文件共享和数据备份。

介于nfs和san之间的设备

  • 需要专业的存储设备
  • 使用传统的tcp/ip网络
  • 其他的电脑/手机/pad等设备都是可以使用的

1.4、若是不用nfs,你还可以使用那些方法

  • 可以使用云存储
  • 可以使用第三方插件  Use Docker Engine plugins | Docker Documentation

2、布置一台nfs服务器

IP:192.168.29.30 主机名:nfs-server 担任角色:nfs server

IP:192.168.29.137 主机名:manager或者nginx-kafka01 担任角色:swarm manager

IP:192.168.29.139 主机名:woker138 担任角色:swarm node1

IP:192.168.29.140 主机名:woker140 担任角色:swarm node2

IP:192.168.29.99 主机名:load-balancer 担任角色:负载均衡

第一步:安装nfs的相关软件

[root@nfs-service ~]# yum install nfs-utils -y  # 这个步骤在所有需要用nfs服务的机器都要安装,但是下面的操作只需要在作为nfs服务的机器上操作就行

第二步:启动nfs-servcer服务

[root@nfs-service ~]# service nfs-server start
Redirecting to /bin/systemctl start nfs-server.service
[root@nfs-service ~]# ps aux|grep nfs
root       2980  0.0  0.0      0     0 ?        S<   17:12   0:00 [nfsd4_callbacks]
root       2986  0.0  0.0      0     0 ?        S    17:12   0:00 [nfsd]
root       2987  0.0  0.0      0     0 ?        S    17:12   0:00 [nfsd]
root       2988  0.0  0.0      0     0 ?        S    17:12   0:00 [nfsd]
root       2989  0.0  0.0      0     0 ?        S    17:12   0:00 [nfsd]
root       2990  0.0  0.0      0     0 ?        S    17:12   0:00 [nfsd]
root       2991  0.0  0.0      0     0 ?        S    17:12   0:00 [nfsd]
root       2992  0.0  0.0      0     0 ?        S    17:12   0:00 [nfsd]
root       2993  0.0  0.0      0     0 ?        S    17:12   0:00 [nfsd]
root       3005  0.0  0.0 112824   988 pts/0    S+   17:13   0:00 grep --color=auto nfs

第三步:编辑/etc/exports文件

# 限制挂载文件的权限
[root@nfs-service web]# cat /etc/exports
/web 192.168.29.0/24(ro,all_squash,sync)
/download 192.168.29.137/24(rw,all_squash,sync)
[root@nfs-service ~]# mkdir /web
[root@nfs-service web]# ls
fan.gif  index.html  myself.jpg  study.html# 往index.html输入东西能让你觉得这个网页改变了就行

2.1、客户机上能否有写的权限要看两种权限

  • 共享权限。如/etc/exports文件里的权限,例如ro、rw
  • 文件系统里的权限。/web在linux里的权限。远程客户端连接nsf服务器是通过nfsnobody这个用户连接过来的,所以需要给/web授予相应的权限以及将文件改为nfsnobody所属。

第三步:修改/web和/download文件的权限

[root@nfs-service ~]# ll -d /web /download/
drwxr-xr-x. 3 nfsnobody nfsnobody 37 4月  30 16:59 /download/
drwxr-xr-x. 2 nfsnobody nfsnobody 75 5月   1 17:47 /web[root@nfs-service web]# exportfs -rv  # 刷新输出文件的列表,并输出详细信息

2.2、sync(同步)和async(异步)

sync:当容器往宿主机里文件写东西,会同时往另一台机器的内存和硬盘中写入。这样保证了数据的不丢失。

async:当容器往宿主机里文件写东西,要等到宿主机里的cache缓存满了之后,才会往另一台机器的内存和硬盘中写入。

第四步:建议关闭防火墙和selinux

[root@nfs-server download]# service firewalld stop
Redirecting to /bin/systemctl stop firewalld.service
[root@nfs-server download]# systemctl disable firewalld
[root@nfs-server download]# getenforce
Disabled

第五步: 在客户机上挂载nfs服务共享的/web和/download目录,manger和woker都要挂载

# 安装nfs-tils软件,方便客户机上挂载,具有了相关命令,例如:showmount
[root@worker138 ~]# yum install nfs-utils -y
# 查看nfs服务器上共享输出了哪些文件夹
[root@worker138 ~]# showmount -e 192.168.29.30
Export list for 192.168.29.30:
/download 192.168.29.140/24
/web      192.168.29.0/24

[挂载nfs服务器上的目录到本机上]

注意:因为是copy出来的服务器,所以文件内容都是一样的,我们要把除了nfs服务的机器以外的里的/web和/download清空。但是想要本机的/web或者/download文件夹必须存在,或者你用其他的文件夹接收挂载的文件也行。

[root@worker140 web]# mount 192.168.29.30:/web   /web
[root@worker140 web]# mount 192.168.29.30:/download   /download
[root@worker140 web]# df -Th |grep nfs4
192.168.29.30:/web      nfs4       17G  8.1G  9.0G   48% /web
192.168.29.30:/download nfs4       17G  8.1G  9.0G   48% /download
# 若是在/web文件中挂载之后,要退出再进入之后才会显示挂载的内容
[root@worker140 web]# cd ..
[root@worker140 /]# cd -
/web
[root@worker140 web]# ls
fan.gif  index.html  myself.jpg  study.html

注意:所有的docker宿主机都要挂载nfs服务器的/web和/download

[取消挂载]

取消挂载要在不是那个文件夹中取消。例如,我们现在要取消挂载/web

[root@worker138 /]# df -Th|grep web
192.168.29.30:/web      nfs4       17G  8.1G  9.0G   48% /web
[root@worker138 web]# cd /  # 可以是除了/web的任何文件
[root@worker138 /]# umount /web
[root@worker138 /]# df -Th|grep web

2.3、如果我们在启动了NFS之后又修改了/etc/exports,是不是还要重新启动nfs呢?

这个时候我们就可以用exportfs 命令来使改动立刻生效,该命令格式如下:

# exportfs [-aruv]

-a 全部挂载或卸载 /etc/exports中的内容

-r 重新读取/etc/exports 中的信息 ,并同步更新/etc/exports、/var/lib/nfs/xtab

-u 卸载单一目录(和-a一起使用为卸载所有/etc/exports文件中的目录)

-v 在export的时候,将详细的信息输出到屏幕上。

具体例子:

# exportfs -au 卸载所有共享目录

# exportfs -rv 重新共享所有目录并输出详细信息

[root@worker140 web]# mkdir ww   # 这是因为挂载的时候,对/etc/exports里的文件做出权限的限制
mkdir: 无法创建目录"ww": 只读文件系统
[root@worker140 download]# mkdir hello
[root@worker140 download]# ls
hello

2.4、实现开机自动挂载

第一种方法:修改/etc/rc.local文件

在文件中加入"mount 192.168.29.30:/web /web"

第二种方法:修改/etc/fstab文件

/etc/fstab是linux系统开机会自动根据这个文件里的内容挂载磁盘分区

加入"192.168.29.30:/web  /web  nfs  defaults 0 0"这行代码

192.168.29.30:/web 是挂载的分区,nfs的文件系统;后边这个/web是本地的挂载点;defaults,是挂载选项,使用默认;0,是否支持dump命令进行备份;0,是否开机的时候进行分区的文件系统的检查,分区的文件系统是否有问题

推荐使用第二种方法

2.5、Create a service which creates an NFS volume(创建NFS卷的服务)

NFSv3型

$ docker service create -d \--name nfs-service \--mount 'type=volume,source=nfsvolume,target=/app,volume-driver=local,volume-opt=type=nfs,volume-opt=device=:/var/docker-nfs,volume-opt=o=addr=10.0.0.10' \nginx:latest

NFSv4型

# 这个命令要在manager里边执行,-d,放在后台执行,建议不要放在后台执行
$ docker service create -d \--name nfs-service \--mount 'type=volume,source=nfsvolume,target=/app,volume-driver=local,volume-opt=type=nfs,volume-opt=device=:/var/docker-nfs,"volume-opt=o=addr=10.0.0.10,rw,nfsvers=4,async"' \--replicas  10  -p 8089:80  nginx:latest"""
--name,指定名字
source=nfsvolume  docker宿主机上的卷的名字,若是没有可以自己创建,按自己的修改。另外这个卷名字只能使用一次
/app  容器里存放网页的目录,按自己的修改
volume-driver=local  访问本地的某个目录
volume-opt=type=nfs  volume对nfs的支持选项
volume-opt=device=:/var/docker-nfs  是nfs服务器共享的目录
volume-opt=o=addr=10.0.0.10,rw,nfsvers=4,async  挂载具体的nfs服务器的IP地址和选项
--replicas  10  副本数量
-p  8089:90 映射端口
"""
# 我执行的代码
[root@manager _data]# docker service create       --name fan-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.29.30,rw,nfsvers=4,async"'     --replicas 10 -p 8089:80 nginx:latest
udx5rhb9uy89n1j3vibj9x4j8
[root@manager _data]# docker volume inspect nfsvolume
[{"CreatedAt": "2022-05-01T17:43:06+08:00","Driver": "local","Labels": {},"Mountpoint": "/var/lib/docker/volumes/nfsvolume/_data","Name": "nfsvolume","Options": {"device": ":/web","o": "addr=192.168.29.30,rw,nfsvers=4,async","type": "nfs"},"Scope": "local"}
]
[root@manager ~]# cd /var/lib/docker/volumes/nfsvolume/_data
[root@manager _data]# ls
fan.gif  index.html  myself.jpg  study.html

[查看在运行的容器]

[root@manager ~]# docker service ps fan-service
ID             NAME             IMAGE          NODE          DESIRED STATE   CURRENT STATE            ERROR
vvb9sgkpz1wy   fan-service.1    nginx:latest   nfs-service   Running         Running 26 seconds ago
5woz1nvox22l   fan-service.2    nginx:latest   worker138     Running         Running 24 seconds ago
q8mdxskerc30   fan-service.3    nginx:latest   manager       Running         Running 27 seconds ago
5exfmv4lndfl   fan-service.4    nginx:latest   worker138     Running         Running 24 seconds ago
u930lx73v6g1   fan-service.5    nginx:latest   nfs-service   Running         Running 26 seconds ago
9w4o6xqi1rry   fan-service.6    nginx:latest   manager       Running         Running 27 seconds ago
nex07xqefokt   fan-service.7    nginx:latest   nfs-service   Running         Running 26 seconds ago
y74k2dr0n6t2   fan-service.8    nginx:latest   worker138     Running         Running 24 seconds ago
zi74iqx5zrfp   fan-service.9    nginx:latest   manager       Running         Running 27 seconds ago
r1o4b32cx46a   fan-service.10   nginx:latest   worker138     Running         Running 24 seconds ago  

[查看挂载是否成功]

我们在manager和这些node中使用以下命令

[root@worker140 ~]# docker volume inspect nfsvolume1
[{"CreatedAt": "2022-07-14T21:24:03+08:00","Driver": "local","Labels": {},"Mountpoint": "/var/lib/docker/volumes/nfsvolume1/_data","Name": "nfsvolume1","Options": {"device": ":/web","o": "addr=192.168.29.30,rw,nfsvers=4,async","type": "nfs"},"Scope": "local"}
]

Share data among machines(在机器之间数据共享)

参考官方文献: ​​​​​Use volumes | Docker Documentation

3、NFS的使用方法

IP:192.168.29.30 主机名:nfs-server 担任角色:nfs server

IP:192.168.29.137 主机名:manager或者nginx-kafka01 担任角色:swarm manager

IP:192.168.29.139 主机名:woker138 担任角色:swarm node1

IP:192.168.29.140 主机名:woker140 担任角色:swarm node2

IP:192.168.29.99 主机名:load-balancer 担任角色:负载均衡

3.1、方法一:使用nfs-server

步骤一到五和第2节点的一致,

6、使用通过nfs服务共享的文件

命令:docker service create       --name fan-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.29.30,rw,nfsvers=4,async"'     --replicas 10 -p 8089:80 nginx:latest

source=nfsvolume  --> docker宿主机上的卷的名字

/usr/share/nginx/html -->容器里存放网页的目录

volume-driver=local  --> 访问本地的某个目录的

volume-opt=type=nfs  --> volume对nfs的支持选项

volume-opt=device=:/web --> 是nfs服务器共享目录

volume-opt=o=addr=192.168.29.30,rw,nfsvers=4,async  挂载具体的nfs服务器的ip地址和选项

--replicas 10  副本的数量

nfsvers=4 --> nfs版本

async  --> 异步

[root@ngingx-kafka01 ~]# docker service ps fan-service1
ID             NAME              IMAGE          NODE             DESIRED STATE   CURRENT STATE           ERROR     PORTS
uh3vxlsj33pa   fan-service1.1    nginx:latest   ngingx-kafka01   Running         Running 2 minutes ago
4rmusskjajju   fan-service1.2    nginx:latest   ngingx-kafka01   Running         Running 2 minutes ago
ly9iuhmhpeyr   fan-service1.3    nginx:latest   worker138        Running         Running 2 minutes ago
6yhr443w7ivz   fan-service1.4    nginx:latest   worker140        Running         Running 2 minutes ago
m6njajnw2hn0   fan-service1.5    nginx:latest   ngingx-kafka01   Running         Running 2 minutes ago
jr44r7bv2oki   fan-service1.6    nginx:latest   worker140        Running         Running 2 minutes ago
satc1bctpaws   fan-service1.7    nginx:latest   worker138        Running         Running 2 minutes ago
vrlnftc82kl9   fan-service1.8    nginx:latest   worker140        Running         Running 2 minutes ago
c1lekcy6kunf   fan-service1.9    nginx:latest   worker138        Running         Running 2 minutes ago
kgox1h6hcniy   fan-service1.10   nginx:latest   worker138        Running         Running 2 minutes ago    

3.2、方法二:使用sshfg共享文件

步骤一到五和第2节点的一致,

6、客户机安装sshfs

yum install sshfs -y

7、挂载nfs-server共享文件

mkdir /download

sshfs root@192.168.29.30:/download /download

mkdir /web

sshfs root@192.168.29.30:/web /web

[docker]十一、docker nfs服务相关推荐

  1. 【深度学习】基于深度学习的linux服务器,需要搭建哪些服务,一步步搭建深度学习的环境,cuda,pytorch,opencv,ftp服务, nfs服务 docker等等

    来来回回的安装服务器,是时间写个pipline了,在这里主要记录下生产环境下的一台基于深度学习的linux服务器,需要搭建那些服务 文章目录 前言 一.开工 1.1 切换yum源 1.2 minico ...

  2. Docker - NFS服务 - 多机器数据共享 - NAS和SAN

    目录 安装nfs服务 1.安装软件包 2.启动服务,设置开机自启 3.查看rpcbind的端口 --port 111(需要在rpcbind服务开启的状态下看得到) 4.创建共享文件 5.编辑/etc/ ...

  3. 微服架构基础设施环境平台搭建 -(二)Docker私有仓库Harbor服务搭建

    微服架构基础设施环境平台搭建 -(二)Docker私有仓库Harbor服务搭建 通过采用微服相关架构构建一套以Kubernetes+Docker为自动化运维基础平台,以微服务为服务中心,在此基础之上构 ...

  4. Docker(二十一)--Docker k8s--Kubernetes存储--Volumes配置管理--持久卷--动态静态分配

    目录 1. 简介 2. NFS PV示例(静态分配) 2.1.保证环境的干净 2.2 创建所需资源 2.3 书写pv,pvc,pod文件并进行测试 2.3.1 创建pv 2.3.2 创建pvc和pod ...

  5. Docker Swarm使用NFS作为共享存储

    Docker Swarm是轻量级的Docker集群解决方案.实现swarm集群应用数据持久化的一种方法是使用NFS共享存储. 搭建NFS步骤 所有节点安装NFS sudo yum -y install ...

  6. docker网络问题解决办法“大全”:关于宿主机访问不了docker容器中web服务,或者容器内访问不了外网的问题的解决办法

    docker网络问题解决办法"大全":关于宿主机访问不了docker容器中web服务,或者容器内访问不了外网的问题的解决办法 参考文章: (1)docker网络问题解决办法&quo ...

  7. 基于docker部署的微服务架构(九): 分布式服务追踪 Spring Cloud Sleuth

    为什么80%的码农都做不了架构师?>>>    前言 微服务架构中完成一项功能经常会在多个服务之间远程调用(RPC),形成调用链.每个服务节点可能在不同的机器上甚至是不同的集群上,需 ...

  8. Docker笔记:常用服务安装——Nginx、MySql、Redis(转载)

    转载地址:https://www.cnblogs.com/spec-dog/p/11320513.html 开发中经常需要安装一些常用的服务软件,如Nginx.MySql.Redis等,如果按照普通的 ...

  9. SpringCloud学习成长之 十一 Docker部署cloud项目

    一.docker简介 Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的.可移植的.自给自足的容器.开发者在笔记本上编译测试通过的容器可以批量地在生产环境中部署,包括VMs(虚拟机). ...

最新文章

  1. 关于一个无限分类的多选,单选相关的控件
  2. Juniper EX3400堆叠配置 + 链路捆绑配置
  3. 百度地图API公交检索示例 - 标绘结果路线、返回结果集
  4. 黑马程序员pink老师前端入门教程,零基础必看的JavaScript基础语法视频教程(一)
  5. 两人团队项目-石家庄地铁查询系统(web版)
  6. 【英语学习】【WOTD】disparage 释义/词源/示例
  7. Oracle中并行parallel用法
  8. Windows中ElasticSearch的备份和还原
  9. php 中正则表达式详解
  10. Lucene.Net+盘古分词器(详细介绍)
  11. JAVA工具类-根据身份证进行性别和年龄计算
  12. 单片机中动态数码管闪烁问题
  13. 阿里P10赵海平跳槽字节跳动:深度解析跳槽从开始到结束完整流程!
  14. matlab点符号怎么打出来的,在matlab中怎么输入特殊符号
  15. 前端面试题汇总CSS篇
  16. 什么叫视听思维,如何训练视听思维?(周传基)
  17. 嵌套列表与列表推导式
  18. 产品体验营销或成广告业主们的新选择
  19. ibdp课程体系中要选择经济课吗?
  20. nginx: [emerg] unknown directive ssl  Nginx配置SSL报错

热门文章

  1. 2023-01-01 第 326 场周赛
  2. android登录系统论文,基于Android的物业管理信息系统的设计与实现.docx
  3. Python爬虫实现抓取腾讯视频所有电影-源码【实战必学】
  4. 飞机大战——Java小游戏
  5. 游戏心得:解决在win7下不能安装apploc.msi(applocale)
  6. c语言程序综合实习学生成绩,C语言程序设计综合实习报告-资源下载人人文库网...
  7. unicode--乱码转换
  8. 江门分销官网开发日记:wordpress检测后端标题并且避免重复标题
  9. 联盟广告对中小站长来说就是个坑
  10. PotPlayer播放器播放MKV格式视频没有声音