搭建openstack平台的总结
Openstack是一个开源的云计算平台,可以提供基础设施即服务(IaaS)的功能,让用户可以在自己的数据中心部署和管理虚拟化的资源。
Openstack是当今最具影响力的云计算管理工具——通过命令或者基于web的可视化Iaas云端的资源池(服务器、存储和网络)云计算是通过虚拟化(kvm)技术去实现的,它是一种按量付费的模式。
本文主要介绍了在CentOS-7-x86_64-DVD-1708.iso系统上,使用VM搭建Openstack-M版的双节点环境的过程,以及在搭建过程中可能会遇到的一些问题和解决方案。双节点环境包括一个控制节点(controller)和一个计算节点(compute),控制节点负责提供Openstack的各种服务和管理功能,计算节点负责提供计算资源和运行虚拟机。
搭建Openstack
- 一、基础环境配置
- 1.基础环境
- 2.网络配置
- 3.配置yum 源
- 4.关闭安全服务
- 5.克隆
- 6.时间同步
- 7.安装通用包
- 8. 安装SQL数据库
- 9.安装RabbitMQ消息队列
- 10.安装Memcached缓存服务
一、基础环境配置
1.基础环境
- (下图的要求可根据自身情况进行更改)虚拟机规划
节点 | 控制节点 | 计算节点 |
---|---|---|
主机名 | controller | compute |
内存 | 大于3G | 大于10G |
IP | 10.0.0.11 | 10.0.0.31 |
作用 | 管理 | 运行虚拟机 |
cpu | 打开虚拟化 | 打开虚拟化 |
磁盘空间 | 50G | 50G |
2.网络配置
为控制节点(10.0.0.11)和计算节点(10.0.0.31)分配固定的IP地址,并在两个节点上配置好主机名和hosts文件解析(将主机名与ip地址相关联),使得两个节点可以互相通信。同时,配置好网关和DNS服务器
- 分别修改主机名
# hostnamectl set-hostname controller
# hostnamectl set-hostname compute
- DNS域名解析,修改两个节点的/etc/hosts文件,这个文件中记录这主机名称和IP地址的对应表,增加如下内容:
# vim /etc/hosts
10.0.0.11 controller
10.0.0.31 compute
- 如果两机相同进行ping controller,ping compute,可拼通即成功,这样只要输入主机名称,系统就会去加载hosts文件并查找对应关系,找到对应的IP,就可以访问这个IP的主机了。
3.配置yum 源
挂载本地镜像,并设置开启自启动挂载本地镜像源,再配置openstack包(可以通过,拉取软件包,或者上传本地文件),在所有节点中配置本地yum源,在本地挂载mnt并设置文件所在处及openstack的文件所在处,通过yum repolist 检测本地镜像是否有local和openstack。
配置openstack包,在评论区获取,通过远程连接上传
解压到/opt/目录下
# tar -xzvf openstack_rpm.tar.gz -C /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
进行检测,repo id 出现了local和openstack
# yum repolist
4.关闭安全服务
关闭防火墙和selinux(安全增强型)通过关闭输入命令setenforce 0是临时关闭,重启系统后还会开启。永久关闭则是输入输入命令vi /etc/selinux/config,将SELINUX=enforcing改为SELINUX=disabled,然后保存退出。
关闭防火墙
# systemctl stop firewalld.service;systemctl disable firewalld.service
临时关闭selinux
# setenforce 0
也可以采取永久关闭
5.克隆
克隆完成后,修改克隆机的IP(10.0.0.31)和主机名(compute),作为区别,并将openstack_rpm.tar.gz文件复制给计算节点。可以仔细阅读步骤2和3。
# hostnamectl set-hostname compute
# scp -r /opt/repo 10.0.0.31:/opt/
6.时间同步
为了保证Openstack的服务正常运行,需要保证两个节点的时间一致,可以使用chrony服务来实现时间同步,先都安装chrony(时间同步服务,集群节点之间需要时间同步),再对两个节点分别操作,并重启chronyd服务控制节点作为时间服务器,计算节点作为时间客户端。
【所有节点安装软件包】
# yum install chrony
【控制节点】,增添如下内容
# vim /etc/chrony.conf
server ntp6.aliyun.com iburst
allow 10.0.0.0/24 //设置同步网段
重启服务
# systemctl restart chronyd
# systemctl enable chronyd
【计算节点】,操作如下:
# vim /etc/chrony.conf
server 10.0.0.11 iburst
重启服务
# systemctl restart chronyd
# systemctl enable chronyd
7.安装通用包
为了方便安装和使用Openstack,需要在两个节点先安装一些通用的包,例如python-openstackclient,openstack-selinux等。RHEL 和 CentOS 默认启用了 SELinux . 安装 openstack-selinux 软件包以便自动管理 OpenStack 服务的安全策略。
【两个节点安装通用包】
安装Openstack客户端
# yum -y install python-openstackclient
安装openstack-selinux
# yum -y install openstack-selinux
8. 安装SQL数据库
Openstack的各个服务需要使用SQL数据库来存储数据,可以使用MariaDB作为数据库服务器,只需要在控制节点上安装和配置并重启数据库服务即可。
- 相关配置中的,在 [mysqld] 部分,设置[ bind-address ]值为本机监听的 IP 地址;以使得其它节点可以通过IP地址访问数据库。为了保证数据库服务的安全性,运行mysql_secure_installation脚本。
- 特别需要说明的是,为数据库的root用户设置一个适当的密码,如果不执行,那么启动后,需要同步数据库时就会报错。
- 【控制节点】
安装MariaDB数据库
# yum -y install mariadb mariadb-server python2-PyMySQL
编辑 vim /etc/my.cnf.d/openstack.cnf,将下图代码输入文件中,注意ip要输对
# vim /etc/my.cnf.d/openstack.cnf
设置bind-address值为本机监听的IP地址;以使的其他节点可以通过IP地址访问数据库;
[mysqld]
bind-address = 10.0.0.11 //控制节点IP
在[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
对mariadb设置开机自启并开启服务
# systemctl enable mariadb.service;systemctl start mariadb.service
Created symlink from /etc/systemd/system/multi-user.target.wants/mariadb.service to /usr/lib/systemd/system/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!
9.安装RabbitMQ消息队列
Openstack的各个服务需要使用消息队列来进行通信,可以使用RabbitMQ(实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件))作为消息队列服务器,只需要在控制节点上安装和配置即可。之后在网页中输入10.0.0.11:15672 使用用户名和密码进入该界面。
- **【控制节点】**运行消息队列
安装包
# yum -y install rabbitmq-server
设置开机自启并开启服务
# systemctl enable rabbitmq-server.service;systemctl start rabbitmq-server.service
执行下方命令添加openstack用户 创建用户密码,密码为RABBIT_PASS,可以将密码替换,但不建议修改,不然后面都要修改!!!
# rabbitmqctl add_user openstack RABBIT_PASS
Creating user "openstack" ...
给openstack用户配置读写权限,并查看端口(netstat -ntulp | grep 5672)
# rabbitmqctl set_permissions openstack ".*" ".*" ".*" //可读、可写、可配置
Setting permissions for user "openstack" in vhost "/" .....done.
查看端口
# netstat -ntulp | grep 5672
tcp 0 .0.0.0.0:25672 0.0.0.0:* LISTEN 29675/beam.smp 集群之间同步数据用的端口
tcp6 :::5672 :::* LISTEN 29675/beam.smp / 客服端使用
tcp 0 0 0.0.0.0:25672 0.0.0.0:* LISTEN 3125/beam.smp
tcp6 0 0 :::5672 :::* LISTEN 3125/beam.smp
启用 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:15672 0.0.0.0:* LISTEN 3125/beam.smp
tcp 0 0 0.0.0.0:25672 0.0.0.0:* LISTEN 3125/beam.smp
tcp6 0 0 :::5672 :::* LISTEN 3125/beam.smp
浏览器输入10.0.0.11:15672,用户名和密码均为guest
如上图的话,RabbitMQ队列服务就安装成功了
10.安装Memcached缓存服务
- Memcached
认证服务认证缓存使用Memseched缓的token,缓存服务memeseched运行在控制节点。
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
Created symlink from /etc/systemd/system/multi-user.target.wants/memcached.service to /usr/lib/systemd/system/memcached.service.