十、安装mariadb服务(在controller上root用户进行)

openstack持久化数据需要存储到数据库中,如nova相关的主机信息,instance状态,网络相关的网络、子网、端口、地址范围、agentcinder相关的volume存储,卷的分配情况等等。一般而言,在构建controller的高可用集群上,MySQL是必须要考虑的地方。数据库一般运行在controller节点,其他节点只需安装MySQL-python包即

# rpm -aq | grep -i mysql
# systemctl stop mariadb
# yum -y remove mysql mysql-server mysql-libs mysql-devel compat-mysql51 mariadb mariadb-server
# yum -y install mariadb mariadb-server MySQL-python
# vi /etc/my.cnf
#在[mysqld]末尾下面添加
default-storage-engine = innodb
innodb_file_per_table = 1

collation-server = utf8_general_ci
init-connect = 'SET NAMES utf8'
character-set-server = utf8

# systemctl restart mariadb
# systemctl enable mariadb
# systemctl status mariadb.service
#修改mariadb数据库root密码为openstack
# /usr/bin/mysqladmin -u root password 'openstack'
#登录验证
# mysql -uroot -popenstack
MariaDB [(none)]> exit
#进行mariadb相关简单配置
# mysql_secure_installation

十一、安装Rabbitmq消息队列服务(在controller上root用户进行)

    openstack是使用消息队列用于组件之间的通信的桥梁,如nova,neutron,cinder这些组件之间交互都需要使用到消息队列,openstack旨在创建一个大规模的云环境,消息队列是众多组件交互所必须的桥梁。

      例创建虚拟机,首先nova-api接受用户创建instance的请求,后由nova-sceduler选择到合适的compute节点,然后生成(生产者)创建instance的命令放到消息队列中,被选中的compute节点(消费者)会从队列中提取队列信息,按照需求创建instance,创建完成之后,再放入队列中,返还给controller,从而实现生产和消费的过程

    openstack中能够支持的消息队列有多重,包括Qpid,Rabbitmq和ZeroMQ,其中Qpid在早期的icehouse中使用,以使用者经验来说有两方面的缺陷:1. 默认只支持4000个connection,使用需要修改,2. Qpid对集群支持不好,需要借助其他高可用软件如pacemaker来完成,并且对数据的持久化支持不好,不建议使用。rabbitmq则自身就已经携带有集群机制,能够支持将队列放到内存和磁盘,并且对数据持久化的支持很好,并且本身就提供有一个Web管理界面,用于配置和监控,建议使用rabbitmq作为openstack中的消息队列。

(1)导入KEY
# mkdir /data/rabbitmq
# cd /data/rabbitmq
# vi rabbitmq-signing-key-public.asc.txt
#在新建文本文档rabbitmq-signing-key-public.asc.txt内添加以下内容:(末尾不要空行)
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.4.6 (GNU/Linux)

mQGiBEaOQ/IRBACs/n609zN+OzlK9qDkFWwYKfPG+BlgqBj5MSy0XE2K8cE3bWSV
2WftTe/TGEfW0hknXt1PyBla0cnO9Up1xCn142vo8bvUug8WjrxLQBBiAf11FAOR
dt9roGe4IWw/Lakgb88re09ZYKmOL9H7MEpvMqtjdWjFSq4zeeGa8rGEswCgnQLb
ZD/MNlUNQwQVCs+vVRdgpzcD+QELSc2EeYl4tef0NiUaZQt+mjFTs3DjQNDTjXao
ETVAqECx4kavcshx5tSE5JbbQPIMiUgh0h9J3z3uZsBVnx6P82aW/QTw+jLhsQry
/i3Z/+pS66mk6EWhAAYF/SPVqM/06BZh0ZvUmeG9WGGJXD9CUN1Wfi2mt42L2zhT
xg3uBACoIs5/GORi0H2i+blLiFSxTroXw+TdxiP+mfjdPho0oXJQTljXBgG70VfX
XW9sWsYtekqXBsmwMcbCZTjZGul/8jAUlUoYfthRw9KpP9N8Q7wB8Flx9jEv0M0H
tV1KTrLuXNZvEAB1sECMa7RRrV1yO4wyYDsOXiZNTL6rYugOU7QwUmFiYml0TVEg
UmVsZWFzZSBTaWduaW5nIEtleSA8aW5mb0ByYWJiaXRtcS5jb20+iGAEExECACAF
AkaOQ/ICGwMGCwkIBwMCBBUCCAMEFgIDAQIeAQIXgAAKCRD3uM6mBW6OVkymAJ0R
6MwiZNRuTAttgYf1Xe7dK7HpzACfZioV/LqnDh7XvcTJEl+r4GB19by5Ag0ERo5D
+xAIAKu1ZxtAZjwlNLb0L5uwrEP7nTbRTNUYoEtE8+CNDSLLlmRIvBriKYNGicnz
Ebq2kDnAoyH38ACIMNayrkqc6I4l3BD2sv7zPZCd4qAbyFCu6gnewTANTWkVuH60
R65QQ8pM8sM+VZAMSoMkDSP4u248xOzFyGgVYuuWuR/sIRcaA02FW9TGvZQ7fNoF
rf6UbKSYkjpY767IW8q0b68vKzSLw0GQvH+dsvhaj80hjKJ06+IZ9Gdi/b4+AIT2
YWyWmrHo2QhnUmsarNdtusesQGQtiYgZw95PJJkzR0AttuPPfPNGLYZtVJenvOCC
jsK5uUL3/eEQ3UWGs+BKEyA/qLMAAwUH/2kIFCdgCw2DnL87TO+vruhGjsM7NjXf
57F4ojTdblFd6AerjRhMgICdzCF9WkFROdBSyQ/GajoNU81kbHZglxmKyKkVwWEb
G7pmSIc/sk5Z7OP/zrg4h8ZGzvMbRy0XLf86lQhbDE3AcHMeJCcShIWAHAbygnYW
j0KRhZiyqxqx4mrZQDZEWI7S1G9YNvgu1GS9EEKEpmxDEOME9nJZLi9o7mTeD1QV
TyOzWHkpQ42QcgrFuG7RMxDaQK6bdinNTl8aPmMoPamGzotSt4aMoVMiNxjatnlH
pqQ5UJlqbB5FGLnwJ0773WzgRdxIwSIxkFhL/Mq4agf4an8151kqcZCISQQYEQIA
CQUCRo5D+wIbDAAKCRD3uM6mBW6OVhLmAKCYY152B/10n7aUNKejs92NsNAnPACf
ZwbDOKBXGfkCPuRx5j/AGneASNU=
=Ry+c
-----END PGP PUBLIC KEY BLOCK-----

#导入公钥
# rpm --import rabbitmq-signing-key-public.asc.txt


(2)安装rabbitmq
# yum install rabbitmq-server -y
# cd /etc/rabbitmq
#开启远程访问
# echo "[{rabbit, [{loopback_users, []}]}]." >rabbitmq.config
# service rabbitmq-server start
#查询RabbitMQWeb管理插件是否开启
# /usr/lib/rabbitmq/bin/rabbitmq-plugins list
#安装RabbitMQWeb管理插件
# rabbitmq-plugins enable rabbitmq_management
# service rabbitmq-server restart
# /usr/lib/rabbitmq/bin/rabbitmq-plugins list
#查看用户列表
# rabbitmqctl list_users
# chkconfig rabbitmq-server on

http://10.20.0.10:15672/进入管理界面来查看rabbitMQ的信息。默认管理员用户和密码都是:guest

(3)为nova,neutron,cinder,heat创建用户并授予权限
# rabbitmqctl add_user nova NOVA_MQPASS
# rabbitmqctl add_user neutron NEUTRON_MQPASS
# rabbitmqctl add_user cinder CINDER_MQPASS
# rabbitmqctl add_user heat HEAT_MQPASS
# rabbitmqctl list_users

#执行授权操作
# rabbitmqctl set_permissions -p / nova '.*' '.*' '.*'
# rabbitmqctl set_permissions -p / neutron '.*' '.*' '.*'
# rabbitmqctl set_permissions -p / cinder '.*' '.*' '.*'
# rabbitmqctl set_permissions -p / heat '.*' '.*' '.*'
# rabbitmqctl list_permissions