前提
最近项目做负载均衡的时候多个服务之间的数据需要同步,同步的方案有:
1.NFS文件挂载
2.rsync等数据同步工具
3.fastdfs分布式文件系统
考虑到易用性以及文件不会太多,将每个服务的数据挂载到同一个地方是最简单的方法了。
NFS简介
NFS是Network File System的缩写,即网络文件系统。客户端通过挂载的方式将NFS服务器端共享的数据目录挂载到本地目录下。
NFS工作流程
1、由程序在NFS客户端发起存取文件的请求,客户端本地的RPC(rpcbind)服务会通过网络向NFS服务端的RPC的111端口发出文件存取功能的请求。
2、NFS服务端的RPC找到对应已注册的NFS端口,通知客户端RPC服务。
3、客户端获取正确的端口,并与NFS daemon联机存取数据。
4、存取数据成功后,返回前端访问程序,完成一次存取操作。
centos7下配置nfs并远程挂载
首先检查是否缺少基础环境
rpm -qa | grep nfs-utils
rpm -qa | grep rpcbind
没有则通过以下命令安装
yum -y install nfs-utils rpcbind
开机启动
systemctl enable rpcbind
systemctl enable nfs-server
#取消开机启动
systemctl disable rpcbind
systemctl disable nfs-server
查看服务状态及启动命令
systemctl status rpcbind
systemctl status nfs
systemctl start rpcbind
systemctl start nfs
创建共享目录并配置权限
mkdir /data/images
chmod 777 -R /data/images
配置NFS服务
vi /etc/exports
#内容为
#[共享目录] [客户端地址1(参数1,参数2,...)] [客户端地址2(参数1,参数2,...)] ,例如
/data/images 192.168.126.0/24(rw,sync,all_squash)
#设置并保存成功后执行exportfs -r命令刷新
配置详解
1.共享目录要用绝对路径,可被nfsnobody读写
2.NFS客户端地址:
指定IP: 192.168.0.1
指定子网所有主机: 192.168.126.0/24
指定域名的主机: test.com
指定域名所有主机: *.test.com
所有主机: *
3.参数:
ro:目录只读
rw:目录读写
sync:将数据同步写入内存缓冲区与磁盘中,效率低,但可以保证数据的一致性
async:将数据先保存在内存缓冲区中,必要时才写入磁盘
all_squash:将远程访问的所有普通用户及所属组都映射为匿名用户或用户组(nfsnobody)
no_all_squash:与all_squash取反(默认设置)
root_squash:将root用户及所属组都映射为匿名用户或用户组(默认设置)
no_root_squash:与rootsquash取反
anonuid=xxx:将远程访问的所有用户都映射为匿名用户,并指定该用户为本地用户(UID=xxx)
anongid=xxx:将远程访问的所有用户组都映射为匿名用户组账户
NFS其它常用目录
/usr/sbin/exportfs NFS服务的管理命令
/usr/sbin/showmount 客户端的查看命令
/var/lib/nfs/etab 记录NFS分享出来的目录的完整权限设定值
/var/lib/nfs/xtab 记录曾经登录过的客户端信息
相关命令
exportfs -r #修改了/etc/exports后立即生效
nfsstat #查看NFS的运行状态
rpcinfo #查看rpc执行信息,可以用于检测rpc运行情况的工具,利用rpcinfo -p 可以查看出RPC开启的端口所提供的程序
showmount -e ip #显示此IP地址分享出来的目录
挂载测试
#当修改了服务配置并生效后,我们就可以挂载相应的目录到共享目录,nfs服务再101,我们在102执行以下命令
mount -t nfs 192.169.126.101:/data/images /data/images
df -h #查看挂载情况,挂载成功则可以新增数据测试数据是否同步
umount /data/images #卸载挂载