NFS 文件系统搭建+对接openstack
NFS 文件系统搭建
NFS是Network File System的缩写,中文称为网络文件系统,它的主要功能是通过网络(一个局域网)让不同的主机系统之间可以共享文件或目录,NFS的客户端(一般为应用服务器,例如web)可以通过挂载(mount)的方式将NFS服务器共享的数据目录挂载到NFS客户端本地系统中(就是某一个关在点下),从客户端本地看,NFS服务器端共享目录就好像是客户端自己的磁盘分区或者目录一样,而实际上却是远端的NFS服务器的目录。
NFS网络文件系统很像Windows系统的网络共享、安全功能、网络驱动器映射,这也和linux的samba服务类似,只不过一般情况下,Windows网络共享服务或samba服务用户办公局域网共享,而互联网中小型网站集群架构后端常用NFS进行数据共享,若是大型网站,那么有可能还会用到更复杂的分布式文件系统Moosefs(mfs)、GlusterFS。
在企业集群架构的工作场景中,NFS网络文件系统一般被用来存储共享视频、图片、附件等静态资源文件,通常网站用户上传的文件都会放到NFS共享中,例如BBS产品的图片、附件、头像(网站BBS的程序不要放在NFS共享中),然后前端所有节点在访问这些静态资源时都会读取NFS存储上的资源。
NFS是当前互联网系统架构中最常用的数据存储服务之一,特别是中小型网站应用频率更高。
实验环境:
CentOS7.2 | NFS server 服务器(IP: 10.0.0.30) |
CentOS7.2 | NFS 客户端1(IP: 192.168.200.4) |
windows 10 | NFS 客户端2(IP:192.168.10.56) |
1、安装NFS 服务器
nfs-utils:nfs服务的主程序,包括rpc.nfsd、rpc.mountd两个daemons和相关的文档说明及执行命令文件等
rpcbind:centos6下面的rpc主程序(centos5下的是portmap)
[[email protected] ~]# yum install nfs-utils rpcbind -y
[[email protected] ~]# systemctl start rpcbind
[[email protected] ~]# systemctl start nfs
[[email protected] ~]# vi /etc/exports
/data 192.168.100.10(rw,sync,all_squash)
/data 192.168.10.0/24(rw,sync,all_squash)
[[email protected] ~]# systemctl restart rpcbind
[[email protected] ~]# systemctl restart nfs
[[email protected] ~]# systemctl enable nfs-server
Created symlink from /etc/systemd/system/multi-user.target.wants/nfs-server.service to /usr/lib/systemd/system/nfs-server.service.
[[email protected] mnt]# systemctl enable rpcbind
到此 NFS 搭建完成
2、nfs配置文件的格式
NFS共享的目录 NFS客户端地址(参1,参2,……) NFS客户端地址2(参1,参2,……)
/data 10.0.0.30(rw,sync) /data 192.168.10.0/24(rw,sync)
常用格式说明 | 实例 |
---|---|
配置案例1 | /data 172.16.1.0/24(rw,sync) 允许客户端读写,并且数据同步写到服务器的磁盘里 |
配置案例2 | /data 172.16.1.0/24(rw,sync,all_squash,anonuid=888,anongid=888) 允许客户端读写,并且数据同步写到服务器的磁盘里,并且指定客户端的uid和gid,早期生产环境中的一种配置,适合多客户端共享一个NFS单目录,如果所有服务器的nfsnodoby账户的UID相同,则本案例就没什么意义了 |
配置案例3 | /data 172.16.1.0/24(ro) 只读共享,用途:例如在生产环境中开发人员有查看服务器日志的需求,但是又不希望给开发服务器的权限,那么就可以给开发提供从某个测试服务器NFS客户端上查看某个生产服务器日志目录(NFS共享目录)的权限,但是,这不是唯一的方法. |
客户端地址 | 具体地址 | 说明 |
---|---|---|
授权单一客户端访问NFS | 172.16.1.41 | 一般情况下,生产环境中此配置不多 |
授权整个网段访问NFS | 172.16.1.0/24 | 指定网段为生产环境中最常见的配置,配置简单、维护方便 |
授权整个网段可访问NFS | 172.0.0.* | 指定网段的另外写法(不推荐使用) |
授权某个域名客户端访问 | nfs.lzhnb.com | 生产环境中一般不使用 |
授权整个域名客户端访问 | *.lzhnb.com | 生产环境中一般不使用 |
NFS配置参数权限,具体如下表
参数名称 | 参数用途 |
---|---|
rw(熟记) | 表示可读写权限 |
sync(熟记) | 请求或写入数据时,数据同步写入到NFS Server的硬盘后才返回,优点:数据安全不会丢,缺点:性能比不启用该参数要差 |
async(熟记) | 写入数据时会先写到内存缓冲区,直到硬盘有空档才会在写入磁盘,这样可以提升写入效率。风险是若服务器宕机或不正常关机,会损失缓冲区中未写入硬盘的数据(解决办法:服务器主板电池或UPS不间断电源) |
all_squash(熟记) | 不管访问NFS Server共享目录的用户身份如何,它的权限都将被压缩为匿名用户,同时它的UID和GID都会变成nfsnobody账号身份,在早期多个NFS客户端同时读写NFS Server数据时,这个参数很有用,在生产环境中配置NFS的重要技巧:1)确保所有客户端服务器对NFS共享目录具备相同的用户访问权限,all_squash把所有客户端都压缩成匿名用户(UID相同),就是anonuid,anongid指定的UID和GID相同,2)所有的客户端和服务器端都需要有一个相同的UID和GID的用户,nfsnodoby(UID必须相同) |
anonuid(熟记) | 参数以anon*开头即值anonymous匿名用户,这个用户的UID设置值通常为nfsnobody的UID值,当然我们也可以自行设置这个UID值。但是,UID必须存在于/etc/passwd中。在多个NFS Clients时,如多台web server共享一个NFS目录时,通过这个参数可以使得不同的NFS Clients写入的数据对所有NFS Clients保持同样的用户权限,即为配置的匿名UID对应用户权限,这个参数很有用。一般默认就好 |
anongid(熟记) | 同anonuid,区别是把uid(用户id)换成gid(组id)
|
ro | 表示只读权限 |
2、分别使用centos 7.2,windows10对NFS进行测试。
centos7.2:
[[email protected] ~]# mount -t nfs 192.168.200.4:/mnt /opt/
[[email protected] ~]# mount -t nfs 192.168.200.4:/mnt /mnt/
[[email protected] ~]# cd /mnt/
[[email protected] mnt]# ls
volume-8487f7db-f628-42ab-b9c4-2ebf2693166b
[[email protected] mnt]# df -Th
Filesystem Type Size Used Avail Use% Mounted on
/dev/vda1 xfs 20G 1.2G 19G 6% /
devtmpfs devtmpfs 984M 0 984M 0% /dev
tmpfs tmpfs 1001M 0 1001M 0% /dev/shm
tmpfs tmpfs 1001M 17M 985M 2% /run
tmpfs tmpfs 1001M 0 1001M 0% /sys/fs/cgroup
/dev/vdb1 xfs 50G 7.2G 43G 15% /opt/osd1
192.168.200.4:/mnt nfs4 50G 33M 50G 1% /mnt
windows 10:
然后等待安装完成,安装完成后打开cmd: