cinder-volume 支持多种 volume provider ,前面我们一直使用的是默认的 LVM。本节我们将增加NFS volume provider
虽然NFS更多的应用在实验或者小规模的cinder环境,由于性能和缺乏高可用的原因在生产环境中不太可能使用,但是学习NFS volume provider的意义在于:
1、理解cinder-volume如何支持多backend
2、更重要的,可以理解 cinder-volume、nova-compute和volume provider 是如何协同工作的,共同为 Instance 提供块存储
3、举一反三,能够快速理解并接入其他生产级的backend,比如ceph、商业存储等
下图展示了 cinder、nova 是如何与NFS volume provider 协调工作的。
![](https://i-blog.csdnimg.cn/blog_migrate/f179074e241605236ff17131732be374.png)
NFS Volume Provider
就是我们通常说的NFS Server ,提供远程NFS目录,NFS Clinet 可以mount 这些远程目录到本地,然后就像使用本地目录一样创建、读写文件及目录
cinder-volume
存储节点通过NFS driver 管理NFS volume provider 中的volume,这些 volume 在NFS中实际上是一个个文件
nova-compute
计算节点将 NFS volume provider 存放volume 的目录mount到本地,然后将volume文件作为虚拟磁盘映射给Instance
这里有几点需要强调:
1、在Cinder 的driver 架构中,运行cinder-volume的存储节点和Volume Provider 可以是完全独立的两个实体。cinder-volume通过driver 与 Volume Provider 通信,控制和管理volume
2、Instance读写volume时,数据流不需要经过存储节点,而是直接对Volume Provider中的Volume进行读写。正如上图所示,存储节点与NFS Volume Provider的连接只用做volume 的管理和控制(绿色连线);真正的数据读写,是通过计算节点和NFS Volume Provider之间的连接完成的(紫色连线)。这种设计减少了中间环节,存储节点不直接参与数据传输,保证了读写效率。
3、其他Volume Provider(例如 ceph、swift、商业存储等)均遵循这种控制流和数据流分离的设计
配置 NFS Volume Provider
在实验环境中,NFS volume provider 的NFS远程目录为 10.12.28.8:/home/nfs1 (chmod 777 /home/nfs1)
cinder-volume服务节点上mount point 为 /nfs_storage (chmod 777 /nfs_storage)
1、/etc/cinder/cinder.conf添加 nfs backend
[nfs]
nfs_mount_point_base = /nfs_storage
nfs_shares_config = /etc/cinder/nfs_shares
volume_driver = cinder.volume.drivers.nfs.NfsDriver
volume_backend_name = nfs
2、/etc/cinder/cinder.conf修改支持的backend,添加nfs支持
[DEFAULT]
enabled_backends = lvmdriver-1,nfs
3、添加/etc/cinder/nfs_shares
10.12.28.8:/home/nfs1
4、重启cinder-volume服务
[root@DevStack-Rocky-Controller-21 ~]# systemctl restart devstack@c-vol.service
[root@DevStack-Rocky-Compute-22 ~]# systemctl restart devstack@c-vol.service
5、重启前后cinder服务对比
[stack@DevStack-Rocky-Compute-22 ~]$ cinder service-list
+------------------+------------------------------------------+------+---------+-------+----------------------------+-----------------+
| Binary | Host | Zone | Status | State | Updated_at | Disabled Reason |
+------------------+------------------------------------------+------+---------+-------+----------------------------+-----------------+
| cinder-backup | DevStack-Rocky-Compute-22 | nova | enabled | down | 2019-07-03T06:15:57.000000 | - |
| cinder-backup | DevStack-Rocky-Controller-21 | nova | enabled | down | 2019-07-03T06:15:27.000000 | - |
| cinder-scheduler | DevStack-Rocky-Controller-21 | nova | enabled | up | 2019-07-03T09:35:27.000000 | - |
| cinder-volume | DevStack-Rocky-Compute-22@lvmdriver-1 | nova | enabled | up | 2019-07-03T09:35:22.000000 | - |
| cinder-volume | DevStack-Rocky-Controller-21@lvmdriver-1 | nova | enabled | up | 2019-07-03T09:35:19.000000 | - |
+------------------+------------------------------------------+------+---------+-------+----------------------------+-----------------+
[stack@DevStack-Rocky-Compute-22 ~]$ cinder service-list
+------------------+------------------------------------------+------+---------+-------+----------------------------+-----------------+
| Binary | Host | Zone | Status | State | Updated_at | Disabled Reason |
+------------------+------------------------------------------+------+---------+-------+----------------------------+-----------------+
| cinder-backup | DevStack-Rocky-Compute-22 | nova | enabled | down | 2019-07-03T06:15:57.000000 | - |
| cinder-backup | DevStack-Rocky-Controller-21 | nova | enabled | down | 2019-07-03T06:15:27.000000 | - |
| cinder-scheduler | DevStack-Rocky-Controller-21 | nova | enabled | up | 2019-07-03T09:36:57.000000 | - |
| cinder-volume | DevStack-Rocky-Compute-22@lvmdriver-1 | nova | enabled | up | 2019-07-03T09:36:53.000000 | - |
| cinder-volume | DevStack-Rocky-Compute-22@nfs | nova | enabled | up | 2019-07-03T09:36:53.000000 | - |
| cinder-volume | DevStack-Rocky-Controller-21@lvmdriver-1 | nova | enabled | up | 2019-07-03T09:37:00.000000 | - |
| cinder-volume | DevStack-Rocky-Controller-21@nfs | nova | enabled | up | 2019-07-03T09:37:00.000000 | - |
+------------------+------------------------------------------+------+---------+-------+----------------------------+-----------------+
6、在GUI页面创建nfs volume type
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c3a8484921d300fd12394efe29c57.png)
![](https://i-blog.csdnimg.cn/blog_migrate/a4b5c9ee7b7735b239f2dc0525ff5eeb.png)
![](https://i-blog.csdnimg.cn/blog_migrate/c91a6651ba9e9cd84ca028bdbcc4a92a.png)
![](https://i-blog.csdnimg.cn/blog_migrate/8973d21f2038b905e947e9f7399c0fb0.png)
![](https://i-blog.csdnimg.cn/blog_migrate/6980d5505ab3e877ecdd327057876265.png)
![](https://i-blog.csdnimg.cn/blog_migrate/553e395137ed3dcdcf358d7b7c46387e.png)
到此,nfs volume provider 准备就绪。