Openstack之十:安装块存储服务cinder控制节点与cinder存储节点
一、部署块存储cinder:
官方部署文档:https://docs.openstack.org/ocata/zh_CN/install-guide-rdo/common/get-started-block-storage.html
OpenStack的存储组件—Cinder和Swift—让你在你的私有云里构建块存储和对象的存储系统,Openstack从Folsom开始使用Cinder替换原来的Nova-Volume服务,为Openstack云平台提供块存储服务,Cinder接口提供了一些标准功能,允许创建和附加块设备到虚拟机,如“创建卷”,“删除卷”和“附加卷”。还有更多高级的功能,支持扩展容量的能力,快照和创建虚拟机镜像克隆,主要涉及到的组件如下:
cinder-api:接受API请求,并将其路由到“cinder-volume“执行,即请求cinder要先请求此对外API。
cinder-volume:与块存储服务和例如“cinder-scheduler“的进程进行直接交互。它也可以与这些进程通过一个消息队列进行交互。“cinder-volume“服务响应送到块存储服务的读写请求来维持状态。它也可以和多种存储提供者在驱动架构下进行交互。
cinder-scheduler守护进程:选择最优存储提供节点来创建卷。其与“nova-scheduler“组件类似。
cinder-backup守护进程:“cinder-backup“服务提供任何种类备份卷到一个备份存储提供者。就像“cinder-volume“服务,它与多种存储提供者在驱动架构下进行交互。
消息队列:在块存储的进程之间路由信息。
二、在数据库创建用户并授权
1、创建 cinder
数据库并授权
[root@openstack-1 ~]# mysql Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 9 Server version: 10.3.10-MariaDB MariaDB Server Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]> CREATE DATABASE cinder; #创建cinder数据库用户 Query OK, 1 row affected (0.056 sec) MariaDB [(none)]> GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'%' \ #授权并设置密码 -> IDENTIFIED BY 'cinder'; Query OK, 0 rows affected (0.114 sec) MariaDB [(none)]>
2、在控制端进行测试,mysql数据库是否可以连接过去,此时可以看到可以连接:
[root@openstack-1 ~]# mysql -ucinder -pcinder Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 10 Server version: 10.3.10-MariaDB MariaDB Server Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]>
三、在控制端进行配置
1、获得 admin
凭证来获取只有管理员能执行的命令的访问权限:
$ . admin-openrc
2、要创建服务证书,完成这些步骤:
创建一个 cinder
用户:
$ openstack user create --domain default --password-prompt cinder User Password: Repeat User Password: +---------------------+----------------------------------+ | Field | Value | +---------------------+----------------------------------+ | domain_id | default | | enabled | True | | id | 9d7e33de3e1a498390353819bc7d245d | | name | cinder | | options | {} | | password_expires_at | None | +---------------------+----------------------------------+
3、添加 admin
角色到 cinder
用户上。
$ openstack role add --project service --user cinder admin
4、创建“cinderv2”和“cinderv3”不同版本的服务
$ openstack service create --name cinderv2 \ --description "OpenStack Block Storage" volumev2 +-------------+----------------------------------+ | Field | Value | +-------------+----------------------------------+ | description | OpenStack Block Storage | | enabled | True | | id | eb9fd245bdbc414695952e93f29fe3ac | | name | cinderv2 | | type | volumev2 | +-------------+----------------------------------+
cinderv3版本的cinder服务
$ openstack service create --name cinderv3 \ --description "OpenStack Block Storage" volumev3 +-------------+----------------------------------+ | Field | Value | +-------------+----------------------------------+ | description | OpenStack Block Storage | | enabled | True | | id | ab3bbbef780845a1a283490d281e7fda | | name | cinderv3 | | type | volumev3 | +-------------+----------------------------------+
5、创建块设备存储服务的 API 入口点:
$ openstack endpoint create --region RegionOne \ volumev2 public http://openstack-vip.net:8776/v2/%\(project_id\)s # openstack-vip.net是控制台解析VIP地址的域名 $ openstack endpoint create --region RegionOne \ volumev2 internal http://openstack-vip.net:8776/v2/%\(project_id\)s $ openstack endpoint create --region RegionOne \ volumev2 admin http://openstack-vip.net:8776/v2/%\(project_id\)s $ openstack endpoint create --region RegionOne \ volumev3 public http://openstack-vip.net:8776/v3/%\(project_id\)s $ openstack endpoint create --region RegionOne \ volumev3 internal http://openstack-vip.net:8776/v3/%\(project_id\)s $ openstack endpoint create --region RegionOne \ volumev3 admin http://openstack-vip.net:8776/v3/%\(project_id\)s
四、在HAProxy进行配置
由于添加了API接口,就会有新的端口8776,所以需要将端口在haproxy进行监听,通过VIP地址进行转发在控制端服务器上。
vim /etc/haproxy/haproxy.cfg
listen openstack_cinder_port_8776 bind 192.168.7.248:8776 mode tcp log global server 192.168.7.100 192.168.7.100:8776 check inter 3000 fall 3 rise 5 server 192.168.7.101 192.168.7.101:8776 check inter 3000 fall 3 rise 5 backup
重启haproxy服务
# systemctl restart haproxy
五、在控制端安装并配置组件
1、安装软件包
# yum install openstack-cinder -y
2、编辑 /etc/cinder/cinder.conf
,同时完成如下动作:
在 [database]
部分,配置数据库访问:
[database] # ... connection = mysql+pymysql://cinder:CINDER_DBPASS@controller/cinder
CINDER_DBPASS,将controller改为本地解析VIP地址的域名(openstack-vip.net)。
3、在``[DEFAULT]``部分,配置``RabbitMQ``消息队列访问权限:
[DEFAULT] # ... transport_url = rabbit://openstack:RABBIT_PASS@controller
用你在 “RabbitMQ” 中为 “openstack” 选择的密码替换 “RABBIT_PASS”。
4、在 “[DEFAULT]” 和 “[keystone_authtoken]” 部分,配置认证服务访问:
[DEFAULT] # ... auth_strategy = keystone [keystone_authtoken] # ... auth_uri = http://controller:5000 auth_url = http://controller:35357 memcached_servers = controller:11211 #替换为VIP解析的域名或者VIP地址 auth_type = password project_domain_name = default user_domain_name = default project_name = service username = cinder password = CINDER_PASS #cinder密码
将 CINDER_PASS
替换为你在认证服务中为 cinder
用户选择的密码。
5、在 [oslo_concurrency]
部分,配置锁路径:
[oslo_concurrency] # ... lock_path = /var/lib/cinder/tmp
6、初始化块设备服务的数据库:
# su -s /bin/sh -c "cinder-manage db sync" cinder
在计算节点使用块设备存储
1、编辑文件 /etc/nova/nova.conf
并添加如下到其中:
[cinder] os_region_name = RegionOne
在控制端进行操作:
在重启计算节点的nova服务
# systemctl restart libvirtd.service openstack-nova-compute.service
启动块设备存储服务,并将其配置为开机自启:
# systemctl enable openstack-cinder-api.service openstack-cinder-scheduler.service # systemctl start openstack-cinder-api.service openstack-cinder-scheduler.service
六、在计算节点安装并配置cinder存储节点
1、安装支持的工具包:
安装 LVM 包:
# yum install lvm2
2、启动LVM的metadata服务并且设置该服务随系统启动:
# systemctl enable lvm2-lvmetad.service # systemctl start lvm2-lvmetad.service
3、创建LVM 物理卷 /dev/sdb
:
# pvcreate /dev/sdb Physical volume "/dev/sdb" successfully created
4、创建 LVM 卷组 cinder-volumes
:
# vgcreate cinder-volumes /dev/sdb Volume group "cinder-volumes" successfully created
5、编辑``/etc/lvm/lvm.conf``文件并完成下面的操作:
在``devices``部分,添加一个过滤器,只接受``/dev/sdb``设备,拒绝其他所有设备:
devices { ... filter = [ "a/sdb/", "r/.*/"]
安全并配置组件
1、安装软件包:
# yum install openstack-cinder targetcli python-keystone
2、编辑 /etc/cinder/cinder.conf
,同时完成如下动作:
在 [database]
部分,配置数据库访问:
[database] # ... connection = mysql+pymysql://cinder:CINDER_DBPASS@controller/cinder
用你为块设备存储数据库选择的密码替换 CINDER_DBPASS,controller为VIP解析的域名。
3、在``[DEFAULT]``部分,配置``RabbitMQ``消息队列访问权限:
[DEFAULT] # ... transport_url = rabbit://openstack:RABBIT_PASS@controller
用你在 “RabbitMQ” 中为 “openstack” 选择的密码替换 “RABBIT_PASS”。
4、在 “[DEFAULT]” 和 “[keystone_authtoken]” 部分,配置认证服务访问:
[DEFAULT] # ... auth_strategy = keystone [keystone_authtoken] # ... auth_uri = http://controller:5000 auth_url = http://controller:35357 memcached_servers = controller:11211 auth_type = password project_domain_name = default user_domain_name = default project_name = service username = cinder password = CINDER_PASS
将 CINDER_PASS
替换为你在认证服务中为 cinder
用户选择的密码。
5、在``[lvm]``部分中,配置LVM后端,包括LVM驱动,``cinder-volumes``卷组 ,iSCSI 协议和适当的 iSCSI服务。如果``[lvm]``部分不存在,则创建它:
[lvm] volume_driver = cinder.volume.drivers.lvm.LVMVolumeDriver volume_group = cinder-volumes iscsi_protocol = iscsi iscsi_helper = lioadm
6、在 [DEFAULT]
部分,启用 LVM 后端:
[DEFAULT] # ... enabled_backends = lvm
7、在 [DEFAULT]
区域,配置镜像服务 API 的位置:
[DEFAULT] # ... glance_api_servers = http://controller:9292
写VIP地址解析的域名就需要在cinder服务器上修改hosts配置文件,进行解析VIP地址:
vim /etc/hosts 192.168.7.248 openstack-vip.net
8、在 [oslo_concurrency]
部分,配置锁路径:
[oslo_concurrency] # ... lock_path = /var/lib/cinder/tmp
9、启动块存储卷服务及其依赖的服务,并将其配置为随系统启动:
# systemctl enable openstack-cinder-volume.service target.service # systemctl start openstack-cinder-volume.service target.service