目录
一、NFS的工作原理
二、NFS安装与检查
三、服务端安装配置(192.168.65.201)
四、Linux客户端挂载配置(192.168.65.202)
五、Linux挂载windows的共享目录
六、卸载已挂载的NFS共享目录
七、rsync物理同步
八、扩展说明
因为NFS支持的功能相当多,而不同的功能都会使用不同的程序来启动,每启动一个功能就会启用一些端口来传输数据,因此NFS的功能对应的端口并不固定,客户端要知道NFS服务器端的相关端口才能建立连接进行数据传输,而RPC就是用来统一管理NFS端口的服务,并且统一对外的端口是111,RPC会记录NFS端口的信息,如此我们就能够通过RPC实现服务端和客户端沟通端口信息。PRC最主要的功能就是指定每个NFS功能所对应的port number,并且通知客户端,记客户端可以连接到正常端口上去。
在启动NFS SERVER之前,首先要启动RPC服务(即portmap或rpcbind服务,下同)否则NFS SERVER就无法向RPC服务区注册,另外,如果RPC服务重新启动,原来已经注册好的NFS端口数据就会全部丢失。因此此时RPC服务管理的NFS程序也要重新启动以重新向RPC注册。一般修改NFS配置文档后,是不需要重启NFS的,直接在命令执行/etc/init.d/nfs reload或exportfs –rv即可使修改的/etc/exports生效。
1、环境信息
服务端:192.168.65.201 【Linux】 ;
客户端:192.168.65.202 【Linux】;
2、NFS服务检查以及安装
检查是否安装nfs-utils 、rpcbind服务,系统默认已安装,如果没有安装通过 yum安装
[root@CentOS7-0002 ~]# rpm -qa nfs-utils rpcbind
rpcbind-0.2.0-49.el7.x86_64
nfs-utils-1.3.0-0.68.el7.2.x86_64
[root@CentOS7-0002 ~]#
[root@CentOS7-0001 /]# yum -y install nfs-utils rpcbind
3、关闭防火墙、selinux
[root@CentOS7-0002 ~]# systemctl stop firewalld
[root@CentOS7-0002 /]# sed -i "7s/enforcing/disabled/" /etc/selinux/config
[root@CentOS7-0002 /]# setenforce 0
1、创建共享文件
在NFS服务端上创建共享目录/srv/nfs_share/test并设置权限
[root@CentOS7-0002 /]# mkdir -p /srv/nfs_share/test
[root@CentOS7-0002 /]# chmod 666 /srv/nfs_share/test/
2、编辑export文件设置共享目录
[root@CentOS7-0002 /]# vim /etc/exports
/srv/nfs_share/test/ 192.168.65.*(rw,no_root_squash,async)
常见的参数则有:
rw:read-write,可读写;
ro:read-only,只读;
sync:文件同时写入硬盘和内存;
async:文件暂存于内存,而不是直接写入内存;
no_root_squash:NFS客户端连接服务端时如果使用的是root的话,那么对服务端分享的目录来说,也拥有root权限。显然开启这项是不安全的。
root_squash:NFS客户端连接服务端时如果使用的是root的话,那么对服务端分享的目录来说,拥有匿名用户权限,通常他将使用nobody或nfsnobody身份;
all_squash:不论NFS客户端连接服务端时使用什么用户,对服务端分享的目录来说都是拥有匿名用户权限;
anonuid:匿名用户的UID值,通常是nobody或nfsnobody,可以在此处自行设定;
anongid:匿名用户的GID值。
示例:
/newdisk/webUpload 28.163.1.*(rw,no_root_squash,async)
3、使配置文件生效
[root@CentOS7-0001 /]# exportfs -r
exportfs -rv //重新输出共享目录(重新启动本机上的所有共享目录)
nfsstat //查看NFS的运行状态,对于调整NFS的运行有很大帮助。
4、启动rpcbind、nfs服务
[root@CentOS7-0002 /]# systemctl start rpcbind
[root@CentOS7-0002 /]# systemctl start nfs
5、设置rpcbind、nfs开机自启动
[root@CentOS7-0002 /]# systemctl enable rpcbind
[root@CentOS7-0002 /]# systemctl enable nfs
6、查看 RPC 服务的注册状况
[root@CentOS7-0002 /]# rpcinfo -p localhost
7、查看共享出来的目录( 服务端或者客户端都可以)
[root@CentOS7-0002 /]# showmount -e 192.168.65.56
showmount命令:
-e 显示NFS服务器的共享列表
-a 显示本机挂载的文件资源情况
-v 显示版本号
1、客户端查看nfs共享状态
[root@CentOS7-0003 ~]# showmount -e 192.168.65.201
Export list for 192.168.65.56:
/srv/nfs_share/test 192.168.65.*
2、客户端挂载nfs服务器共享目录
命令格式:mount 文件类型 NFS服务器IP:共享目录 本地挂载点目录
[root@CentOS7-0003 ~]# mkdir -p /srv/nfs_share/test
[root@CentOS7-0003 ~]# mount -t nfs 192.168.65.56:/srv/nfs_share/test /srv/nfs_share/test
说明:mount命令只能通过root用户才能执行,如果客户端想通过普通用户访问该同步目录,需要设置服务端共享目录的权限,设置共享目录普通用户可以访问。
如服务端设置:chmod -R 666 /srv/nfs_share_test
3、设置开机自动挂载
因为在centos7中/etc/rc.d/rc.local的权限被降低了,所以需要赋予其可执行权,并将命令添加到/etc/rc.d/rc.local文件中
[root@CentOS7-0002 ~]# chmod +x /etc/rc.d/rc.local
添加一下脚本,并保存即可。
mount -t nfs 192.168.65.56:/srv/nfs_share/test /srv/nfs_share/te
1、window端共享目录需要挂载的目录
找一台其他通网段window,在命令行输入:\\192.168.65.148\test 验证是否可以正常访问。
2、Linux客户端执行挂在命令
mount -t cifs -o username=admin,password=123456,uid=nfsuser,gid=root //192.168.65.148/test/ /srv/test/
需要安装cifs-utils工具包,默认是已经安装。
常用参数说明 :
username , Window 系统登录用户名 ;
password : Window 系统登录密码 ;
uid:linux挂载目录的用户
gid:Linux挂载后目录的分组
//192.168.65.148/test/: 设置Window共享目录的路径 ;
/srv/test/ : 挂载到 Linux 下的那个目录
dir_mode=0777:参数设置挂载目录的权限
file_mode=0777:参数设置挂载文件的权限
说明:mount命令只能通过root用户执行,如果linux需要通过普通用户访问操作,可以通过uid,gid执行用户和用户组,通过dir_mode和file_mode设置目录和文件的访问权限
使用umount命令卸载已挂在的NFS目录
[root@CentOS7-0003 ~]# umount /srv/test/
如果出现:device is busy错误,加上-l参数强制卸载。
[root@CentOS7-0003 ~]# umount -l /srv/test/
安装rsync,建议使用普通用户安装,下载安装文件加压到对应的安装目录即可,我的安装目录:
/opt/software/rsync
网盘下载链接:
链接:https://pan.baidu.com/s/1_YGlHGynckE6BZ6ASaa8Aw 提取码:zhan
服务端配置(192.168.65.201)
在rsync安装目录/conf/rsyncd.conf文件中配置如下信息:
#默认配置
uid = 0 #守护进程的用户
gid = 0 #守护进程的组
port = 52326 #启动端口,tcp
use chroot=no #不使用chroot
max connections=100 #最大连接数100
pid file=/opt/software/rsync/rsyncd.pid #pid文件目录
lock file=/opt/software/rsync/rsync/rsync.lock #locl文件目录
log file=/opt/software/rsync/logs/rsyncd.log #log文件目录#模块参数1
[upload] #认证模块名,需在客户端配置
path=/srv/www/app/fileWeb/upload_file #服务端同步源目录,末尾无“/”
comment=rsync files #模块注释信息
ignore errors #忽略无用信息
read only=no #只读
list=no #不允许列文件
#auth users=rsync #认证用户名,与rsyncd.pas里的配置一致
secrets file=/opt/software/rsync/conf/rsyncd.pas #密码文件路径
#模块参数 2
[upload] #认证模块名,需在客户端配置
path=/srv/www/app/fileWeb/h5 #服务端同步源目录,末尾无“/”
comment=rsync files #模块注释信息
ignore errors #忽略无用信息
read only=no #只读
list=no #不允许列文件
#auth users=rsync #认证用户名,与rsyncd.pas里的配置一致
secrets file=/opt/software/rsync/conf/rsyncd.pas #密码文件路径
客户端配置(192.168.65.202)
在/opt/software/rsync/rsync_client文件中配置客户端同步脚本
#变量定义
#!/bin/bash
serverhost=20.32.19.11 #客户端IP,可按需配置多个
bdir=/srv/www/app/upload/ #客户端目标目录,可配置多个,末尾“/”必须加
serverid=upload #服务端认证模块名
#bdir1=/srv/www/app/h5/ #客户端目标目录,可配置多个,末尾“/”必须加
#serverid1=h5 #服务端认证模块名user=rsync #用户
DATE=`date +%Y%m%d` #日期变量#客户端同步脚本,多个目录配置多个同步脚本
cd /opt/software/rsync/bin
#get from remote #将远程目录同步到本地客户端,可按照需要配置多条
./rsync -vzrtopgu --progress --password-file=/opt/software/rsync/conf/rsync.pas --port=52326 $user@$serverhost::$serverid $bdir >> /opt/software/rsync/logs/upload_to_local.$DATE.log#get from remote #将远程目录同步到本地客户端,可按照需要配置多条
#./rsync -vzrtopgu --progress --password-file=/opt/software/rsync/conf/rsync.pas --port=52326 $user@$serverhost::$serverid1 $bdir1 >> /opt/software/rsync/logs/upload_to_local.$DATE.log#反向同步脚本,多个目录配置多个同步脚本
#send to remote #将本地目录同步至远程服务端,可按照需要配置多条
./rsync -vzrtopgu --progress --password-file=/opt/software/rsync/conf/rsync.pas --port=52326 $bdir $user@$serverhost::$serverid >> /opt/software/rsync/logs/upload_to_server.$DATE.log
#send to remote #将本地目录同步至远程服务端,可按照需要配置多条
./rsync -vzrtopgu --progress --password-file=/opt/software/rsync/conf/rsync.pas --port=52326 $bdir1 $user@$serverhost::$serverid1 >> /opt/software/rsync/logs/upload_to_server.$DATE.log
说明:
服务启动
1、服务端启停
# cd /opt/software/rsync
# ./run_server.sh start
# ./run_server.sh stop
# cd /opt/software/rsync/
# ./run_client.sh startall
# ./run_client.sh stopall
客户端没有一定的启动方式,为自编写shell脚本,必须用startall和stopall命令启动停止。all命令添加了reset和watchdog监控重启机制,每3秒检查一次,若有同类任务存活,则不拉起客户端同步,若无同类任务存活,则拉起客户端同步。即每三秒进行一次同步,这个时间可在run_client.sh脚本中配置。
日志清理
客户端同步脚本中配置了日志目录,会打印每一条同步信息,同步的文件越多越大,打印的日志信息越多,需定时清理。建议不停应用清理,也可配置定时脚本清理,命令如下。
# >xxx.log
不要直接删除log文件,对运行程序直接删除对应日志文件,可能导致空间不释放,服务器卡死。
NFS服务器的配置相对比较简单,只需要在相应的配置文件中进行设置,然后启动NFS服务器即可。
NFS的常用目录
/etc/exports NFS服务的主要配置文件
/usr/sbin/exportfs NFS服务的管理命令
/usr/sbin/showmount 客户端的查看命令
/var/lib/nfs/etab 记录NFS分享出来的目录的完整权限设定值
/var/lib/nfs/xtab 记录曾经登录过的客户端信息