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
挂载到本地目录
注:这里挂载不是必须的步骤,是为了验证nfs服务器是否可用,因为cinder volume启动时会自动去挂载nfs服务器
cd /root
mkdir nfsshare
mount -tnfs 10.133.47.138:/nfs/shared /root/nfsshare/
查看挂载结果
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
卷文件已经生成,同步到了nfs服务器上。
总结:nfs为cinder提供后端存储,其实就是提供一个文件系统,挂载到客户端的路径下,然后cinder往里面写文件。
遇到的问题:主要就是nfs服务端的配置文件没有写no_root_squash,导致cinder 创建卷失败
服务启动后,创建卷时schedulel报无法读写/var/lib/cinder/mnt/.../vomle-xxx
多存储后端尝试 LVM+NFS
cinder 配置项修改
[default]
enabled_backends = nfs,lvm
lvm配置项
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
后端两种存储系统,根据具体的volume-type去指定创建在哪个存储后端中。