openstack
Openstack 介绍
什么是openstack
OpenStack 是当今最具影响力的云计算管理工具——通过命令或者基于 Web 的可视化控制面板来管理 IaaS 云端的资源池(服务器、存储和网络)
云计算 是通过虚拟化(kvm)技术去实现的,它是一种按量付费的模式!
OpenStack 系统或其演变版本目前被广泛应用在各行各业,包括自建私有云、公共云、租赁私有云及公私混合云
OpenStack 支持 KVM、Xen、Lvc、Docker等虚拟机软件或容器,默认为 KVM
OpenStack 采用 Python语言开发,遵循 Apache 开源协议,因此相比 CloudStack 来说,更轻量化,效率更高
官网
OpenStack 中有哪些组件
Keystone 认证所有 OpenStack 服务并对其进行授权。同时,它也是所有服务的端点目录。
-
glance: 提供虚拟机镜像模板 [镜像模板是用于创建虚拟机的]
[Glance 可存储和检索多个位置的虚拟机磁盘镜像。]
-
nova: 主要作用: 提供虚拟机的运行环境; nova本身是没有虚拟化技术的,它是通过调用kvm来提供虚拟化功能的。[管理虚拟机]
[管理虚拟机的整个生命周期:创建、运行、挂起、调度、关闭、销毁等。这是真正的执行部件。接受 DashBoard 发來的命令并完成具体的动作。但是 Nova 不是虛拟机软件,所以还需要虚拟机软件(如 KVM、Xen、Hyper-v 等)配合]
-
neutron: 给虚拟机提供网络。
[Neutron 能够连接其他 OpenStack 服务并连接网络。]
-
dashboard [Horizon]: web管理界面
-
Swift: 用于存储镜像 [对象存储]
[是一种高度容错的对象存储服务,使用 RESTful API 来存储和检索非结构数据对象。]
-
Cinder 给虚拟机添加硬盘
[通过自助服务 API 访问持久块存储。]
-
Ceilometer: 监控流量,按量付费
-
Heat: 编排
[启动10台云主机,每台云主机运行不同的脚本,形成自动化起服务]
openstack 安装
基本环境
虚拟机规划
节点 主机名 内存 IP 作用 cpu 磁盘空间 控制节点 controller 大于3G 10.0.0.11 管理 打开虚拟化 50G 计算节点 compute 大于1G 10.0.0.31 运行虚拟机 打开虚拟化 50G # 修改主机名 hostnamectl set-hostname controller hostnamectl set-hostname compute # host解析 < 控制节点 和 计算节点 > vim /etc/hosts …… 10.0.0.11 controller 10.0.0.31 compute
配置yum 源
< 控制节点 和 计算节点>
# 挂载本地镜像 mount /dev/cdrom /mnt/ # 设置开机自启 echo mount /dev/cdrom /mnt/ >> /etc/rc.local;chmod +x /etc/rc.local # 配置 openstack 包 curl -O http://10.0.0.98/openstack/openstack_rpm.tar.gz # 拉取软件包, 这里是我自己搭建的 私有仓库 tar zxvf openstack_rpm.tar.gz -C /opt/ # 解压软件包到 /opt 目录 scp -r /opt/repo 10.0.0.31:/opt/ # 复制到 计算节点上 # 配置本地yum 源 < 所有节点 > vim /etc/yum.repos.d/local.repo [local] name=local gpgcheck=0 baseurl=file:///mnt [openstack] name=openstack gpgcheck=0 baseurl=file:///opt/repo
检测
[root@controller ~]# yum repolist Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile repo id repo name status local local 3,894 openstack openstack 598
关闭安全服务
关闭防火墙
systemctl stop firewalld.service; systemctl disable firewalld.service
关闭selinux
setenforce 0
设置时间服务
# 所有节点[安装软件包]
yum install chrony
# 控制节点
vim /etc/chrony.conf
……
server ntp6.aliyun.com iburst
……
allow 10.0.0.0/24 // 设置同步的网段, 也可以设置所有: all
- 重启服务
systemctl restart chronyd
systemctl enable chronyd
# 计算节点
vim /etc/chrony.conf
……
server 10.0.0.11 iburst
- 重启服务
systemctl restart chronyd
systemctl enable chronyd
安装openstack
安装 OpenStack 客户端
yum -y install python-openstackclient # < 所有节点 >
安装 openstack-selinux
RHEL 和 CentOS 默认启用了 SELinux . 安装
openstack-selinux
软件包以便自动管理 OpenStack 服务的安全策略:yum -y install openstack-selinux # < 所有节点 >
SQL数据库
大多数
OpenStack
服务使用SQL
数据库来存储信息。 数据库运行在== 控制节点 \textcolor{red}{控制节点} 控制节点==上
安装软件包
yum -y install mariadb mariadb-server python2-PyMySQL # `python2-PyMySQL` python模块
相关配置
- 创建并编辑
/etc/my.cnf.d/openstack.cnf
,然后完成如下操作:在
[mysqld]
部分,设置[ bind-address ]值为 本机监听的 IP 地址;以使得其它节点可以通过IP
地址访问数据库:[mysqld] ... bind-address = 10.0.0.11
在
[mysqld]
部分,设置如下键值, 来启用一些必要的选项和 UTF-8 字符集:[mysqld] ... default-storage-engine = innodb # 默认存储引擎 innodb_file_per_table # 独立表空间文件 max_connections = 4096 # 最大连接数 collation-server = utf8_general_ci character-set-server = utf8 # 默认字符集 utf-8
重启服务
systemctl enable mariadb.service;systemctl start mariadb.service # 重启 并 开机自启
数据库安全初始化
为了保证数据库服务的安全性,运行
mysql_secure_installation
脚本。特别需要说明的是,为数据库的root用户设置一个适当的密码。
如果不执行,那么启动后,需要同步数据库时就会报错
# mysql_secure_installation
……
# 输入root用户的当前密码
Enter current password for root (enter for none): 回车
……
# 设置 root 密码?[y/n]
Set root password? [Y/n] n // 这里没有设置密码,因为的访问较快,如果在企业就必须设置
……
# 删除匿名用户?[Y/n]
Remove anonymous users? [Y/n] y
……
# 不允许 root 用户远程登录?[Y/n]
Disallow root login remotely? [Y/n] y
……
# 是否删除测试数据库并访问它?[Y/n]
Remove test database and access to it? [Y/n] y
……
# 现在重新加载特权表吗?[Y/n]
Reload privilege tables now? [Y/n] y
# 成功标准
Thanks for using MariaDB!
消息队列
多用于分布式系统之间 进行传递信息 ———— 消息队列
安全并配置组件
1.安装包
yum -y install rabbitmq-server
2. 重启 并 开机自启
systemctl enable rabbitmq-server.service;systemctl start rabbitmq-server.service
3.添加
openstack
用户 [使openstack所有服务都能用上消息队列]rabbitmqctl add_user openstack RABBIT_PASS // 创建用户密码 Creating user "openstack" ... ...done.
- 可以用合适的密码替换
RABBIT_DBPASS
,建议不修改,不然后面全部都要修改。4.给
openstack
用户配置写和读权限rabbitmqctl set_permissions openstack ".*" ".*" ".*" //可读、可写、可配置 Setting permissions for user "openstack" in vhost "/" ... ...done.
# 查看端口 netstat -ntulp | grep 5672 tcp 0 0 0.0.0.0:25672 0.0.0.0:* LISTEN 29675/beam.smp // 集群之间同步数据 用的端口 tcp6 0 0 :::5672 :::* LISTEN 29675/beam.smp // 客服端使用
5.启用 rabbitmq 的管理插件 < 可省略 >
rabbitmq-plugins enable rabbitmq_management // 执行后会产生 15672 端口< 插件的 > The following plugins have been enabled: mochiweb webmachine rabbitmq_web_dispatch amqp_client rabbitmq_management_agent rabbitmq_management Applying plugin configuration to rabbit@controller... started 6 plugins. # 检查端口 netstat -ntulp | grep 5672 tcp 0 0 0.0.0.0:25672 0.0.0.0:* LISTEN 29675/beam.smp tcp 0 0 0.0.0.0:15672 0.0.0.0:* LISTEN 29675/beam.smp tcp6 0 0 :::5672 :::* LISTEN 29675/beam.smp # 访问 IP:15672 # 默认密码 用户: guest 密码: guest
Memcached
- 认证服务认证缓存使用Memcached缓存token。缓存服务memecached运行在控制节点。
- token: 用于验证用户登录信息, 利用memcached将token缓存下来,那么下次用户登录时,就不需要验证了[提高效率]
安装软件包
yum install -y memcached python-memcached
修改配置文件
sed -i 's/127.0.0.1/10.0.0.11/g' /etc/sysconfig/memcached
重启 并 开机自启
systemctl enable memcached.service;systemctl restart memcached.service
认证服务
- 认证管理,授权管理和服务目录
- 服务目录 :用户创建镜像[9292],虚拟机[nova:8774],网络[9696]等服时,都要访问该服务的服务端口,而openstack的服务较多,用户记起来很麻烦,即keystone提供的服务目录解决了这一问题
先决条件
连接到数据库服务器:
mysql # 这里直接使用 mysql 命令即可 [应为我们再初始化的时候没有设置密码]
创库并授权
# 创建 keystone数据库 并 对 keystone数据库授予恰当的权限: CREATE DATABASE keystone; GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' \ IDENTIFIED BY 'KEYSTONE_DBPASS'; GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' \ IDENTIFIED BY 'KEYSTONE_DBPASS';
退出数据库
exit
安装相关软件包
yum -y install openstack-keystone httpd mod_wsgi
修改配置文件
编辑文件
/etc/keystone/keystone.conf
并完成如下操作过滤配置文件
# 先拷贝一份 cp /etc/keystone/keystone.conf{ ,.bak} # 过滤 egrep -v '^$|#' /etc/keystone/keystone.conf.bak > /etc/keystone/keystone.conf
在
[DEFAULT]
部分,定义初始管理令牌( token )的值:[DEFAULT] ... admin_token = ADMIN_TOKEN
官网要求替换值,由于我们省略了生成token的步骤,所以我们直接使用 ADMIN_TOKEN 就可以了
在
[database]
部分,配置数据库访问:[database] ... connection = mysql+pymysql://keystone:KEYSTONE_DBPASS@controller/keystone
在
[token]
部分,配置Fernet UUID令牌的提供者。[token] ... provider = fernet
keystone 认证方式: UUID、 PKI、 Fernet; # 都只是生成一段随机字符串的方法
检测
md5sum /etc/keystone/keystone.conf d5acb3db852fe3f247f4f872b051b7a9 /etc/keystone/keystone.conf
同步数据库
< 初始化身份认证服务的数据库 >
同步数据库前
mysql keystone -e "show tables;" # 不会有表
同步数据库
su -s /bin/sh -c "keystone-manage db_sync" keystone
su: 切换用户 -s: 指定 shell + **shell -c: 指定执行的命令 + 命令 keystone: 用户 # 意思: 切换到 keystone 用户执行 /bin/shell < keystone-manage db_sync > 命令
同步数据库后
mysql keystone -e "show tables;" # 会出现表
初始化Fernet
keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
验证结果
在 /etc/keystone 目录下会多一个 Fernet keys 目录
配置 Apache HTTP 服务器
编辑
/etc/httpd/conf/httpd.conf
文件,配置ServerName
选项为控制节点: [大约在95行]echo 'ServerName controller' >> /etc/httpd/conf/httpd.conf # 提高启动 http 速度
创建文件并编辑
/etc/httpd/conf.d/wsgi-keystone.conf
。vim /etc/httpd/conf.d/wsgi-keystone.conf Listen 5000 Listen 35357 <VirtualHost *:5000> WSGIDaemonProcess keystone-public processes=5 threads=1 user=keystone group=keystone display-name=%{ GROUP} WSGIProcessGroup keystone-public WSGIScriptAlias / /usr/bin/keystone-wsgi-public WSGIApplicationGroup %{ GLOBAL} WSGIPassAuthorization On ErrorLogFormat "%{cu}t %M" ErrorLog /var/log/httpd/keystone-error.log CustomLog /var/log/httpd/keystone-access.log combined <Directory /usr/bin> Require all granted