Linux 7搭建NFS服务
NFS
network file system,网络文件系统。
一种使用于分散式文件系统的协定,
通过网络让不同的机器、不同的操作系统能够彼此分享个别的数据,
让应用程序在客户端通过网络访问位于服务器磁盘中的数据。
应用场景:常用于高可用文件共享,多台服务器共享同样的数据。
NFS是一个使用SunRPC构造的客户端/服务器应用程序,其客户端通过向一台NFS服务器发送RPC请求来访问其中的文件
提示:在启动NFS SERVER之前,首先要启动RPC服务(即portmap服务,下同)否则NFS SERVER就无法向RPC服务区注册,另外,如果RPC服务重新启动,原来已经注册好的NFS端口数据就会全部丢失。因此此时RPC服务管理的NFS程序也要重新启动以重新向RPC注册。特别注意:一般修改NFS配置文档后,是不需要重启NFS的,直接在命令执行/etc/init.d/nfs reload或exportfs –rv即可使修改的/etc/exports生效。
1、NFS软件安装
在服务器端和客户端都需要安装,nfs-utils : NFS主程序,rpcbind : PRC主程序。
安装:
# yum install -y nfs* portmap
查看安装包:
# rpm -qa | egrep "nfs|rpcbind" rpcbind-0.2.0-16.el6.x86_64 nfs-utils-lib-1.1.5-13.el6.x86_64 nfs4-acl-tools-0.3.3-8.el6.x86_64 nfs-utils-1.2.3-78.el6_10.1.x86_64 nfs-utils-lib-devel-1.1.5-13.el6.x86_64 nfsometer-1.6-1.el6.noarch
2、启动服务
启动NFS服务前需先启动rpcbind服务
# systemctl start rpcbind # systemctl status rpcbind ● rpcbind.service - RPC bind service Loaded: loaded (/usr/lib/systemd/system/rpcbind.service; enabled; vendor preset: enabled) Active: active (running) since Thu 2019-08-22 18:20:03 CST; 15h ago Process: 5792 ExecStart=/sbin/rpcbind -w $RPCBIND_ARGS (code=exited, status=0/SUCCESS) Main PID: 5804 (rpcbind) CGroup: /system.slice/rpcbind.service └─5804 /sbin/rpcbind -w Aug 22 18:19:59 third systemd[1]: Starting RPC bind service... Aug 22 18:20:03 third systemd[1]: Started RPC bind service.
RPC服务启动成功后再启动NFS服务
# systemctl start nfs [root@third ~]# systemctl status nfs ● nfs-server.service - NFS server and services Loaded: loaded (/usr/lib/systemd/system/nfs-server.service; enabled; vendor preset: disabled) Drop-In: /run/systemd/generator/nfs-server.service.d └─order-with-mounts.conf Active: active (exited) since Thu 2019-08-22 18:20:16 CST; 15h ago Process: 6259 ExecStartPost=/bin/sh -c if systemctl -q is-active gssproxy; then systemctl restart gssproxy ; fi (code=exited, status=0/SUCCESS) Process: 6184 ExecStart=/usr/sbin/rpc.nfsd $RPCNFSDARGS (code=exited, status=0/SUCCESS) Process: 6167 ExecStartPre=/usr/sbin/exportfs -r (code=exited, status=0/SUCCESS) Main PID: 6184 (code=exited, status=0/SUCCESS) CGroup: /system.slice/nfs-server.service Aug 22 18:20:13 third systemd[1]: Starting NFS server and services... Aug 22 18:20:16 third systemd[1]: Started NFS server and services.
- 程序使用端口
rpc使用端口111
nfs主端口2049
rpcbind信息使用rpcinfo -p localhost查看 -
# rpcinfo -p 192.168.18.130 program vers proto port service 100000 4 tcp 111 portmapper 100000 3 tcp 111 portmapper 100000 2 tcp 111 portmapper 100000 4 udp 111 portmapper 100000 3 udp 111 portmapper 100000 2 udp 111 portmapper 100005 1 udp 20048 mountd 100005 1 tcp 20048 mountd 100005 2 udp 20048 mountd 100005 2 tcp 20048 mountd 100005 3 udp 20048 mountd 100024 1 udp 33392 status 100024 1 tcp 36127 status 100005 3 tcp 20048 mountd 100003 3 tcp 2049 nfs 100003 4 tcp 2049 nfs 100227 3 tcp 2049 nfs_acl 100003 3 udp 2049 nfs 100003 4 udp 2049 nfs 100227 3 udp 2049 nfs_acl 100021 1 udp 51326 nlockmgr 100021 3 udp 51326 nlockmgr 100021 4 udp 51326 nlockmgr 100021 1 tcp 60595 nlockmgr 100021 3 tcp 60595 nlockmgr 100021 4 tcp 60595 nlockmgr
rpcbind安装后默认是开机自动启动,nfs默认开机重启后不启动,将nfs设置为开机自启。
# systemctl enable nfs Created symlink from /etc/systemd/system/multi-user.target.wants/nfs-server.service to /usr/lib/systemd/system/nfs-server.service
rpcbind 和 nfs 服务都需要开机自启 ,有两种方式:
- chkconfig nfs on 和 chkconfig rpcbind on (使用这种方式需要注意服务启动脚本中启动顺序的编号。)
- 程序运行命令写入/etc/rc.local
3、查看NFS进程
# ps -ef | egrep "rpc|nfs" root 2845 2 0 08:29 ? 00:00:00 [rpciod] root 5781 1 0 08:30 ? 00:00:00 /usr/sbin/rpc.idmapd rpc 5804 1 0 08:30 ? 00:00:00 /sbin/rpcbind -w rpcuser 6131 1 0 08:30 ? 00:00:00 /usr/sbin/rpc.statd root 6165 1 0 08:30 ? 00:00:00 /usr/sbin/rpc.mountd root 6209 2 0 08:30 ? 00:00:00 [nfsd4] root 6212 2 0 08:30 ? 00:00:00 [nfsd4_callbacks] root 6225 2 0 08:30 ? 00:00:00 [nfsd] root 6229 2 0 08:30 ? 00:00:00 [nfsd] root 6231 2 0 08:30 ? 00:00:00 [nfsd] root 6235 2 0 08:30 ? 00:00:00 [nfsd] root 6238 2 0 08:30 ? 00:00:00 [nfsd] root 6240 2 0 08:30 ? 00:00:00 [nfsd] root 6243 2 0 08:30 ? 00:00:00 [nfsd] root 6247 2 0 08:30 ? 00:00:00 [nfsd] root 17788 16381 0 09:58 pts/0 00:00:00 grep -E --color=auto rpc|nfs
rpc.statd 非必要,检查文件一致性,可修复文件
rpc.mountd 挂载和卸载NFS文件系统,包括权限管理
rpc.nfsd 最主要的NFS进程,管理客户端是否可登录
rpc.lockd 非必要,管理文件锁,避免同时写出错
rpc.rquotad 对远程用户提供用户配额信息
portmap:Linux的RPC服务,它响应RPC服务的请求和与请求的RPC服务建立连接。
4、服务配置
nfs主要的配置文件
- /etc/exports 主配置文件
- /usr/sbin/exportfs
- /var/lib/nfs/etab 服务端默认参数
- /usr/sbin/showmount
- /proc/mount 客户端默认参数
主要写 /etc/exports 文件
#[共享目录] [客户端地址1(权限)] [客户端地址2(权限)]
# cat /etc/exports /home/share 192.168.18.0/24(rw,no_root_squash) /home/zhidata 192.168.18.12(rw) /home/upload 192.168.18.0/24(rw,all_squash,anonuid=222,anongid=222) /home/nfs 192.168.18.0/24(ro) *(ro,all_squash)
参数属性
- rw 读写
- ro 只读
- sync 内容同步写入磁盘
- async 内容异步写入磁盘(不要用,会导致数据丢失)
- no_root_squash root用户访问时拥有root权限(一般仅用于无盘系统)
- root_squash root用户访问将权限压缩为nfsnobody
- all_squash 所有用户访问,都会讲权限压缩为nfsnobody
- anonuid,anongid:指定创建的文件的UID和GID。
配置文件加载或重启nfs服务
# systemctl reload nfs
# /usr/sbin/exprotfs -r
#systemctl nfs restart
#systemctl nfs status
使用 showmount -e localhost查看本机的挂载情况
# showmount -e 192.168.18.130 Export list for 192.168.18.130: /home/nfs (everyone) /home/upload 192.168.18.0/24 /home/share 192.168.18.0/24 /home/zhidata 192.168.18.12
查看配置exportfs -v
# exportfs -v /home/zhidata 192.168.18.12(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,root_squash,no_all_squash) /home/share 192.168.18.0/24(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,no_root_squash,no_all_squash) /home/upload 192.168.18.0/24(sync,wdelay,hide,no_subtree_check,anonuid=222,anongid=222,sec=sys,rw,secure,root_squash,all_squash) /home/nfs 192.168.18.0/24(sync,wdelay,hide,no_subtree_check,sec=sys,ro,secure,root_squash,no_all_squash) /home/nfs <world>(sync,wdelay,hide,no_subtree_check,sec=sys,ro,secure,root_squash,all_squash)
5、在客户端挂载文件目录
# mount -t nfs 192.168.18.130:/home/nfs/ /opt/nfs/ # # mount -t nfs 192.168.18.130:/home/upload/ /opt/upload/ # # mount -t nfs 192.168.18.130:/home/share/ /opt/share/ # # mount -t nfs 192.168.18.130:/home/zhidata/ /opt/zhidata/
查看挂载情况 df -h, mount l , cat /etc/mtab , cat /proc/mounts .
# df -h Filesystem Size Used Avail Use% Mounted on /dev/sda2 8.5G 4.5G 3.6G 56% / tmpfs 490M 0 490M 0% /dev/shm /dev/sda1 283M 35M 234M 13% /boot 192.168.18.130:/home/nfs/ 18G 8.2G 9.6G 47% /opt/nfs 192.168.18.130:/home/upload/ 18G 8.2G 9.6G 47% /opt/upload 192.168.18.130:/home/share/ 18G 8.2G 9.6G 47% /opt/share 192.168.18.130:/home/zhidata/ 18G 8.2G 9.6G 47% /opt/zhidata # # mount -l /dev/sda2 on / type ext4 (rw) proc on /proc type proc (rw) sysfs on /sys type sysfs (rw) devpts on /dev/pts type devpts (rw,gid=5,mode=620) tmpfs on /dev/shm type tmpfs (rw,rootcontext="system_u:object_r:tmpfs_t:s0") /dev/sda1 on /boot type ext4 (rw) none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw) vmware-vmblock on /var/run/vmblock-fuse type fuse.vmware-vmblock (rw,nosuid,nodev,default_permissions,allow_other) sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw) 192.168.18.130:/home/nfs/ on /opt/nfs type nfs (rw,vers=4,addr=192.168.18.130,clientaddr=192.168.18.12) 192.168.18.130:/home/upload/ on /opt/upload type nfs (rw,vers=4,addr=192.168.18.130,clientaddr=192.168.18.12) 192.168.18.130:/home/share/ on /opt/share type nfs (rw,vers=4,addr=192.168.18.130,clientaddr=192.168.18.12) 192.168.18.130:/home/zhidata/ on /opt/zhidata type nfs (rw,vers=4,addr=192.168.18.130,clientaddr=192.168.18.12) # # cat /etc/mtab /dev/sda2 / ext4 rw 0 0 proc /proc proc rw 0 0 sysfs /sys sysfs rw 0 0 devpts /dev/pts devpts rw,gid=5,mode=620 0 0 tmpfs /dev/shm tmpfs rw,rootcontext="system_u:object_r:tmpfs_t:s0" 0 0 /dev/sda1 /boot ext4 rw 0 0 none /proc/sys/fs/binfmt_misc binfmt_misc rw 0 0 vmware-vmblock /var/run/vmblock-fuse fuse.vmware-vmblock rw,nosuid,nodev,default_permissions,allow_other 0 0 sunrpc /var/lib/nfs/rpc_pipefs rpc_pipefs rw 0 0 192.168.18.130:/home/nfs/ /opt/nfs nfs rw,vers=4,addr=192.168.18.130,clientaddr=192.168.18.12 0 0 192.168.18.130:/home/upload/ /opt/upload nfs rw,vers=4,addr=192.168.18.130,clientaddr=192.168.18.12 0 0 192.168.18.130:/home/share/ /opt/share nfs rw,vers=4,addr=192.168.18.130,clientaddr=192.168.18.12 0 0 192.168.18.130:/home/zhidata/ /opt/zhidata nfs rw,vers=4,addr=192.168.18.130,clientaddr=192.168.18.12 0 0
将挂载的文件系统设置为开机自启,写入到 /etc/fstab 中
/etc/fstab 每行定义一个要挂载的文件系统
系统重启开机时读取此文件,可以开机自动开启文件中的设置
格式
# cat /etc/fstab # # /etc/fstab # Created by anaconda on Wed Jun 5 07:27:54 2019 # # Accessible filesystems, by reference, are maintained under '/dev/disk' # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info # UUID=297fdfcf-1370-4f48-a438-1053de66c3e4 / ext4 defaults 1 1 UUID=9b94ae5b-20fb-48d6-8d71-084e27292b7f /boot ext4 defaults 1 2 UUID=dcfc754d-cc85-4cb8-aa29-199637061263 swap swap defaults 0 0 tmpfs /dev/shm tmpfs defaults 0 0 devpts /dev/pts devpts gid=5,mode=620 0 0 sysfs /sys sysfs defaults 0 0 proc /proc proc defaults 0 0 192.168.18.130:/home/nfs /opt/nfs nfs defaults 0 0 192.168.18.130:/home/upload /opt/upload nfs defaults 0 0 192.168.18.130:/home/share /opt/share nfs defaults 0 0 192.168.18.130:/home/zhidata /opt/zhidata nfs defaults 0 0
nfs优缺点
优点:
- 简单,容易上手
- nfs数据在文件系统之上,可以看到数据。
- 方便,部署简单、维护简单、可控,且满足使用需求
- 可靠
- 非常稳定。
缺点:
- 存在单点故障
- 在高并发的场合,NFS的效率性能有限(通过架构解决)。
- 基于IP主机名的的认证,安全性一般。
- 数据以明文的方式传输,数据完整性不作验证。
- 多台客户机连接一个nfs,连接维护麻烦。
。