openstack

一. 云计算的前世今生

所有是新事务都不是突然冒出来的,都有前世和今生。云计算也是IT技术不断发展的产物。要理解云计算,需要对IT系统架构的发展过程有所认识。

IT系统架构的发展到目前为止大致可以分为3 个阶段:

1. 物理机架构 这一阶段,应用部署和运行在物理机上。比如企业要上一个ERP系统,如果规模不大,可以找3台物理机,分别部署web服务器,应用服务器和数据库服务器。如果规模大一点,各种服务器可以采用集群架构,但每个集群成员也还是直接部署在物理机上。我见过的客户早期都是这种架构,一套应用一套服务器,通常系统的资源使用率都很低,达到20%的都是好的。

2. 虚拟化架构 决定了物理服务器的计算能力越来越强,虚拟化技术的发展大大提高了物理服务器的资源使用率。这个阶段,物理机运行若干虚拟机,应用系统直接部署到虚拟机上。虚拟化的好处还体现在减少了需要管理的物理机数量,同时节省了维护成本。

3. 云计算架构 虚拟化提高了单台物理机的资源使用率,随着虚拟化技术的应用,IT环境中有越来越多的虚拟机,这时新的需求产生了: 如何对IT环境中的虚拟机进行统一和高效的管理。有需求就有供给,云计算登上了历史舞台

二. OpenStack简单介绍

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

2. 云计算所包含的几个层次服务:

SaaS (Software as a Service): 把在线软件作为一种服务。
Paas (Platform as a Service): 把平台作为一种服务。
Iaas (Infrastructure as a Service): 把硬件设备作为一种服务。

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

4. OpenStack 历史

5. OpenStack 社区与链接

社区:www.openstack.org,wiki.openstack.org
邮件列表: http://wiki.openstack.org/MaillingLists#General_List 
		http://wiki.openstack.org/MailingLists#Development_List
		http://wiki.openstack.org/MailingLists#Operators
如何贡献代码:http://wiki.openstack.org/HowToContribute
源代码管理: http://wiki.openstack.org/GerritWorkflow
文档:http://docs.openstack.org

阿里云镜像仓库地址:
https://developer.aliyun.com/mirror/

openstack的源代码在github上,具体的连接是http://git.openstack.org/cgit
http://git.openstack.org/cgit
https://opendev.org/

# openstack官方仓库
https://review.opendev.org/admin/repos

三. OpenStack架构及优势

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

1 模块松耦合

2 组件配置较为灵活

3 二次开发容易

四. openstack 构成组件

OpenStack共享服务组件:

数据库服务 (Database Service): MariaDB及MongoDB
消息传输 (Message Queues): RabbitMQ
缓存 (cache): Memcached时间(time sync): NTP
存储 (storage provider): ceph,GFS,LVM,ISICI等
高可用及负载均衡:pacemaker,HAproxy,keepalive,lvs等

OpenStack 核心组件:

身份服务 (Identity Service): Keystone
计算 (Compute): Nova
镜像服务 (Image Service): Glance
网络 & 地址管理 (network): Neutron
对象存储 (Object Storage): Swift
块存储 (Block Storage): Cinder
UI界面 (Dashboard): Horizon
测量 (Metering): Ceilometer
部署编排 (Orchestration): Heat

云计算 openstack 共享组件

云计算 openstack 共享组件--时间同步服务NTP

一. 标准时间讲解

地球分为东西十二的区域,共计 24 个时区
格林威治作为全球标准时间即 (GMT时间),东时区以格林威治时区进行加,而西时区则为减。
地球的轨道并非正圆,在加上自转速度逐年递减,因此时间就会有误差在计算时间的时,最准确是使用 "原子震荡周期"所计算的物理时钟。这种被称为标准时间即-Coordinated Universal Time(UTC)
UTC的准确性毋庸置疑,美国的 NIST F-1 原子钟 2000 年才将产生 1 秒误差。
随着时间的误差,有些工作是无需进行时间精确即可以完成。但有些工作就必须精确时间从而可以完成目标任务。
因此时间的同步有了需求。目前所使用的就是 Network Time Protocol 协议。即网络时间协议。
[root@mail ~]# date
Sat Jul 13 11:01:25 CST 2024
[root@mail ~]#
​

二. ntp 时钟同步服务

NTP 工作请求
(1)客户端将采用随机端口向NTP服务器(UDP:123)发出时间同步请求
(2)NTP 服务器收到请求后会将发出调校时间
(3)NTP 客户端接收到NTP服务器的消息后,以进行调整,从而完成时间同步

同步服务器时间方式有2个:一次性同步(手动同步),通过服务自动同步。

1. 一次性同步时间:ntpdate 时间服务器的域名或ip地址

IP地址查看可以访问: http://www.ntp.org.cn/pool.php

服务器列表 - 全球可用的NTP服务器列表与解析服务 - ntp.org.cn & ntpdate.net

ntpdate 120.25.108.11(选择阿里云的)

2. NTP 服务器实现

(1) NTP 服务器安装
yum install ntp -y
(2) 查看 NTP 配置文件是否存在
ls -l /etc/ntp.conf
(3) NTP 所涉及的程序
ntpd

一. MQ 全称为 Message Queue,消息队列 (MQ)

是一种应用程序对应用程序的通信方法。应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们。
消息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此来通信,直接调用通常是用于诸如远程过程调用的技术。排队指的是应用程序通过队列来通信。队列的使用除去了接收和发送应用程序同时执行的要求。
排队指的是应用程序通过队列来通信。队列的使用除去了接收和发送应用程序同时执行的要求。

二. AMQP 即 Advanced Message Queuing Protocol 高级消息队列协议,

是应用层协议的一个开放标准,为面向消息的中间件设计。消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,反之亦然。
AMQP 的主要特征是面向消息,队列,路由(包括点对点和发布/订阅),可靠性,安全。

三,Rabbitmq 概念:

属于一个流行的开源消息队列系统。属于AMQP(高级消息队列协议)标准的一个实现。是应用层协议的一个开放标准,为面向消息的中间件设计。用于在分布式系统中存储转发消息,在 易用性,扩展性,高可用性等方面表现不俗。
消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,反之亦然。
AMQP 的主要特征是面向消息,队列,路由(包括点对点和发布/订阅),可靠性,安全。

RabbitMQ特点:

使用Erlang编写
支持持久化
支持HA
提供C#,erlang,java,perl,python,ruby等的client开发端

四. 什么是耦合,解耦合

一. 耦合

1. 耦合是指两个或两个以上的体系或两种运动形式间通过相互作用而彼此影响以致联合起来的现象。
2. 在软件工程中,对象之间的耦合度就是对象之间的依赖性。对象之间的耦合越高,维护成本越高,因此对象的设计应使类和构件之间的耦合最小。
3. 分类:他软硬件之间的耦合,还有软件各模块之间的耦合。耦合性是程序结构中各个模块之间相互关联的度量。它取决于各个模块之间的接口的复杂程度,调用模块的方式以及哪些信息通过接口。

二,解耦

1. 解耦,字面意思就是解除耦合关系
2. 在软件工程中,降低耦合度即可以理解为解耦合,模块间有依赖关系必然存在耦合,理论上的绝对零耦合是做不到的,但可以通过一些现有的方法将耦合度降至最低。
3. 设计的核心思想:尽可能减少代码耦合,如果发现代码耦合,就要采取解耦技术。让数据模型,业务逻辑和视图显示三层之间彼此降低耦合,把关联依赖降到最低,而不至于牵一发而动全身。原则就是A功能的代码不要写在B功能代码中,如果两者之间需要交互,可以通过接口,通过消息,甚至可以引入框架,但总之就是不要直接交叉写。

五,RabbitMQ中的概念名词

Broker: 简单来说就是消息队列服务器实体。
Exchange: 消息交换机,它指定消息按什么规则,路由到哪个队列。
Queue: 消息队列载体,每个消息都会被投入到一个或多个队列。
Binding: 绑定,它的作用就是把 exchange 和 queue 按照路由规则绑定起来。
Routing Key:路由关键字,exchange 根据这个关键字进行消息投递。
vhost: 虚拟主机,一个 broker 里可以开设多个 vhost,用作不同用户的权限分离。
producer: 消息生产者,就是投递消息的程序。
consumer: 消息消费者,就是接受消息的程序
channel: 消息通道,在客户端的每个连接里,可建立多个 channel ,每个 channel 代表一个会话任务。

六, RabbitMQ工作原理

MQ 是消费-生成者模型的一个典型的代表,一端往消息队列中不断写入消息,而另一端则可以读取或者订阅队列中的消息。
MQ则是遵循了AMQP协议的具体实现和产品。在项目中,将一些无需即时返回且耗时的操作提取出来,进行了异步处理,而这种异步处理的方式大大的节省了服务器的请求响应时间,从而提高了系统的吞吐量。
(1)客户端连接到消息队列服务器,打开一个channel.
(2)客户端声明一个 exchange,并设置相关属性。
(3)客户端声明一个queue,并设置相关属性。
(4)客户端使用 routing key,在 exchange 和 queue 之间建立好绑定关系。
(5)客户端投递消息到 exchange .
(6)exchange 接收到消息后,就根据消息的key和已经设置的 binding,进行消息路由,将消息路由,将消息投递到一个或多个队列里

七,Rabbitmq 的 metadata

元数据可以持久化在RAM 或 Disc.从这个角度可以把 RabbitMQ 集群中的节点分成两种:RAM Node 和 Disk Node,
RAM Node 只会将元数据存放在RAM
Disk Node 会将元数据持久化到磁盘。
单节点系统就没有什么选择了,只允许 disk node,否则由于没有数据冗余一旦重启就会丢失掉所有的配置信息,但是在集群环境中可以选择哪些节点是RAM node ,在集群中声明 (declare) 创建 exchange queue binding,这类操作要等到所有的节点都完成创建才会返回:
如果是内存节点就要修改内存数据,
如果是disk node 就要等待写磁盘,节点过多这里的速度被大大的拖慢。
有些场景 exchange queue 相当固定,变动很少,那即使全都是 disc node ,也没有什么影响。如果使用 Rabbiting 做 RPC (RPC: Remote Procedure Call--远程过程调用),RPC 或者类似 RPC 的场景这个问题就严重了,频繁创建销毁临时队列,磁盘读写能力就很快成为性能瓶颈了。所以,大多数情况下,我们尽量把 Node 创建为 RAM Node,这里就有一个问题了,要想集群重启后元数据可以恢复就需要把集群元数据持久化到磁盘,那需要规划 RabbitMQ 集群中的 RAM Node 和 Disc Node.
只要有一个节点是 Disc Node 就能提供条件把集群元数据写到磁盘,RabbitMQ 的却也是这样要求的: 集群中只要有一个 disk node 就可以,其他的都可以是RAM Node,节点加入或者退出集群一定至少要通知集群中的一个 disk node.
如果集群中 disk node 都宕掉,就不要变动集群的元数据,声明 exchange queue 修改用户权限,添加用户等等这些变动在节点重启之后无法恢复。
有一种情况要求所有的 disk node 都要在线情况在才能操作,那就是增加或者移除节点,RAM node 启动的时候会连接到预设的disk node 下载最新的集群元数据。如果你有两个 disk node(d1,d2),一个RAM node 加入的时候你只告诉 d1,而恰好这个 RAM node 重启的时候 d1 并没有启动,重启就会失败,所以加入RAM节点的时候,把所有的disk node 信息都告诉它,RAM node会把 disk node 的信息持久化到磁盘一边后续启动可以按图索取。

八. RabbitMQ 集群部署

一, 前期准备

(1)条件:准备3台linux系统,确保配置好源,及 epel源
(2)三台机器能够静态解析彼此
(3)设置可以无密钥登录

二,安装过程:

(1)所有 node 节点安装 rabbitmq 和 erlang 软件包:
yum install -y erlang rebbitmq-server.noarch
systemctl enable rebbitmq-server.service
systemctl start rabbitmq-server.service
systemctl status rabbitmq-server.service

查看监听端口:
netstat -lantp | grep 5672
配置文件:
vim /etc/rabbitmq/rabbitmq.conf

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

(3) node1: 添加一个 openstack 的用户,并设密码为 admin.并设置权限和成为管理员
node1:
rabbitmqctl add_user openstack admin
rabbitmqctl set_permissions openstack ".*" ".*" ".*"
rabbitmqctl set_user_tags openstack administrator

(4) node1: 编辑 rabbitmq 变量文件
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[{nodelay,true},{raw,6,18,<<5000:64/native>>}] -kernel inet_default_listen_options [{raw,6,18,<<5000:64/native>>}]"
RABBITMQ_NODE_IP_ADDRESS=172.16.254.60


(5)node1: 将 rabbitmq变量文件拷贝到其他两个节点,之后并修改相应节点的 ip
scp /etc/rabbitmq/rabbitmq-env.conf node2:/etc/rabbitmq/
scp /etc/rabbitmq/rabbitmq-env.conf node3:/etc/rabbitmq/

查看 rabbitmq 插件
/usr/lib/rabbitmq/bin/rabbitmq-plugins list


(6)所有 node 开启 rabbitmq 的 web 管理页面
/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 到其他节点配置集群
rabbitmqctl status
scp /var/lib/rabbitmq/.erlang.cookie node2:/var/lib/rabbitmq/.erlang.cookie

scp /var/lib/rabbitmq/.erlang.cookie node3:/var/lib/rabbitmq/.erlang.cookie

(8) node2 和 node3 停止应用,并以 ram 的方式加入 node1 节点,之后重启应用
systemctl restart rabbitmq-server.service
rabbitmqctl stop_app
rabbitmqctl join_cluster --ram rabbit@node1
rabbitmqctl start_app



(9) node1 检查集群状态
rabbitmqctl cluster_status
Cluster status of node rabbit@node1...
[{nodes,[{disc,[rabbit@node1]},{ram,[rabbit@node2,rabbit@node3]}]},{running_nodes,[rabbit@node3,rabbit@node2,rabbit@node1]},{cluster_name,<<"rabbit@node1">>},{{partitions,[]},{alarms,[{rabbit@node3,[]},{rabbit@node2,[]},{rabbit@node1,[]}]}}]


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




----


其他命令:
(1) 添加管理员
rabbitmqctl add_user mqadmin mqadmin
rabbitmqctl set_user_tags mqadmin administrator
rabbitmqctl set_permissions -p / mqadmin ".*" ".*" ".*"


(2) 更改节点类型 (内存型或磁盘型)
rabbitmqctl stop_app
rabbitmqctl change_cluster_node_type disc 
或 rabbitmqctl change_cluster_node_type ram
rabbitmqctl start_app

(3) 从集群移除节点(或者重置节点)
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app
rabbitmqctl cluster_status

(4) 从某个节点移除集群中其他节点
rabbitmqctl forget_cluster_node rabbit@node3
rabbitmqctl reset 
rabbitmqctl start_app
rabbitmqctl cluster_status

1. 保证集群中至少磁盘类型的节点以防数据丢失,在更改节点类型时尤其要注意。
2. 若整个集群被停掉了,应保证最后一个down掉的节点被最先启动,若不能则要使用 forget_cluster_node 命令将其移出集
3. 若集群中节点几乎同时以不可控的方式down了此时在其中一个节点使用 force_boot 命令重启节点

组件介绍

OpenStack组件介绍
1、Nova(计算服务组件)

OpenStack Compute是一个云计算结构控制器,它管理计算机资源池,并使用虚拟化技术、裸机和高性能计算配置。Nova的架构提供了云的灵活性,无需专有软件或硬件要求,还提供了集成传统系统和第三方产品的能力。

nova可以使用管理程序技术(如kvm、vmware、lxc、Xenserver等)进行部署。它用于管理许多虚拟机和处理各种计算任务的其他实例。
2、Glance(镜像服务组件)

OpenStack镜像服务提供发现、注册和恢复虚拟机镜像。Glean具有客户机-服务器体系结构,并提供了一个用户RESTAPI,它允许查询虚拟机镜像元数据以及检索实际镜像。在部署新的虚拟机实例时,Gleae将存储的镜像用作模板。

OpenStack Glance支持Raw,VirtualBox(VDI),VMWare(VMDK,OVF),Hyper-V(VHD)和Qemu / KVM(qcow2)虚拟机镜像。
3、Swift(对象存储服务模块)

OpenStack Swift创建了冗余的、可扩展的数据存储,以存储数兆字节的可访问数据。可以利用、检索和更新存储的数据。它具有分布式体系结构,提供了更大的冗余性、可扩展性和性能,没有单点故障。

Swift是一个深度可用、共享、最终一致的对象存储库。它帮助公司安全、廉价和高效地存储大量数据。Swift确保在各种设备上进行数据复制和分发,这使其成为经济高效的扩展存储的理想选择。
4、Horizon

Horizon是OpenStack dashboard的授权实现,它是实现基于云资源自动化的唯一图形界面。对于服务提供商和其他商业供应商,它支持第三方服务,如监控、计费和其他管理工具。开发人员可以使用EC2兼容性API或本机OpenStack API自动化工具来管理OpenStack资源的工具。
5、keystone(身份服务模块)

keystone提供了一个用户的中心列表,与他们可以访问的所有OpenStack服务相对应。它与现有的后端服务(如LDAP)集成,同时在整个云计算系统中充当通用的身份验证系统。

Keystone支持各种形式的身份验证,如标准用户名和密码凭据、AWS(Amazon Web Services)登录和基于令牌的系统。此外,该目录为端点注册表提供了一个可查询的OpenStack云中部署的服务列表。
6、Neutorn(网络服务组件)

Neutron提供网络功能,如管理OpenStack的网络和IP地址。它确保网络不是云部署中的限制因素,并为用户提供通过网络配置的自助服务能力。OpenStack网络允许用户创建自己的网络,并将设备和服务器连接到一个或多个网络。开发人员可以使用SDN技术来支持高水平的多租户和大规模。

Neutron还提供扩展框架,支持部署和管理其他网络服务,如虚拟专用网络(VPN),防火墙,负载平衡和入侵检测系统(IDS)。
7、Cinder(块存储服务模块)

OpenStack Cinder为OpenStack计算实例的应用程序提供确定的块级存储设备。云用户可以通过将块存储卷与dashboard和Nova集成来管理其存储需求。

Cinder可以使用存储平台,如Linux服务器、EMC(scaleio、vmax、vnx)、ceph、coraid、cloudbyte、IBM、Hitachi数据系统、SAN卷控制器等,适用于可扩展的文件系统和数据库存储。
8、Ceilometer(监控服务组件)

Ceilometer为为计费系统提供单点功能,获取所有度量,以授权客户跨所有OpenStack核心组件进行计费。通过监视来自现有服务的通知,开发人员可以收集数据,并可以配置数据类型以满足其操作要求。
9、heat(编排服务)

Heat是一种服务,通过与CloudInformation兼容的查询API和OpenStack本机REST API,使用AWS CloudInformation模板格式来协调多个复合云应用程序。

实战

vim yum-repo.sh
wget -o /etc/yum.repos.d/Centos7-Base-yunwei.repo download.yunwei.edu/shell/Centos7-Base-yunwei.repo
wget -o /etc/yum.repos.d/epel-yunwei.repo download.yunwei.edu/shell/epel-yunwei.repo
wget -o /etc/yum.repos.d/rdo-release-yunwei.repo download.yunwei.edu/shell/rdo-release-yunwei.repo
wget -o /etc/yum.repos.d/RPM-GPG-KEY-CentoS-SIG-Cloud download.yunwei.edu/shell/RPM-GPG-KEY-CentoS-SIG-Cloud
wget -o /etc/pki/rpm-gpg/RPM=GPG-KEY-CentoS-SIG-Cloud download.yunwei.edu/shell/RPM-GPG-KEY-CentoS-SIG-Cloud
wget -o /ete/pki/rpm-gpg/RPM-GPG-KEY-7 download.yunwei.edu/shell/RPM-GPG-KEY-EPEL-7
yum repolist


[zgq@mail ~]$ vim yum-repo.sh
[zgq@mail ~]$ cat yum-repo.sh

wget -o /etc/yum.repos.d/Centos7-Base-yunwei.repo download.yunwei.edu/shell/Centos7-Base-yunwei.repo
wget -o /etc/yum.repos.d/epel-yunwei.repo download.yunwei.edu/shell/epel-yunwei.repo
wget -o /etc/yum.repos.d/rdo-release-yunwei.repo download.yunwei.edu/shell/rdo-release-yunwei.repo
wget -o /etc/yum.repos.d/RPM-GPG-KEY-CentoS-SIG-Cloud download.yunwei.edu/shell/RPM-GPG-KEY-CentoS-SIG-Cloud
wget -o /etc/pki/rpm-gpg/RPM=GPG-KEY-CentoS-SIG-Cloud download.yunwei.edu/shell/RPM-GPG-KEY-CentoS-SIG-Cloud
wget -o /ete/pki/rpm-gpg/RPM-GPG-KEY-7 download.yunwei.edu/shell/RPM-GPG-KEY-EPEL-7
yum repolist
[zgq@mail ~]$

  • 28
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值