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)
[root@nfs-server ~]# yum install nfs-utils rpcbind -y
[root@nfs-server ~]# systemctl start rpcbind
[root@nfs-server ~]# systemctl start nfs
[root@nfs-server ~]# vi /etc/exports
/data 192.168.100.10(rw,sync,all_squash)
/data 192.168.10.0/24(rw,sync,all_squash)
[root@nfs-server ~]# systemctl restart rpcbind
[root@nfs-server ~]# systemctl restart nfs
[root@nfs-server ~]# 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.
[root@xiandian 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:
[root@test ~]# mount -t nfs 192.168.200.4:/mnt /opt/
[root@test ~]# mount -t nfs 192.168.200.4:/mnt /mnt/
[root@test ~]# cd /mnt/
[root@test mnt]# ls
volume-8487f7db-f628-42ab-b9c4-2ebf2693166b
[root@ceph-1 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:
1、对接 openstack cinder-volumes
[root@xiandian ~]# vi /etc/cinder/nfs_shares
192.168.200.4:/mnt
[root@xiandian ~]# chmod +755 /etc/cinder/nfs_shares
[root@xiandian ~]# vi /etc/cinder/cinder.conf
[DEFAULT]
rpc_backend = rabbit
auth_strategy = keystone
my_ip = 127.0.0.1
enabled_backends = nfs
glance_api_servers = http://xiandian:9292
volume_driver = cinder.volume.drivers.nfs.NfsDriver
nfs_shares_config = /etc/cinder/nfs_shares
[lvm] //启用多后端的话就不要注释
#volume_driver = cinder.volume.drivers.lvm.LVMVolumeDriver
#volume_group = cinder-volumes
#iscsi_protocol = iscsi
#iscsi_helper = lioadm
[root@xiandian ~]# cinder service-list
+------------------+--------------+------+---------+-------+----------------------------+-----------------+
| Binary | Host | Zone | Status | State | Updated_at | Disabled Reason |
+------------------+--------------+------+---------+-------+----------------------------+-----------------+
| cinder-scheduler | xiandian | nova | enabled | down | 2019-05-14T21:23:17.000000 | - |
| cinder-volume | xiandian@lvm | nova | enabled | down | 2019-05-14T21:23:04.000000 | - |
| cinder-volume | xiandian@nfs | nova | enabled | up | 2019-05-14T21:24:43.000000 | - |
+------------------+--------------+------+---------+-------+----------------------------+-----------------+
[root@xiandian ~]# cinder create --name a 1
+--------------------------------+--------------------------------------+
| Property | Value |
+--------------------------------+--------------------------------------+
| attachments | [] |
| availability_zone | nova |
| bootable | false |
| consistencygroup_id | None |
| created_at | 2019-05-14T21:25:00.000000 |
| description | None |
| encrypted | False |
| id | 97b712dc-a82f-4f7f-ae1b-fbe0597d5889 |
| metadata | {} |
| migration_status | None |
| multiattach | False |
| name | a |
| os-vol-host-attr:host | None |
| os-vol-mig-status-attr:migstat | None |
| os-vol-mig-status-attr:name_id | None |
| os-vol-tenant-attr:tenant_id | 0ab2dbde4f754b699e22461426cd0774 |
| replication_status | disabled |
| size | 1 |
| snapshot_id | None |
| source_volid | None |
| status | creating |
| updated_at | None |
| user_id | 53a1cf0ad2924532aa4b7b0750dec282 |
| volume_type | None |
+--------------------------------+--------------------------------------+
2 、对接nova.
[root@xiandian ]# mount 10.0.0.30:/mnt/ /var/lib/nova/instances/
[root@xiandian ~]# nova boot --flavor 1 --image a --nic net-id=bd923693-d9b1-4094-bd5b-22a038c44827 test
[root@xiandian instances]# nova list
+--------------------------------------+------+--------+------------+-------------+----------------------+
| ID | Name | Status | Task State | Power State | Networks |
+--------------------------------------+------+--------+------------+-------------+----------------------+
| 6c6c6ba8-f3b0-46c1-b0d7-d2e5223119ca | ll | ACTIVE | - | Running | sharednet1=10.0.0.32 |
+--------------------------------------+------+--------+------------+-------------+----------------------+
[root@xiandian instances]# pwd
/var/lib/nova/instances
[root@xiandian instances]# ls
6c6c6ba8-f3b0-46c1-b0d7-d2e5223119ca _base locks