openstack

本文详细介绍了OpenStack的安装过程,包括环境配置、数据库设置、消息队列、Memcached、认证服务、Glance、Nova计算服务、网络服务(Neutron)以及Dashboard的安装和配置。OpenStack是一个强大的云计算管理平台,使用Python开发,支持多种虚拟化技术,广泛应用于私有云、公共云和混合云场景。
摘要由CSDN通过智能技术生成

openstack


Openstack 介绍

什么是openstack

OpenStack 是当今最具影响力的云计算管理工具——通过命令或者基于 Web 的可视化控制面板来管理 IaaS 云端的资源池(服务器、存储和网络)
云计算 是通过虚拟化(kvm)技术去实现的,它是一种按量付费的模式!
OpenStack 系统或其演变版本目前被广泛应用在各行各业,包括自建私有云、公共云、租赁私有云及公私混合云
OpenStack 支持 KVM、Xen、Lvc、Docker等虚拟机软件或容器,默认为 KVM
OpenStack 采用 Python语言开发,遵循 Apache 开源协议,因此相比 CloudStack 来说,更轻量化,效率更高
官网

OpenStack 中有哪些组件

  • keystone: 授权 [授权后各个组件才可以进行相应的功能]

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!
消息队列
多用于分布式系统之间 进行传递信息 ———— 消息队列
  • OpenStack 使用 message queue协调操作和各服务的状态信息。消息队列服务一般运行在== 控制节点 \textcolor{red}{控制节点} 控制节点==。OpenStack支持好几种消息队列服务包括 RabbitMQ, Qpid, 和 ZeroMQ。不过,大多数发行版本的OpenStack包支持特定的消息队列服务。这里安装 RabbitMQ 消息队列服务,因为大部分发行版本都支持它
安全并配置组件
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提供的服务目录解决了这一问题
先决条件
  • 在你配置 OpenStack 身份认证服务前,你必须创建一个数据库和管理员令牌(token)。
连接到数据库服务器:
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
 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值