OpenStack云计算(-) 简介与部署Keystone

一.OpenStack简介

什么是云计算:云计算是一种按使用量付费的模式,这种模式提供可用的、便捷的、按需的网络访问,进入可配置的计算资源共享池(资源包括网络,服务器,存储,应用软件,服务)
云计算所包含的几个层次服务:

SaaS ( Software as a Service ) :把在线软件作为一种服务。

Paas ( Platform as a Service ) :把平台作为一种服务。

laas ( Infrastructure as a Service ) :把硬件设备作为一种服务。

  1. OpenStack :是由Rackspace和NASA共同开发的云计算平台,是一个开源的IaaS (基础设施及服务)云计算平台,让任何人都可以自行建立和提供云端运算服务,每半年发布一次,用Python语言编写

二.openstack架构及优势

OpenStack为私有云和公有云提供可扩展的弹性的云计算服务,这种服务云必须是简单部署并且扩展性强。

1、模块松耦合

2、组件配置较为灵活

3、二次开发容易

OpenStack共享服务组件:

数据库服务( Database Service ) : MairaDB 及MongoDB

消息传输(Message Queues) : RabbitMQ

缓存( cache ) : Memcached

时间(time sync ) : NTP

存储(storge provider) :ceph,GFS、LVM、 ISICI等

高可用及负载均衡: pacemaker、HAproxy, keepalive、 Ivs等

OpenStack核心组件:

身份服务( Identity Service ) : Keystone

计算( Compute ) : Nova

镜像服务( Image Service ) : Glance

网络&地址管理( Network ) : Neutron

对象存储( Object Storage ): Swift块存储

Block Storage) : CinderUI

界面(Dashboard) : Horizon

测量 (Metering) : Ceilometer

部署编排(Orchestration) : Heat

Glance是Openstack项目中负责镜像管理的模块,其功能包括虚拟机镜像的查找、注册和检索等。Glance提供Restful APl可以查询虚拟机镜像的metadata及获取镜像。Glance可以将镜像保存到多种后端存储上,比如简单的文件存储或者对象存储。

三.RabbitMQ安装过程

  • (1)所有node安装rabbtimq和erlang软件包:

java 复制代码
yum install -y erlang rabbitmq-server.noarch
 systemctl enable rabbitmq-server.service
 systemctl start rabbitmq-server.service
systemctl status rabbitmq-server.service

查看监听端口

java 复制代码
netstat -lantp | grep 5672

配置文件:

java 复制代码
vim etc/rabbitmq/rabbitmq.config

(2)node1 :修改guest密码为admin (默认用户为: guest 密码为: guest)

java 复制代码
rabbitmqctl change_password guest admin

(3)node1 :添加一个openstack的用户,并设密码为admin。并设置权限和成为管理员

java 复制代码
node1:rabbitmqctl add_user openstack admin
rabbitmqctl set_permissions openstack ".*" " *" ".*"
rabbitmqctl set_user_tags openstack administrator

(4)node1:编辑rabbittmq变量文件

java 复制代码
vim /etc/rabbitmq/rabbitmq-env.conf
RABBITMQ_NODE_PORT=5672
ulimit-S-n 4096
RABBITMQ_SERVER_ERL_ARGS="+K true +A30 +P 1048576-kernel inet_default_connect_options 
[fnodelay,true),{raw,6,18,<<5000:64/native>>}]-kernel inet_default_listen_options [fraw,6,18, <<5000:64/native>>}]"
RABBITMQ_NODE_IP_ADDRESS=172.16.254.60

(5)node1 :将rabbittmq变量文件拷贝到其他两节点,之后并修改相应节点的ip

java 复制代码
scp /etc/rabbitmq/rabbitmq-env.conf con2:/etc/rabbitmq/
scp /etc/rabbitmq/rabbitmq-env.conf con3:/etc/rabbitmq/

查看rabbitmq插件

java 复制代码
/usr/lib/rabbitmq/bin/rabbitmq-plugins list

(6)所有node开启rabbitmq的web管理页面

java 复制代码
/usr/lib/rabbitmq/bin/rabbitmq-plugins enable rabbitmq_management mochiweb webmachine rabbitmq_web_dispatch amqp_client rabbitmq_management_agent
或者: rabbitmq-plugins enable rabbitmq_management
systemctl restart rabbitmq-server.service
systemctl status rabbitmq-server.service

(7)node1发送erlang.cookie到其他节点配置集群

java 复制代码
rabbitmqctl status
scp /var/lib/rabbitmq/.erlang.cookie con2:/var/lib/rabbitmq/.erlang.cookie
scp /var/lib/rabbitmq/.erlang.cookie con3:/var/lib/rabbitmq/.erlang.cookie

(8)node2和node3停止应用,并以ram的方式加入node1节点,之后重启应用

java 复制代码
(8)systemctl restart rabbitmq-server.service
nabbitmqctl stop_app
rabbitmqctl join_cluster --ram rabbit@con1
rabbitmqctl start_app

(9)node1检查集群状态

java 复制代码
[root@con1 conf]# rabbitmqctl cluster_status
 Cluster status of node rabbit@con1...
[{nodes,[{disc,[rabbit@con1]},{ram,[rabbit@con3,rabbit@con2]}]},
{running_nodes,[rabbit@con3,rabbit@con2,rabbit@con1]},
{cluster_name,<<"rabbit@con1">>},
{partitions,[]},
{alarms,[{rabbit@con3,[]},{rabbit@con2,[]},{rabbit@con1,[]}]}]

(10)登陆验证:http://172.16.254.60:15672/#/guest/admin

其他命令:

  • (1)添加管理员:

java 复制代码
rabbitmqctl add_user mqadmin mqadmin
rabbitmqctl set_user_tags mqadmin administrator
rabbitmqctl set_permissions -p / mqadmin ".*" " *"".*"

(2)更改节点类型(内存型或磁盘型)

java 复制代码
rabbitmqctl stop_app
rabbitmqctl change_cluster_node_type disc 或 rabbitmqctl change_cluster_node_type ram
rabbitmqctl start_app

(3)从集群移除节点(或者重置节点)

java 复制代码
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app
rabbitmqctl cluster_status

(4)从某个节点移除集群中其他节点

java 复制代码
rabbitmqctl forget_cluster_node rabbit@node3
rabbitmqctl reset
rabbitmqctl start_app
rabbitmqctl cluster_status

1,保证集群中至少有一个磁盘类型的节点以防数据丢失,在更改节点类型时尤其要注意。

  • 若整个集群被停掉了,应保证最后一个 down 掉的节点被最先启动,若不能则要使用 forget_cluster_node 命令将其移出集群

  • 3,若集群中节点几乎同时以不可控的方式down了此时在其中一个节点使用force_boot命令重启节点

四.Keystone介绍:

  • keystone 是OpenStack的组件之一,用于为OpenStack家族中的其它组件成员提供统一的认证服务,包括身份验证、令牌的发放和校验、服务列表、用户权限的定义等等。云环境中所有的服务之间的授权和认证都需要经过keystone,因此keystone是云平台中第一个即需要安装的服务。

    作为OpenStack的基础支持服务, Keystone做下面这几件事情:

  • 管理用户及其权限

  • 维护OpenStack Services的Endpoint

  • Authentication (认证)和Authorization (鉴权)

五.glance介绍:

安装 OpenStack包 相关 命令

安装 OpenStack 客户端:

java 复制代码
# yum install python-openstackclient

RHEL 和 CentOS 默认启用了 ++++SELinux++++ . 安装 openstack-selinux 软件包以便自动管理 OpenStack 服务的安全策略:

java 复制代码
# yum install openstack-selinu

SQL数据库

安全并配置组件

安装软件包:

java 复制代码
# yum install mariadb mariadb-server python2-PyMySQL

创建并编辑 /etc/my.cnf.d/openstack.cnf,然后完成如下动作:

  1. 在 [mysqld] 部分,设置 ++++``++++bind-address``值为控制节点的管理网络IP地址以使得其它节点可以通过管理网络访问数据库:bind-address 监听地址
java 复制代码
[mysqld]...bind-address = 10.0.0.11

在``[mysqld]`` 部分,设置如下键值来启用一起有用的选项和 UTF-8 字符集:

java 复制代码
[mysqld]...default-storage-engine = innodbinnodb_file_per_tablemax_connections = 4096collation-server = utf8_general_cicharacter-set-server = utf8

完成安装 ++++¶++++

启动数据库服务,并将其配置为开机自启:

java 复制代码
# systemctl enable mariadb.service# systemctl start mariadb.service

为了保证数据库服务的安全性,运行``mysql_secure_installation``脚本。特别需要说明的是,为数据库的root用户设置一个适当的密码。

java 复制代码
# mysql_secure_installation

消息队列

安全并配置组件 ++++¶++++

安装包:

java 复制代码
# yum install rabbitmq-server

启动消息队列服务并将其配置为随系统启动:

java 复制代码
# systemctl enable rabbitmq-server.service# systemctl start rabbitmq-server.service

添加 openstack 用户: openstack为账号 RABBIT_PASS为密码 可以用合适的密码替换 RABBIT_DBPASS。

java 复制代码
# rabbitmqctl add_user openstack RABBIT_PASSCreating user "openstack" ......done.

给``openstack``用户配置写和读权限:

java 复制代码
# rabbitmqctl set_permissions openstack ".*" ".*" ".*"Setting permissions for user "openstack" in vhost "/" ......done.

Memcached

安全并配置组件 ++++¶++++

安装软件包:

java 复制代码
# yum install memcached python-memcached

完成安装

启动Memcached服务,并且配置它随机启动。

java 复制代码
# systemctl enable memcached.service# systemctl start memcached.service

六,认证服务

先决条件 ++++¶++++

在你配置 OpenStack 身份认证服务前,你必须创建一个数据库和管理员令牌。

完成下面的步骤以创建数据库:

用数据库连接客户端以 root 用户连接到数据库服务器:

java 复制代码
$ mysql -u root -p

创建 keystone 数据库:

java 复制代码
CREATE DATABASE keystone;

对``keystone``数据库授予恰当的权限:设置可以从远程或本地登录数据库

java 复制代码
GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' \  IDENTIFIED BY 'KEYSTONE_DBPASS';GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' \  IDENTIFIED BY 'KEYSTONE_DBPASS';

用合适的密码替换 KEYSTONE_DBPASS 。

退出数据库客户端。

生成一个随机值在初始的配置中作为管理员的令牌。

java 复制代码
$ openssl rand -hex 10

安全并配置组件 ++++¶++++

运行以下命令来安装包。

java 复制代码
# yum install openstack-keystone httpd mod_wsgi

编辑文件 /etc/keystone/keystone.conf 并完成如下动作:

在``[DEFAULT]``部分,定义初始管理令牌的值:

java 复制代码
[DEFAULT]...admin_token = ADMIN_TOKEN

使用前面步骤生成的随机数替换``ADMIN_TOKEN`` 值。

在 [database] 部分,配置数据库访问:

java 复制代码
[database]...connection = mysql+pymysql://keystone:KEYSTONE_DBPASS@controller/keystone

将``KEYSTONE_DBPASS``替换为你为数据库选择的密码。

在``[token]``部分,配置Fernet UUID令牌的提供者。

java 复制代码
[token]...provider = fernet

初始化身份认证服务的数据库:

java 复制代码
# su -s /bin/sh -c "keystone-manage db_sync" keystone

初始化Fernet keys:设置用户名称为keystone 设置组名称为keystone

java 复制代码
# keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone

配置 Apache HTTP 服务器 [++++¶++++](#配置 Apache HTTP 服务器¶)

编辑``/etc/httpd/conf/httpd.conf`` 文件,配置``ServerName`` 选项为控制节点:controller可替换为自己的主机名

java 复制代码
ServerName controller

用下面的内容创建文件 /etc/httpd/conf.d/wsgi-keystone.conf。

java 复制代码
Listen 5000Listen 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

    </Directory></VirtualHost>

<VirtualHost *:35357>

    WSGIDaemonProcess keystone-admin processes=5 threads=1 user=keystone group=keystone display-name=%{GROUP}

    WSGIProcessGroup keystone-admin

    WSGIScriptAlias / /usr/bin/keystone-wsgi-admin

    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

    </Directory></VirtualHost>

完成安装 ++++¶++++

启动 Apache HTTP 服务并配置其随系统启动:

java 复制代码
# systemctl enable httpd.service# systemctl start httpd.service

创建服务实体和API端点

配置认证令牌:

java 复制代码
$ export OS_TOKEN=ADMIN_TOKEN

将``ADMIN_TOKEN``替换为你在 :doc:++++`++++keystone-install`章节中生成的认证令牌。例如:

java 复制代码
$ export OS_TOKEN=294a4c8a8a475f9b9836

配置端点URL:

java 复制代码
$ export OS_URL=http://controller:35357/v3

配置认证 API 版本:

java 复制代码
$ export OS_IDENTITY_API_VERSION=3

在你的Openstack环境中,认证服务管理服务目录。服务使用这个目录来决定您的环境中可用的服务。

创建服务实体和身份认证服务:

java 复制代码
$ openstack service create \

  --name keystone --description "OpenStack Identity" identity

查看项目列表

java 复制代码
openstack project list

查看用户列表

java 复制代码
openstack user list

创建认证服务的 API 端点:

java 复制代码
$ openstack endpoint create --region RegionOne \

  identity public http://controller:5000/v3

$ openstack endpoint create --region RegionOne \

  identity internal http://controller:5000/v3


$ openstack endpoint create --region RegionOne \

  identity admin http://controller:35357/v3

创建域、项目、用户和角色

创建域``default``:

java 复制代码
 openstack domain create --description "Default Domain" default

创建 admin 项目:

java 复制代码
 openstack project create --domain default \

  --description "Admin Project" admin

创建 admin 用户:

java 复制代码
openstack user create --domain default \

  --password-prompt admin

创建 admin 角色:

java 复制代码
openstack role create admin

添加``admin`` 角色到 admin 项目和用户上:

java 复制代码
$ openstack role add --project admin --user admin admin

这个命令执行后没有输出。

本指南使用一个你添加到你的环境中每个服务包含独有用户的service 项目。创建``service``项目:

java 复制代码
 openstack project create --domain default \

  --description "Service Project" service

常规(非管理)任务应该使用无特权的项目和用户。作为例子,本指南创建 demo 项目和用户。

创建``demo`` 项目:

java 复制代码
openstack project create --domain default \

  --description "Demo Project" demo

创建``demo`` 用户:

java 复制代码
openstack user create --domain default \

  --password-prompt demo

创建 user 角色:

java 复制代码
$ openstack role create user

添加 user``角色到 ``demo 项目和用户:

java 复制代码
openstack role add --project demo --user demo user
相关推荐
容器魔方10 小时前
Bloomberg 正式加入 Karmada 用户组!
云原生·容器·云计算
AKAMAI1 天前
Sport Network 凭借 Akamai 实现卓越成就
人工智能·云原生·云计算
感哥1 天前
OpenStack Cinder 创建卷
openstack
感哥1 天前
OpenStack Cinder 架构
openstack
10岁的博客1 天前
《云计算如何驱动企业数字化转型:关键技术与实践案例》
云计算
感哥1 天前
OpenStack Nova Scheduler 计算节点选择机制
openstack
m0_694845572 天前
教你使用服务器如何搭建数据库
linux·运维·服务器·数据库·云计算
shinelord明2 天前
【数据行业发展】可信数据空间~数据价值的新型基础设施
大数据·架构·云计算·创业创新
XINVRY-FPGA2 天前
XCKU15P-2FFVA1760I AMD 赛灵思 Xilinx Kintex UltraScale+ FPGA
arm开发·嵌入式硬件·阿里云·fpga开发·云计算·硬件工程·fpga
王道长服务器 | 亚马逊云2 天前
一个迁移案例:从传统 IDC 到 AWS 的真实对比
java·spring boot·git·云计算·github·dubbo·aws