第七步(2):安装openstack-cinder服务-控制节点 简介 部署cinder-controller

OpenStack 的存储组件—Cinder 和 Swift—让你在你的私有云里构建块存储和对象的存储系统,Openstack 从Folsom 开始使用 Cinder 替换原来的 Nova-Volume 服务,为 Openstack 云平台提供块存储服务,Cinder 接口提供了一些标准功能,允许创建和附加块设备到虚拟机,如“创建卷”,“删除卷”和“附加卷”。还有更多高级的功能,支持扩展容量的能力,快照和创建虚拟机镜像克隆,主要涉及到的组件如下:

cinder-api:接受 API 请求,并将其路由到“cinder-volume“执行,即请求 cinder 要先请求此对外 API。cinder-api的监听端口为8776;

cinder-volume:与块存储服务和例如“cinder-scheduler“的进程进行直接交互。它也可以与这些进程通过一个消息队列进行交互。“cinder-volume“服务响应送到块存储服务的读写请求来维持状态。它也可以和多种存储提供者在驱动架构下进行交互。由nova申请镜像、IP、卷分配给虚拟机,nova服务会通过cinder-api给虚拟机申请卷;cinder volum不负责数据存储,它只是一个接口;
通过访问cinder-api,给虚拟机分配存储卷,cinder-scheduler会选择一个可用的存储节点进行调度,api会把创建卷的请求发送到消息队列中,由存储节点上的cinder-volume服务监听消息队列,所调度的存储节点监听到消息后创建卷。

cinder-scheduler 守护进程:选择最优存储提供节点来创建卷。其与“nova-scheduler“组件类似。

cinder-backup 守护进程:“cinder-backup“服务提供任何种类备份卷到一个备份存储提供者。就像“cinder-volume“服务,它与多种存储提供者在驱动架构下进行交互。如果想备份卷中的数据,则会调用cinder-backup把数据备份到指定的存储上;第三方存储必须兼容openstack-cinder接口,才能用于在cinder服务中进行数据存储和卷管理,如卷的拉伸(存储驱动需要支持拉伸)

消息队列:在块存储的进程之间路由信息。


##
cinder相当于就是一个远端磁盘,类似于阿里云的云盘;当虚拟机故障时,可以把虚拟机的云盘卸载,把云盘挂载到新的虚拟机进行使用,这样就不会造成数据的丢失

部署cinder-controller

https://docs.openstack.org/cinder/train/install/cinder-controller-install-rdo.html #部署参考

mysql服务器

1、CREATE DATABASE cinder;   #创建数据库

2、GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'%' IDENTIFIED BY 'cinder123';
#授权用户

haproxy服务器

1、vim /etc/haproxy/haproxy.cfg
listen openstack-cinder-8776
 mode tcp
 bind 172.31.7.248:8776
 server 172.31.7.101 172.31.7.101:8776 check inter 3s fall 3 rise 5
 server 172.31.7.102 172.31.7.102:8776 check inter 3s fall 3 rise 5
 
2、systemctl reload haproxy 

controller节点

1、source admin-openrc.sh   #导入admin环境变量

2、openstack user create --domain default --password-prompt cinder #创建cinder用户

3、openstack role add --project service --user cinder admin
#把cinder用户添加到service项目,拥有admin权限

4、openstack service create --name cinderv2 --description "OpenStack Block Storage" volumev2
openstack service create --name cinderv3 --description "OpenStack Block Storage" volumev3
#cinder有v2和v3两个并存版本的API,所以需要创建两个版本的service实例

5、openstack endpoint create --region RegionOne volumev2 public http://openstack-vip.linux.local:8776/v2/%(project_id)s
openstack endpoint create --region RegionOne volumev2 internal http://openstack-vip.linux.local:8776/v2/%(project_id)s
openstack endpoint create --region RegionOne volumev2 admin http://openstack-vip.linux.local:8776/v2/%(project_id)s
#给cinder-api-v2版本的服务注册endpoint

6、openstack endpoint create --region RegionOne volumev3 public http://openstack-vip.linux.local:8776/v3/%(project_id)s
openstack endpoint create --region RegionOne volumev3 internal http://openstack-vip.linux.local:8776/v3/%(project_id)s
openstack endpoint create --region RegionOne volumev3 admin http://openstack-vip.linux.local:8776/v3/%(project_id)s
#给cinder-api-v3版本的服务注册endpoint;每个api版本的服务都有 3 个网络

7、openstack endpoint list   #查看endpoint是否注册成功

8、yum install openstack-cinder -y

9、vim /etc/cinder/cinder.conf
[database]   #配置数据库连接
connection = mysql+pymysql://cinder:cinder123@openstack-vip.linux.local/cinder

[DEFAULT]
transport_url = rabbit://openstack:openstack123@openstack-vip.linux.local #配置rabbitmq连接
auth_strategy = keystone  #使用keystone做认证
my_ip = 172.31.7.102  #myip需要指定当前controller地址

[keystone_authtoken]     #配置keystone认证信息
www_authenticate_uri = http://openstack-vip.linux.local:5000  #keystone地址
auth_url = http://openstack-vip.linux.local:5000
memcached_servers = openstack-vip.linux.local:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = cinder   #指定通过cinder账号到keystone做认证
password = cinder

[oslo_concurrency]
lock_path = /var/lib/cinder/tmp  #配置锁路径

10、su -s /bin/sh -c "cinder-manage db sync" cinder  #初始化cinder数据库

11、到mysql中cinder库中是否能够查看到初始化的表结构

12、vim /etc/nova/nova.conf 
[cinder]        
os_region_name = RegionOne  #告诉nova到RegionOne这个区域中调用cinder

13、systemctl restart openstack-nova-api.service

14、 systemctl start openstack-cinder-api.service openstack-cinder-scheduler.service

15、systemctl enable openstack-cinder-api.service openstack-cinder-scheduler.service

16、tail -f /var/log/cinder/*.log  #日志中不能有任何报错

17、curl 172.31.7.248:8776   #查看访问cinder-api是否能够有数据返回

测试

https://docs.openstack.org/cinder/train/install/cinder-verify.html #测试参考

1、openstack volume service list  #查看卷服务注册情况