1、NFS搭建

1.1、server端软件安装(192.168.241.100):
[root@localhost ~]# yum install -y nfs-utils.x86_64 rpcbind.x86_64
1.2、启动rpc服务
[root@localhost ~]# systemctl start rpcbind.service && systemctl enable rpcbind.service
[root@localhost ~]# netstat -lntup |grep rpc
1.3、查看nfs共享内容
[root@localhost ~]# rpcinfo -p localhost
1.4、启动nfs服务
[root@localhost ~]# systemctl start nfs&&systemctl enable nfs
1.5、配置/etc/exports文件
[root@localhost ~]#  vim /etc/exports
/home/fs *(rw,sync)
[root@localhost ~]# systemctl reload nfs
1.6、创建/home/fs,并且修改权限为nfsnobody
[root@localhost ~]# mkdir -p /home/fs
[root@localhost ~]# chown -R nfsnobody.nfsnobody /home/fs

2、客户端安装:同server端安装一样(192.168.241.101)

2.1、客户端创建目录
[root@localhost ~]# mkdir /mnt/fs
2.2、客户端查看服务端共享的内容
[root@localhost ~]# showmount -e 服务器ip
2.3、挂载
[root@localhost ~]# mount -t nfs 192.168.241.100:/home/fs  /mnt/dev

3、连接kubernetes PV/PVC使用

3.1、创建PV/PVC文件配置

vim fspvpvc.yaml

apiVersion: v1
kind: PersistentVolume
metadata:name: fspvnamespace: dev
spec:capacity:storage: 100GiaccessModes: - ReadWriteManypersistentVolumeReclaimPolicy: RetainstorageClassName: nfsnfs:path: /home/fsserver: 192.168.241.100
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: fspvcnamespace: dev
spec:accessModes:- ReadWriteManyresources:requests:storage: 100GistorageClassName: nfs

vim fs.yaml 在Deployment挂载上pvc

apiVersion: v1
kind: ConfigMap
metadata:name: fsnamespace: dev
data:java_opts: '-Xmx4096m -Xms1024m'server_port: '8080'config_uri: "http://config-0.config.esp.svc.cluster.local:8750,http://config-1.config.esp.svc.cluster.local:8750,http://config-2.config.esp.svc.cluster.local:8750"config_profile: testconfig_name: configconfig_password: 123456
---
apiVersion: apps/v1beta1
kind: Deployment
metadata:name: fsnamespace: esp
spec:replicas: 3template:metadata:namespace: devlabels:run: fsspec:containers:- name: fsimage: 仓库ip/test-esp-fsimagePullPolicy: Alwaysports:- containerPort: 8080resources:limits:cpu: "1"memory: 4096Mirequests:cpu: "0.5"memory: 1024Mienv:- name: JAVA_OPTSvalueFrom:configMapKeyRef:name: fskey: java_opts- name: SERVER_IPvalueFrom:fieldRef:fieldPath: status.podIP- name: SERVER_PORTvalueFrom:configMapKeyRef:name: fskey: server_port- name: CONFIG_URIvalueFrom:configMapKeyRef:name: fskey: config_uri- name: CONFIG_PROFILEvalueFrom:configMapKeyRef:name: fskey: config_profile- name: CONFIG_NAMEvalueFrom:configMapKeyRef:name: fskey: config_name- name: CONFIG_PASSWORDvalueFrom:configMapKeyRef:name: fskey: config_passwordvolumeMounts:- mountPath: /etc/localtimename: vol-localtimereadOnly: true- mountPath: /fsname: fsvolumes:- name: vol-localtimehostPath:path: /etc/localtime- name: fspersistentVolumeClaim:claimName: fspvc
---
apiVersion: v1
kind: Service
metadata:name: fsnamespace: dev
spec:type: NodePortselector:run: fsports:- protocol: TCPport: 8081targetPort: 8080nodePort: 30000
3.2、执行生成pv、pvc、fs,进入容器生成文件查看内容。

4、sersync数据实时同步

4.1、server端(192.168.241.101)作为服务端的备份、在客户端上,编辑rsync配置文件

vim /etc/rsyncd.conf

uid = nfsnobody
gid = nfsnobody
use chroot = no
max connections = 36000
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
[backup]
path = /home/fs
ignore errors = yes
read only = false
list = false
auth users = rsync
secrets file = /etc/rsync.pass
4.2、创建虚拟账户
[root@localhost ~]# useradd rsync -s /sbin/nologin -M
4.3、给rsync设置密码
[root@localhost ~]# echo "rsync:rsync" > /etc/rsync.pass
4.4、设置文件所有者读取、写入权限
[root@localhost ~]# chmod 600 /etc/rsync.pass
4.5、启动并设置开机自启动
[root@localhost ~]# systemctl start rsyncd && systemctl enable rsyncd
4.6、创建目录
[root@localhost ~]# mkdir -p /home/fs
4.7、设置权限
[root@localhost ~]# chown -R nfsnobody.nfsnobody /home/fs/

5、在server端配置

5.1、安装inotify-tools
[root@localhost ~]# tar zxf inotify-tools-3.14.tar.gz
[root@localhost ~]# mv inotify-tools-3.14 inotify
[root@localhost ~]# cd inotify
[root@localhost ~]# ./configure —prefix=/usr/local/inotify
[root@localhost ~]# make && make install
5.2、安装sersync
[root@localhost ~]# cd /usr/local
[root@localhost ~]# tar zxf sersync2.5.4_64bit_binary_stable_final.tar.gz
[root@localhost ~]# mv /usr/local/GNU-Linux-x86/ /usr/local/sersync
[root@localhost ~]# cd /usr/local/sersync
[root@localhost ~]# mkdir bin conf log
[root@localhost ~]# mv sersync2 bin/
[root@localhost ~]# mv confxml.xml conf
[root@localhost ~]# echo “rsync” > /usr/local/sersync/user.pass
[root@localhost ~]# chmod 600 /usr/local/sersync/user.pass

vim /usr/local/sersync/conf/confxml.xml

<?xml version="1.0" encoding="ISO-8859-1"?>
<head version="2.5"><host hostip="localhost" port="8008"></host><debug start="false"/><fileSystem xfs="false"/><filter start="false"><exclude expression="(.*)\.svn"></exclude><exclude expression="(.*)\.gz"></exclude><exclude expression="^info/*"></exclude><exclude expression="^static/*"></exclude></filter><inotify><delete start="true"/><createFolder start="true"/><createFile start="false"/><closeWrite start="true"/><moveFrom start="true"/><moveTo start="true"/><attrib start="false"/><modify start="false"/></inotify><sersync><localpath watch="/home/fs"><remote ip="192.168.241.101" name="backup"/><!--<remote ip="192.168.8.39" name="tongbu"/>--><!--<remote ip="192.168.8.40" name="tongbu"/>--></localpath><rsync><commonParams params="-artuz"/><auth start="true" users="rsync" passwordfile="/usr/local/sersync/user.pass"/><userDefinedPort start="false" port="874"/><!-- port=874 --><timeout start="false" time="100"/><!-- timeout=100 --><ssh start="false"/></rsync><failLog path="/usr/local/sersync/log/rsync_fail_log.sh" timeToExecute="60"/><!--default every 60mins execute once--><crontab start="false" schedule="600"><!--600mins--><crontabfilter start="false"><exclude expression="*.php"></exclude><exclude expression="info/*"></exclude></crontabfilter></crontab><plugin start="false" name="command"/></sersync>
</head>
5.3、启动sersync
[root@localhost ~]# /usr/local/sersync/bin/sersync2 -d -r -o /usr/local/sersync/conf/confxml.xml >/usr/local/sersync/log/rsync.log 2>&1 &

6、接来下详细介绍NFS一些规则

6.1、NFS 的由来与其功能

NFS 这个藉由网络分享文件系统的服务在架设的时候是很简单的,不过,它最大的问题在于『权限』方面的概念! 因为在客户端与服务器端可能必须要具备相同的账号才能够存取某些目录或档案。 另外,NFS 的启动需要透过所谓的远程过程调用 (RPC),也就是说,我们并不是只要启动 NFS 就好了, 还需要启动 RPC 这个服务才行
因此,在开始进行 NFS 的设定之前,我们得先来了解一下,什么是 NFS?

6.2、什么是 NFS (Network FileSystem)

NFS 就是 Network FileSystem 的缩写,最早之前是由 Sun 这家公司所发展出来的 (注1)。 它最大的功能就是可以透过网络,让不同的机器、不同的操作系统、可以彼此分享个别的档案 (share files)。所以,你也可以简单的将他看做是一个文件服务器 (file server),这个 NFS 服务器可以让你的 PC 来将网络远程的 NFS 服务器分享的目录,挂载到本地端的机器当中, 在本地端的机器看起来,那个远程主机的目录就好像是自己的一个磁盘分区槽一样 (partition)!

6.3、什么是 RPC (Remote Procedure Call)

RPC 最主要的功能就是在指定每个 NFS 功能所对应的 port number ,并且回报给客户端,让客户端可以连结到正确的埠口上去。 那 RPC 又是如何知道每个 NFS 的埠口呢?这是因为当服务器在启动 NFS 时会随机取用数个埠口,并主动的向 RPC 注册,因此 RPC 可以知道每个埠口对应的 NFS 功能,然后 RPC 又是固定使用 port 111 来监听客户端的需求并回报客户端正确的埠口, 所以当然可以让 NFS 的启动更为轻松

注意,要启动 NFS 之前,RPC 就要先启动了,否则 NFS 会无法向 RPC 注册。 另外,RPC 若重新启动时,原本注册的数据会不见,因此 RPC 重新启动后,它管理的所有服务都需要重新启动来重新向 RPC 注册,无论是客户端还是服务器端,要使用 NFS 时,两者都需要启动 RPC 才行

7、NFS 的软件结构

1、主要配置文件:/etc/exports
2、NFS 文件系统维护指令:/usr/sbin/exportfs
3、分享资源的登录档:/var/lib/nfs/*tab
4、客户端查询服务器分享资源的指令:/usr/sbin/showmount

8、/etc/exports 配置文件的语法与参数

至于 NFS 服务器的架设实在很简单,你只要编辑好主要配置文件 /etc/exports 之后,先启动 rpcbind (若已经启动了,就不要重新启动),然后再启动 nfs ,你的 NFS 就成功了,然后到客户端去检测能否生效!
[root@localhost ~]# vim /etc/exports
/tmp         192.168.100.0/24(ro)   localhost(rw)   *.ev.ncku.edu.tw(ro,sync)
[分享目录]   [第一部主机(权限)]     [可用主机名]    [可用通配符]

9、权限参数介绍

示列1----让 root 保有 root 的权限

将 /tmp 分享出去给大家使用,由于这个目录本来就是大家都可以读写的,因此想让所有的人都可以存取。此外,我要让 root 写入的档案还是具有 root 的权限,那如何设计配置文件?
[root@localhost ~]# vim /etc/exports
# 任何人都可以用我的 /tmp ,用通配符来处理主机名,重点在 no_root_squash
/tmp  *(rw,no_root_squash)

示列2----同一目录针对不同范围开放不同权限

将一个公共的目录 /home/public 公开出去,但是只有限定我的局域网络 192.168.100.0/24 这个网域且加入 vbirdgroup的用户才能够读写,其他来源则只能读取。
[root@localhost ~]# mkdir /home/public
[root@localhost ~]# setfacl -m g:vbirdgroup:rwx /home/public
[root@localhost ~]# vim /etc/exports
/home/public  192.168.100.0/24(rw)    *(ro)

示列3----仅给某个单一主机使用的目录设定

将一个目录 /home/test 开放给 192.168.100.10 这个 Client 端的机器来使用时,该如何设定? 假设使用者的身份是 dmtsai 才具有完整的权限时
[root@localhost ~]#  mkdir /home/test
[root@localhost ~]#  setfacl -m u:dmtsai:rwx /home/test[root@localhost ~]# vim /etc/exports/home/test    192.168.100.10(rw)
# 只要设定 IP 正确即可

示列4----开放匿名登录的情况

让 *.centos.vbird 网域的主机,登入我的 NFS 主机时,可以存取 /home/linux ,但是他们存数据的时候,我希望他们的 UID 与 GID 都变成 45 这个身份的使用者,假设我 NFS 服务器上的 UID 45 与 GID 45 的用户/组名为 nfsanon
[root@localhost ~]# groupadd -g 45 nfsanon
[root@localhost ~]# useradd -u 45 -g nfsanon nfsanon
[root@localhost ~]#  mkdir /home/linux
[root@localhost ~]#  setfacl -m u:nfsanon:rwx /home/linux
[root@localhost ~]#  vim /etc/exports/home/linux   *.centos.vbird(rw,all_squash,anonuid=45,anongid=45)
# 如果要开放匿名,那么重点是 all_squash,并且要配合 anonuid

10、NFS 的安全性

10.1、防火墙的设定问题与解决方案

一般来说, NFS 的服务仅会对内部网域开放,不会对因特网开放的。然而,如果你有特殊需求的话, 那么也可能会跨不同网域就是了。但是,NFS 的防火墙特别难搞,为什么呢?因为除了固定的 port 111, 2049 之外, 还有很多不固定的埠口是由 rpc.mountd, rpc.rquotad 等服务所开启的,所以,你的 iptables 就很难设定规则! 那怎办?难道整个防火墙机制都要取消才可以?

为了解决这个问题, CentOS 6.x 有提供一个固定特定 NFS 服务的埠口配置文件,那就是 /etc/sysconfig/nfs 啦! 你在这个档案里面就能够指定特定的埠口,这样每次启动 nfs 时,相关服务启动的埠口就会固定,如此一来, 我们就能够设定正确的防火墙啰!这个配置文件内容很多,绝大部分的数据你都不要去更改,只要改跟 PORT 这个关键词有关的数据即可。 那么需要更改的 rpc 服务有哪些呢?主要有 mountd, rquotad, nlockmgr 这三个,所以你应该要这样改

[root@localhost ~]# vim /etc/sysconfig/nfs
RQUOTAD_PORT=1001   <==约在 13 行左右
LOCKD_TCPPORT=30001 <==约在 21 行左右
LOCKD_UDPPORT=30001 <==约在 23 行左右
MOUNTD_PORT=1002    <==约在 41 行左右
# 记得设定值最左边的批注服务要拿掉之外,埠口的值你也可以自行决定。
重启nfs
[root@localhost ~]# rpcinfo -p | grep -E '(rquota|mount|nlock)'
10.2、使用 /etc/exports 设定更安全的权限

这就牵涉到你的逻辑思考了!怎么设定都没有关系,但是在『便利』与『安全』之间,要找到你的平衡点吶!善用 root_squash 及 all_squash 等功能,再利用 anonuid 等等的设定来规范登入你主机的用户身份!应该还是有办法提供一个较为安全的 NFS 服务器的
另外,你的 NFS 服务器的文件系统之权限设定也需要很留意! 不要随便设定成为 -rwxrwxrwx

11、NFS 服务器关机前的注意事项

需要注意的是,由于 NFS 使用的这个 RPC 服务,当客户端连上服务器时,那么你的服务器想要关机, 那可就会成为『不可能的任务』!如果你的服务器上面还有客户端在联机,那么你要关机, 可能得要等到数个钟头才能够正常的关机成功

建议你的 NFS Server 想要关机之前,能先『关掉 rpcbind 与 nfs 』这两个东西! 如果无法正确的将这两个 daemons 关掉,那么先以 netstat -utlp 找出 PID ,然后以 kill 将他关掉先!这样才有办法正常的关机成功 这个请特别特别的注意
你也可以利用 showmount -a localhost 来查出来那个客户端还在联机? 或者是查阅 /var/lib/nfs/rmtab 或 xtab 等档案来检查亦可。

12、示列

1、假设服务器的 IP 为 192.168.241.100 这一部
2、/tmp 分享为可擦写,并且不限制使用者身份的方式,分享给所有 192.168.241.0/24 这个网域中的所有计算机
3、/home/nfs 分享的属性为只读,可提供除了网域内的工作站外,向 Internet 亦提供数据内容
4、home/upload 做为 192.168.241.0/24 这个网域的数据上传目录,其中,这个 /home/upload 的使用者及所属群组为 nfs-upload 这个名字,他的 UID 与 GID 均为 210
5、/home/andy 这个目录仅分享给 192.168.241.101 这部主机,以提供该主机上面 andy 这个使用者来使用,也就是说, andy 在 192.168.241.101 及 192.168.241.100 均有账号,且账号均为 andy ,所以预计开放 /home/andy 给 andy 使用他的家目录
12.1、首先,就是要建立 /etc/exports 这个档案的内容
[root@localhost ~]# vim /etc/exports
/tmp         192.168.241.0/24(rw,no_root_squash)
/home/nfs    192.168.241.0/24(ro)  *(ro,all_squash)
/home/upload 192.168.241.0/24(rw,all_squash,anonuid=210,anongid=210)
/home/andy   192.168.241.10(rw)
12.2、建立每个对应的目录的实际 Linux 权限
1、/tmp[root@localhost ~]# ll -d /tmpdrwxrwxrwt. 12 root root 4096 2020--07-27 23:49 /tmp
2、/home/nfs[root@localhost ~]# mkdir -p /home/nfs[root@localhost ~]# chmod 755 -R /home/nfs
# 修改较为严格的档案权限将目录与档案设定成只读!不能写入的状态,会更保险一点!
3、/home/upload[root@localhost ~]# groupadd -g 210 nfs-upload[root@localhost ~]# useradd -g 210 -u 210 -M nfs-upload# 先建立对应的账号与组名及 UID [root@localhost ~]# mkdir -p /home/upload[root@localhost ~]# chown -R nfs-upload:nfs-upload /home/upload# 修改拥有者
4、 /home/andy[root@localhost ~]# useradd andy[root@localhost ~]# ll -d /home/andydrwx------. 4 andy andy 4096 2020-07-28 00:15 /home/andy
12.3、重新启动 nfs 服务
[root@localhost ~]# systemctl restart nfs
12.4、在 192.168.241.101 这部机器上面演练一下
1. 确认远程服务器的可用目录:
[root@clientlinux ~]# showmount -e 192.168.241.100
Export list for 192.168.241.100:
/home/andy   192.168.241.101
/home/upload 192.168.241.0/24
/home/nfs    (everyone)
/tmp         192.168.241.0/242. 建立挂载点:
[root@localhost ~]# mkdir -p /mnt/{tmp,nfs,upload,andy}3. 实际挂载:
[root@localhost ~]# mount -t nfs 192.168.241.100:/tmp         /mnt/tmp
[root@localhost ~]# mount -t nfs 192.168.241.100:/home/nfs    /mnt/nfs
[root@localhost ~]# mount -t nfs 192.168.241.100:/home/upload /mnt/upload
[root@localhost ~]# mount -t nfs 192.168.241.100:/home/andy   /mnt/andy

文件服务器之:NFS服务器相关推荐

  1. 搭建mount服务(NFS服务器、客户端配置)

    准备好两台机器,一台作为客户端,一台作为服务端192.168.94.54 分别安装nfs-utils rpcbind,并开启服务 yum install nfs-utils rpcbind -y sy ...

  2. Linux搭建泰拉瑞亚(原版/模组/插件)服务器之原版服务器

    文章目录 前言 1.准备服务器/配置swap 2.将原版开服需要的文件上传/下载到服务器 3.启动原版服务器 4.后台运行原版服务器 前言 本教程适用于在Linux上搭建泰拉瑞亚原版服务器,如需搭建其 ...

  3. dfs文件服务器高可用,文件服务器之DFS(分布式文件系统)高可用性

    文件服务器是一项很重要的应用,可以做到资源的合理共享. 分布式文件系统(DFS,Distributed File System)是文件服务非常重要的一个功能, DFS使用户更加容易访问和管理物理上跨网 ...

  4. Windows Server 2012 服务器之Web服务器

    今天给大家介绍一下Web服务器,Web服务器,也可以说是IIS服务,是发布网站所必不可少的服务.今天就给大家详细说一说这两个服务. 在介绍之前,先说一下今天的实验环境,本次实验一共需要两台服务器,第一 ...

  5. 服务器_Windows Server 2012 服务器之Web服务器

    今天给大家介绍一下Web服务器,Web服务器,也可以说是IIS服务,是发布网站所必不可少的服务.今天就给大家详细说一说这两个服务. 在介绍之前,先说一下今天的实验环境,本次实验一共需要两台服务器,第一 ...

  6. 废旧手机安装Syncthing作为文件服务器之2-文件同步

    上次说到通过termux用废旧手机做文件服务器,如下文 ss​​​​​​​废旧手机安装Syncthing作为文件服务器_m0_59677938的博客-CSDN博客 最后发现OTG U盘映射不进来,所以 ...

  7. Linux搭建泰拉瑞亚(原版/模组/插件)服务器之1.4模组服务器

    文章目录 前言 1.准备服务器/配置swap 2.将tml1.4开服需要的文件上传/下载到服务器 3.下载dotnet 6.0.0依赖 4.启动tml服务器 5.后台运行tmodloader 1.4 ...

  8. Linux搭建泰拉瑞亚(原版/模组/插件)服务器之1.3模组服务器

    文章目录 前言 1.准备服务器/配置swap 2.将tml1.3开服需要的文件上传/下载到服务器 3.启动tml1.3服务器 4.后台运行tmodloader 1.3 前言 本教程适用于在Linux上 ...

  9. Linux搭建泰拉瑞亚(原版/模组/插件)服务器之(TShock)插件服务器1

    文章目录 前言 1.准备服务器/配置swap 2.将TShock文件上传/下载到服务器 3.启动TShock服务器 4.后台运行TShock 前言 本教程适用于在Linux上搭建泰拉瑞亚TShock插 ...

最新文章

  1. 3ds Max中的V-Ray学习
  2. Label控件属性AssociatedControlID
  3. 《Python数据可视化编程实战》——5.5 用OpenGL制作动画
  4. 老司机给我们解读 Spring Boot 最流行的 16 条实践忠告
  5. KDD 2020 | 理解图表示学习中的负采样
  6. Java数据结构与算法——插入排序
  7. 图的遍历(C语言,邻接表存储的图 - DFS,邻接矩阵存储的图 - BFS)
  8. scala中class与object区别.
  9. Web前端笔记(3)
  10. OC基础--关键字@property 和 @synthesize
  11. 中孚保密检查客户端 完全卸载_中孚计算机终端保密检查工具
  12. python read()读取图片_可以python sitk.ReadImage读取列表/系列图像吗?
  13. 补单平台开发搭建源码_补单系统开发搭建IDEA导入jdk8源码学习(报错解决方案)
  14. 微信小程序中界面常见的交互反馈、用户即时反馈
  15. C语言写的一个简单的计算器
  16. vissim跟驰模型_vissim简介
  17. Linux脚本的制作命令
  18. CentOS 7 安装 libtool 2.4.6
  19. 关于socket数据长度
  20. 第五代TTS语音芯片SYN8086性能再突破

热门文章

  1. yox.js 的使用
  2. matlab模糊控制图怎么导出_4步教你学会使用matlab模糊控制工具箱 | 学步园
  3. 成都学编程哪个学校好
  4. 在金融公司做 IT 是什么感觉?
  5. JAVAEE容器如何管理EntityManager和PersistenceContext
  6. php后门工具_教你识别简单的免查杀PHP后门
  7. 动态规划特训:贝茜的晨练(多状态转移)
  8. python DEA: 基于非径向距离NDDF的Malmquist-Luenberger 指数及其分解
  9. json进阶---jackson底层之JsonParser理解使用(springboot多结构参数的映射方法的实现思路)
  10. InnoSetup制作补丁包替换文件操作