声明:本文的一部分内容为翻译OpenStack官方文档里的内容,还有一部分内容来自极客学院的视频,本人最后整理而成此文章。官方文档的原文地址:
特别说明:本次安装选择ubuntu16.04LTS版本,只安装几个必须的核心组件。
一、示例架构 (注意:本次示例的架构不能用于生产环境,仅适用于个人学习,如果需要更多的设计指导,请参考:)
二、配置虚拟机网络
官方文档上是需要几台虚拟机的,控制节点一台、计算节点一台、网络节点一台。此处我们将用一台虚拟机安装所有的核心组件
三、安装时间同步服务
假如有如上所说的3台虚拟机,则在控制节点的虚拟机做如下动作:
1、apt install ntp
2、删除/var/lib/ntp/ntp.conf.dhcp文件
3、修改/etc/ntp.conf,修改内容:
server NTP_SERVER1 iburst
server NTP_SERVER2 iburst
restrict -4 default kod notrap nomodify
restrict -6 default kod notrap nomodify
注意:
a、NTP_SERVER1和NTP_SERVER2是ntp服务器的地址 (time-a.nist.gov)
b、restrict <子网掩码> |<网段> <子网掩码> [ignore|noquery|notrap|nomodiy|notrust|nokod]
ignore :关闭所有ntp服务
noquery:不提供ntp服务
nopeer:不与其他同一层的NTP服务器进行时间同步
notrap:不提供trap远程事件登录的功能
nomodiy:表示客户端不能更改ntp服务器的时间参数,但可以通过ntp服务器进行时间矫正
notrust:拒绝没有通过认证的客户端
nokod:kod技术可以阻止一种dos攻击
4、重启ntp服务:service ntp restart
配置其他节点的时间同步:
1、安装NTP服务:apt-get install ntp
2、删除/var/lib/ntp/ntp.conf.dhcp 文件
3、修改/etc/ntp.conf,修改内容:server controller(控制节点的主机名) iburst
4、重启NTP服务:service ntp restart
四、安装OpenStack资源包
1、apt install software-properties-common
2、add-apt-repository cloud-archive:pike
3、apt update && apt dist-upgrade,完成此步以后最好重启系统
4、apt install python-openstackclient
五、安装数据库 (mariadb)
1、安装数据库Mariadb — MySQL,安装命令:apt install mariadb-server python-pymysql
2、MySQL是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司。MySQL 最流行的关系型数据库管理系统,
由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库。
3、MySql架构:
4、MySql常用的存储引擎是InnoDB
InnoDB存储引擎:
支持事务,其设计目标主要面向联机事务处理(OLTP)的应用。其特点是行锁设计、支持外键,并支持类似Oracle的非锁定读,即默认读取操作不会产生锁。从MySQL5.5.8版本开始是默认的存储引擎。
InnoDB存储引擎将数据放在一个逻辑的表空间中,这个表空间就像黑盒一样由InnoDB存储引擎自身来管理。从MySQL 4.1(包括4.1)版本开始,可以将每个InnoDB存储引擎的表单独存放到一个独立的ibd文件中。此外,InnoDB存储引擎支持将裸设备(row disk)用于建立其表空间。
InnoDB通过使用多版本并发控制(MVCC)来获得高并发性,并且实现了SQL标准的4种隔离级别,默认为REPEATABLE级别,同时使用一种称为netx-key locking的策略来避免幻读(phantom)现象的产生。除此之外,InnoDB存储引擎还提供了插入缓冲(insert buffer)、二次写(double write)、自适应哈希索引(adaptive hash index)、预读(read ahead)等高性能,对于表中数据的存储,InnoDB存储引擎采用了聚集(clustered)的方式,每张表都是按主键的顺序进行存储的,如果没有显式地在表定义时指定主键,InnoDB存储引擎会为每一行生成一个6字节的ROWID,并以此作为主键。
InnoDB存储引擎是MySQL数据库最为常用的一种引擎,Facebook、Google、Yahoo等公司的成功应用已经证明了InnoDB存储引擎具备高可用性、高性能以及高可扩展性。对其底层实现的掌握和理解也需要时间和技术的积累。如果想深入了解InnoDB存储引擎的工作原理、实现和应用,可以参考《MySQL技术内幕:InnoDB存储引擎》一书。
5、MySql表空间
共享表空间: 数据库内所有的表数据,索引文件全部放在一个文件中
独占表空间: 每张表都将会生成以独立的文件方式来进行存储
指定参数:innodb_file_per_table
性能:独占表空间优于共享表空间
注:共享表空间以及独占表空间都是针对数据的存储方式而言的。
共享表空间: 某一个数据库的所有的表数据,索引文件全部放在一个文件中,默认这个共享表空间的文件路径在data目录下。 默认的文件名为:ibdata1 初始化为10M。
独占表空间: 每一个表都将会生成以独立的文件方式来进行存储,每一个表都有一个.frm表描述文件,还有一个.ibd文件。 其中这个文件包括了单独一个表的数据内容以及索引内容,默认情况下它的存储位置也是在表的位置之中。
6、安装好Mariadb以后,接下来的流程
编辑/etc/mysql/mariadb.conf.d/99-openstack.cnf,添加如下内容:
[mysqld]
bind-address = 10.0.0.11
default-storage-engine = innodb
innodb_file_per_table = on
max_connections = 4096
collation-server = utf8_general_ci
character-set-server = utf8
7、重启数据库服务
service mysql restart
8、为数据库增加安全性
运行:mysql_secure_installation
做如下操作: a)为root用户设置密码 b)删除匿名账号 c)取消root用户远程登录 d)删除test库和对test库的访问权限 e)刷新授权表使修改生效
六、安装消息队列服务RabbitMQ
1、OpenStack使用消息队列在不同的服务之间协调操作和状态信息
OpenStack支持多种消息服务软件:RabbitMQ, Qpid, and ZeroMQ.
MQ服务将运行于Controller Node节点
RabbitMQ是流行的开源消息队列系统
virtual host
— 命名空间的作用
— 多个user共同使用一个virtual host
— 默认命名空间是“/”
— 不同的命名空间之间的资源是不能访问的
2、安装命令
apt install rabbitmq-server
3、添加一个交openstack的用户
rabbitmqctl add_user openstack RABBIT_PASS ,RABBIT_PASS是需要配置的密码
4、查看所有的用户
rabbitmqctl list_users
5、为openstack用户添加读写权限
rabbitmqctl set_permissions openstack ".*" ".*" ".*"
6、特殊说明
virtual host只是起到一个命名空间的作用,所以可以多个user共同使用一个virtual host,文章开头写的vritual_host = ‘/’,这个是系统默认的,就是说当我们创建一个到rabbitmq的connection时候,它的命名空间是‘/’,需要注意的是不同的命名空间之间的资源是不能访问的,比如exchang,queue ,bingding等。首先我们可以建立一个测试用户(如果你想用系统默认的guest也可以),rabbitmqctl add_user test 123456 ,这样我们就新建了一个可以连到rabbitmq的用户,用户名时test,密码是123456,我们可以用 rabbitmqctl list_users 看看有多少个用户了,可以看到有guest和test了吧, 然后 我们通过 rabbitmqctl add_vhosts命令新建一个virtual host : rabbitmqctl add_vhosts test_host,我们通过rabbitmqctl list_vhosts命令看看现在系统有几个vhost了。可以看到有两个,一个是系统默认的 '/', 还有一个就 是我们新建的 test_host。