1. 3.2 OpenStack环境准备

1.1.1. 3.2.1 OpenStack实战案例

从本章开始,开始介绍OpenStack的各个组件,为了让读者更直观的了解组件的作用和组件之间的依赖关系,将通过理论和实践部署相结合的方式进行讲解。 请参考《实验环境》来完成本实例的环境准备工作。

下图是我们快速学习OpenStack的实战架构图,目标是先以最小组件依赖运行一个OpenStack平台,然后再后面的章节添加其它组件。

注意:在后面的实验过程中,我们会使用到控制节点部署和计算节点部署这样的描述方法,请到对应的主机上进行操作。

1.1.2. 3.2.2 NTP时间同步

各个服务器的时间同步是OpenStack部署和运维中往往被忽视的问题。如果各个节点时间不同步,会影响OpenStack平台的正常。所以需要保证所有节点时间同步。 在CentOS 7推荐使用Chrony来进行时间同步。 Chrony是一个开源的自由软件,它能帮助你保持系统时钟与时钟服务器(NTP)同步,因此让你的时间保持精确。它由两个程序组成,分别是chronyd和chronyc。chronyd是一个后台运行的守护进程,用于调整内核中运行的系统时钟和时钟服务器同步。它确定计算机增减时间的比率,并对此进行补偿。chronyc提供了一个用户界面,用于监控性能并进行多样化的配置。它可以在chronyd实例控制的计算机上工作,也可以在一台不同的远程计算机上工作。

控制节点部署 本实例中,我们把控制节点的chrony作为内部的时钟服务器,其它节点都同步控制节点的时间,如果你的环境中已经存在时间服务器可以设置为已经存在的时间服务器。

  1. 安装chrony
    [root@linux-node1 ~]# yum install -y chrony
    
  2. 配置chrony

    [root@linux-node1 ~]# vim /etc/chrony.conf
    #设置时钟服务器,可以设置多个,这里推荐使用阿里云的公共NTP时间服务器
    server time1.aliyun.com iburst
    server time2.aliyun.com iburst
    server time3.aliyun.com iburst
    server time4.aliyun.com iburst
    #设置允许192.168.0.0/16网段连接
    allow 192.168.56.0/24
    
  3. 启动 NTP 服务并将其配置为开机启动:

    [root@linux-node1 ~]# systemctl enable chronyd.service
    [root@linux-node1 ~]# systemctl start chronyd.service
    

其它节点部署

  1. 安装chrony
    [root@linux-node2 ~]# yum install -y chrony
    
  2. 配置chrony
    [root@linux-node2 ~]# vim /etc/chrony.conf
    #设置为控制节点的IP地址,并将其它配置全部删除。
    server 192.168.56.11 iburst
    
  3. 启动 NTP 服务并将其配置为开机启动:
    [root@linux-node2 ~]# systemctl enable chronyd.service
    [root@linux-node2 ~]# systemctl start chronyd.service
    

验证同步时间

在同时时间之前要确保你的时区是正确的。CentOS7提供了timedatectl用来修改。

[root@linux-node1 ~]# timedatectl set-timezone Asia/Shanghai
在所有节点上执行chronyc source保证配置都正确
[root@linux-node1 ~]# chronyc sources

1.1.3. 3.2.3 基础软件包安装

基础软件包需要在所有的OpenStack节点上进行安装,包括控制节点和计算节点。

  1. 安装EPEL仓库
# rpm -ivh http://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpm
  1. 安装OpenStack仓库
# yum install -y centos-release-openstack-train
  1. 安装OpenStack客户端
# yum install -y python-openstackclient

注意:本文的实验环境是关闭SELinux,如果你启用了,需要安装openstack-selinux 包实现对OpenStac服务的安全策略进行自动管理。

  1. 安装openstack SELinux管理包

虽然我们在实验环境准备中,已经要求环境中关闭SELinux,但是为了以防万一,你还是需要安装上openstack-selinux。

# yum install -y openstack-selinux

OpenStack源码包

本案例使用的是yum安装,如果你想使用源码进行OpenStack部署和开发,目前OpenStack所有的源码包,都可以在这里找到http://tarballs.openstack.org/,同时也可以访问https://launchpad.net/openstack/获取到每个项目的详情和下载地址。

1.1.4. 3.2.4 MySQL数据库部署

数据库是OpenStack的基础组件之一,OpenStack的大多数组件如KeyStone、Glance、Nova、Neutron和Cinder都需要使用数据库存储数据,包括Horizon也可以使用数据库来进行Session的存储。因此数据库的可用率会直接影响到整个OpenStack平台的可用率。如果数据库故障,OpenStack平台将无法创建新的虚拟机和管理虚拟机,但是不不会影响到正在运行的虚拟机。
OpenStack支持MySQL、PostgreSQL等多种数据库,需要注意的是在CentOS7上默认不是MySQL,而是mariadb。 你可以将MySQL Server安装在任意的服务器上,当然最好是专用的数据库服务器,使用更多的CPU和IO性能更好的硬盘。 注:生产环境可以咨询DBA进行MySQL的性能优化和高可用的配置。

  1. MySQL安装
[root@linux-node1 ~]# yum install -y mariadb mariadb-server python2-PyMySQL
  1. 修改MySQL配置文件

    默认情况下MySQL已经包含了/etc/my.cnf.d的目录,我们需要把配置放在该目录下即可。

    [root@linux-node1 ~]# vim /etc/my.cnf.d/openstack.cnf
    [mysqld]
    bind-address = 192.168.56.11 #设置监听的IP地址
    default-storage-engine = innodb  #设置默认的存储引擎
    innodb_file_per_table = on#使用独享表空间
    collation-server = utf8_general_ci #服务器的默认校对规则
    character-set-server = utf8 #服务器安装时指定的默认字符集设定
    max_connections = 4096 #设置MySQL的最大连接数,生产请根据实际情况设置。
    
  2. 启动MySQL Server并设置开机启动

[root@linux-node1 ~]# systemctl enable mariadb.service 
[root@linux-node1 ~]# systemctl start mariadb.service
  1. 进行数据库安全设置
[root@linux-node1 ~]# mysql_secure_installation
  1. 数据库创建

在部署完MySQL数据后,可以将各个服务的数据库创建上,给后期安装使用。注意在实际生产环境中,一定要使用复杂度更高的密码和做好访问控制,这里实验使用用户名和密码相同。

[root@linux-node1 ~]# mysql -u root -p
Enter password: 
…
MariaDB [(none)]>

#Keystone数据库

CREATE DATABASE keystone;
GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' IDENTIFIED BY 'keystone';
GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY 'keystone';

#Glance数据库

CREATE DATABASE glance;
GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'localhost' IDENTIFIED BY 'glance';
GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' IDENTIFIED BY 'glance';

#Placement数据库

CREATE DATABASE placement;
GRANT ALL PRIVILEGES ON placement.* TO placement@'localhost' IDENTIFIED BY 'placement';
GRANT ALL PRIVILEGES ON placement.* TO placement@'%' IDENTIFIED BY 'placement';

#Nova数据库

CREATE DATABASE nova;
GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' IDENTIFIED BY 'nova';
GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' IDENTIFIED BY 'nova';

CREATE DATABASE nova_api;
GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'localhost' IDENTIFIED BY 'nova';
GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'%' IDENTIFIED BY 'nova';

CREATE DATABASE nova_cell0;
GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'localhost' IDENTIFIED BY 'nova';
GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'%' IDENTIFIED BY 'nova';

#Neutron 数据库

CREATE DATABASE neutron;
GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'localhost' IDENTIFIED BY 'neutron';
GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'%' IDENTIFIED BY 'neutron';

#Cinder数据库

CREATE DATABASE cinder;
GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'localhost' IDENTIFIED BY 'cinder';
GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'%' IDENTIFIED BY 'cinder';

数据库部署完毕后,后期的很多操作都可以通过命令,甚至直接修改数据库的数据来进行。注意:本实例为了简化步骤,使用了较为简单的密码,生产环境请设置符合运维规范的复杂密码来进行替换。 注意:一定要给数据库做好相关的高可用和备份措施,像对待生成业务数据库一样对待它哦。

1.1.5. 消息代理RabbitMQ

OpenStack 使用(Message broker)消息代理在各个服务之间进行协调和状态管理。OpenStack支持三种开源的消息队列服务。分别为RabbitMQ、Qpid、ZeroMQ。Openstack默认使用RabbitMQ。 消息队列在OpenStack整个架构中扮演着交通枢纽的作用,正是因为OpenStack部署的灵活性、各个组件的松耦合、架构的扁平化,反而使得OpenStack更加依赖于消息队列。OpenStack的控制、计算、网络与存储服务均需要通过消息队列进行通信。 你可以将RabbitMQ部署在独立的服务器中,或者使用RabbitMQ集群这取决于你的实际情况,在实验环境,部署在控制节点即可。

  1. 安装RabbitMQ
[root@linux-node1 ~]# yum install -y rabbitmq-server
  1. 设置开启启动,并启动RabbitMQ
[root@linux-node1 ~]# systemctl enable rabbitmq-server.service
[root@linux-node1 ~]# systemctl start rabbitmq-server.service
  1. 添加openstack用户。

创建一个openstack用户,密码为openstack。注意实际使用中进行密码修改,这里设置的用户名和密码在后面配置OpenStack组件的时候需要在配置文件里面设置。

[root@linux-node1 ~]# rabbitmqctl add_user openstack openstack
Creating user "openstack" ...
  1. 给刚才创建的openstack用户,创建权限。
[root@linux-node1 ~]# rabbitmqctl set_permissions openstack ".*" ".*" ".*"
Setting permissions for user "openstack" in vhost "/" ...
  1. 启用Web监控插件

RabbitMQ自带了一个Web监控插件,可以通过Web界面监控RabbitMQ的运行状态。同时也提供了HTTP API。可以方便的集成到Nagios、Zabbix等监控平台上。 Web监控插件启用后就可以通过http://IP:15672/来访问web管理界面。

[root@linux-node1 ~]# rabbitmq-plugins list
[root@linux-node1 ~]# rabbitmq-plugins enable rabbitmq_management
(注:如果主机名不能解析,rabbitMQ将无法启动。在生产应用时建议设置为集群模式,建议三个节点。1个硬盘节点、两个内存节点。)
[root@linux-node1 ~]# lsof -i:15672
COMMAND  PID     USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
beam    2620 rabbitmq   15u  IPv4  16805      0t0  TCP *:15672 (LISTEN)

默认情况下RabbitMQ服务使用5672端口,而Web管理插件监听15672端口,直接在浏览器输入http://192.168.56.11:15672

RabbitMQ默认的用户名和密码均为guest。之前创建的openstack的用户是无法通过Web界面登录的。

(图2.2.2)

实践经验:消息队列收发消息的性能和消息队列的HA能力直接影响OpenStack的性能和高可用。如果消息队列Down机,OpenStack将无法创建新的云主机,以及进行其它的管理工作。所以在企业生产环境中,需要使用RabbitMQ的集群来保证可用性。同时做好监控工作,RabbitMQ自带HTTP的API,便于集成到企业的监控平台上。

Copyright © 赵班长@新运维社区 2019 all right reserved,powered by Gitbook该文件修订时间: 2020-05-15 21:55:54

results matching ""

    No results matching ""