文件服务器之:NFS服务器

编程入门 行业动态 更新时间:2024-10-27 07:32:38

文件<a href=https://www.elefans.com/category/jswz/34/1771423.html style=服务器之:NFS服务器"/>

文件服务器之:NFS服务器

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: ":8750,:8750,: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服务器

本文发布于:2023-06-11 23:28:23,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/645241.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:服务器   文件服务器   NFS

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!