NFS给远程主机提供文件系统,它允许网络中的计算机可以通过tcp/ip来共享资源,就像访问本地文件一样。

环境配置

openstack  allinone一套, nfs虚拟机一台。

NFS服务器端的安装

#yum -y install rpcbind nfs-utils

NFS服务器端的配置

NFS服务器端的配置比较简单,基本只涉及/etc/exports文件的修改,配置内容如下:
/nfs/shared 0.0.0.0/0.0.0.0(rw,sync,no_root_squash)

0.0.0.0/0.0.0.0网段的用户可以挂载NFS服务器上的/nfs/shared目录(我嫌麻烦就全通算了),挂载后具有读写权限,
sync表示实时同步数据,no_root_squash 是后来在创建卷的时候发现scheduler没有权限去读写,怀疑是cinder无法读写所以加了。

NFS服务的启动

service rpcbind start
service nfs start      (注意先创建好需要共享的文件路径,不然启动失败)
chkconfig rpcbind on
chkconfig nfs on

NFS服务验证

服务器端使用showmount命令查询NFS的共享状态
# showmount-e
# showmount-a

客户端使用showmount命令查询NFS的共享状态
# showmount -e NFS服务器IP

openstack  NFS 作为cinder后端实践(lvm+nfs)-LMLPHP

挂载到本地目录

注:这里挂载不是必须的步骤,是为了验证nfs服务器是否可用,因为cinder volume启动时会自动去挂载nfs服务器

cd /root
mkdir nfsshare
mount -tnfs 10.133.47.138:/nfs/shared /root/nfsshare/

查看挂载结果
openstack  NFS 作为cinder后端实践(lvm+nfs)-LMLPHP


cinder配置

第一步 创建/etc/cinder/share.txt文件,并编辑内容如下,告知可以被mount的共享存储
10.133.47.138:/nfs/shared

第二步 修改权限及用户组
chmod 0640 /etc/cinder/share.txt
 chown root:cinder /etc/cinder/share.txt

第三步:编辑/etc/cinder/cinder.conf
[default]
enabled_backends = nfs

[nfs]         //这个千万不能少
volume_driver=cinder.volume.drivers.nfs.NfsDriver
nfs_shares_config=/etc/cinder/shares.txt
nfs_mount_point_base=$state_path/mnt
volume_backend_name=nfs

第四步 重启cinder volume
service openstack-cinder-volume  restart
cinder service-list  查看服务是否up
df -h 看到nfs已自动挂载Ok

第五步 创建卷类型关联nfs存储后端
cinder type-create nfs
cinder type-key nfs set volume_backend_name=nfs

验证:创建卷类型为nfs
cinder create 2 --volume-type nfs


openstack  NFS 作为cinder后端实践(lvm+nfs)-LMLPHP
openstack  NFS 作为cinder后端实践(lvm+nfs)-LMLPHP


openstack  NFS 作为cinder后端实践(lvm+nfs)-LMLPHP

卷文件已经生成,同步到了nfs服务器上。

openstack  NFS 作为cinder后端实践(lvm+nfs)-LMLPHP


总结:nfs为cinder提供后端存储,其实就是提供一个文件系统,挂载到客户端的路径下,然后cinder往里面写文件。
遇到的问题:主要就是nfs服务端的配置文件没有写no_root_squash,导致cinder 创建卷失败
服务启动后,创建卷时schedulel报无法读写/var/lib/cinder/mnt/.../vomle-xxx

多存储后端尝试 LVM+NFS

cinder 配置项修改
[default]
enabled_backends = nfs,lvm

lvm配置项

openstack  NFS 作为cinder后端实践(lvm+nfs)-LMLPHP

volume_group=cinder-volumes 是表示使用这个卷组
volume_backend_name=lvm只是取个名字,方便给设置的类型关联

重启cinder-volume服务

添加volume-type
cinder type-create nfs
cinder type-key nfs set volume_backend_name=nfs

openstack  NFS 作为cinder后端实践(lvm+nfs)-LMLPHP


后端两种存储系统,根据具体的volume-type去指定创建在哪个存储后端中。










11-03 23:47