基于OpenStack设计与实现书籍内容笔记:
了解最原始的初始化虚拟化技术:
允许多个用户远程共享同一高性能计算设备的时间
了解了虚拟化技术的初衷:
使昂贵的大型资源得到尽可能的充分利用
云计算的三种模式:公有云、私有云和混合云
扩展了解:
1、公有云:面向大众提供资源的服务;用户通过互联网来获取这些资源的使用;
优势:成本低,扩展性非常好
缺点:对于云端的资源缺乏控制、保密数据的安全性、网络性能和匹配性问题
2、私有云:“私有”更多是指此类平台属于非共享资源,而非指其安全优势。私有云是为了一个客户单独使用而构建的,所以这些数据、安全和服务质量都较公有云有着更好地保障。
私有云又分为两类:
内部私有云:由组织在自己的数据中心内构建,该形式在规模和资源可扩展性上有局限,但是却有利于标准化云服务管理流程和安全性。这种方式适合那些需要对应用、平台配置和安全机制完全控制的机构。
外部私有云:这种私有云部署在组织外部,由第三方机构负责管理。第三方为该组织提供专用的云环境,并保证隐私和机密性。该方案相对内部私有云成本更低,也更便于扩展业务规模。
3、混合云:在混合云模式中,云平台由两种不同模式(私有或公有)云平台组合而成。这些平台依然是独立实体,但是利用标准化或专有技术实现绑定,彼此之间能够进行数据和应用的移植
应用混合云模式,一个机构可以将次要的应用和数据部署到公有云上,充分利用公有云在扩展性和成本上的优势。同时将任务关键型应用和数据放在私有云中,安全性更高。
4、公有云用户的需求就是快速上线,经济实惠。而私有云用户更多的是要求平滑过渡,保留现有体验,不影响现有业务。在选择公有云还是私有云时,最终的要求来自于用户自身,通过我们的比较,可以看出公有云和私有云各有偏重,也在不同的用户眼中有不同的评价。
扩展了解Vanderpool虚拟化技术:能够在同一台PC上运行多个操作系统同时工作的技术
云计算的原型理念:网络即是电脑
初始OpenStack:由RackSpace和NASA合作研发并发起,以Apache许可证授权的开源代码项目
OpenStack基金会的了解:简单的说是一非营利组织,由各个公司资会费,共同管理OpenStack项目,帮助推广OpenStack的开发、发行和应用
云计算有三种服务类型:
IaaS(基础架构):云服务提供商把 IT 系统的基础设施层作为服务出租出去,由消费者自己安装操作系统、中间件、数据库和应用程序。
PaaS(平台即服务):云服务提供商把 IT 系统中的平台软件层作为服务出租出去,消费者自己开发或者安装程序,并运行程序。
SaaS(软件即服务):云服务提供商把 IT 系统中的应用软件层作为服务出租出去,消费者不用自己安装应用软件,直接使用即可,这进一步降低了云服务消费者的技术门槛
PaaS和SaaS并不一定需要底层虚拟化技术的支持,但IaaS一般都是建立在虚拟化技术基础之上的
IaaS系统要解决的问题:如何自动管理这些物理主机上虚拟出来的虚拟机
IaaS的初衷:在大规模网络上或数据中心里,将有成千上万台物理主机,仅仅靠运维人员来完成这些管理任务是不现实的,这时候需要软件系统来自动辅助运维人员管理和维护系统的运行,给用户提供虚拟机服务
扩展了解:
1、Hypervisor:一种运行在基础物理服务器和操作系统之间的中间软件层,可允许多个操作系统和应用共享硬件。
2、Hypervisor协调硬件资源访问,各个虚拟机之间的防护。服务器启动后,它会加载所有虚拟机客户端的操作系统,为虚拟机分配内存、磁盘和网络等。
3、Hypervisor是所有虚拟化技术的核心,主要功能是非中断的支持多工作负载迁移能力。
基于视频笔记:
云计算:代表计算资源像云水一样,按需分配,循环利用。比如一个干旱的位置需要雨水100滴,云就会降100滴雨水(资源)给这个干旱地,当不需要时,100滴雨水蒸发回答云上
云应用形式:
一、私有云:将基础设施与软硬件资源构建于防火墙内,基于iaas构建私有云平台供企业内部使用
二、云存储: 云存储系统是一个以数据存储和管理为核心的云计算系统
三、云游戏: 游戏运行云平台服务端,云平台将游戏画面解压缩后传给用户,用户端无需高配置处理器和显卡,只需要基本的视频解压缩能力即可。
四、云物联: 基于云平台实现物物相连的互联网。
五、云安全:通过网状的大量客户端检测网络中软件的异常,获取木马,恶意程序的最新信息,推送到云平台服务端自动分析和处理,再把解决方案发送给每一个客户端
六、公有云:云平台对外开放,主要以Iaas和Paas为主,较为成熟的是Iaas,如阿里云,腾讯云,青云等
七、混合云: 公有云和私有云的结合,即对企业内部又对企业外部,例如AWS
传统应用与云应用:
一、传统应用
传统应用像养宠物,宠物病了要细心呵护
每个应用都是独特的、专门的
专门的服务器、硬件和软件保证可靠性
资源不够,增加cpu、内存、磁盘
专门的技术支持
二、云感知应用
云感知应用像养牛,牛生病了,你需要一头新的牛
应用跑在一个或多个虚拟机里
资源不够,增加新的虚拟机
应用挂起,重启或创建新的虚拟机
openstack相关组件和通信流程介绍:
五大组件
当你需要使用一台电脑时的步骤:发起命令买一台电脑,然后连网,装操作系统,附加硬盘,备份数据
horizon->提供web界面的控制台,点点鼠标发起请求->kevstone->认证全局,所有组件都要经过它->nova->调用虚拟化驱动,创建一台虚拟机(相当于买一台电脑)->neutron->连上网络(网络虚拟化)->glance->提供镜像(相当于装操作系统,镜像也备份在swift中)->cinder->附加硬盘(块存储)->swifit->备份(对象存储)(用于海量数据的存储备份)
horizon,nova,neutron三个组件基本实现了一个openstack私有云的功能,所以为核心组件
核心项目三个
1、控制台:
项目名:Horizon
功能:web方式管理云平台,建云主机,分配网络,配安全组,加云盘
2、计算:
项目名:Nova
功能:负责响应虚拟机创建请求、调度、销毁云主机
3、网络:
项目名:Neutron
功能:提供一整套API,用户可以基于该API实现自己定义专属网络,不同厂商可以基于此API提供自己的产品实现
存储项目2个
1、对象存储
项目名:Swift
功能:REST风格的接口和扁平的数据组织结构。RESTFUL HTTP API来保存和访问任意非结构化数据,ring环的方式实现数据自动复制和高度可以扩展架构,保证数据的高度容错和可靠性
2、块存储
项目名:Cinder
功能:提供持久化块存储,即为云主机提供附加云盘。
共享服务项目3个
1、认证服务
项目名:Keystone
功能:为访问openstack各组件提供认证和授权功能,认证通过后,提供一个服务列表(存放你有权访问的服务),可以通过该列表访问各个组件。
2、镜像服务
项目名:Glance
功能:为主机安装操作系统提供不同的镜像选择
3、计费服务
项目名:Ceilometer
功能:收集云平台资源使用数据,用来计费或者性能监控
高层服务项目1个
1、编排服务
项目名:Heat
功能:自动化部署应用,自动化管理应用的整个生命周期.主要用于Paas
组件间通信是基于rest api
keystone功能:
1、认证
2、分发rest api
keystone中决定user用户权限的是role,endpoint只是提供三类的访问途径,用户访问哪个路径都可以,不会改变用户的权限,只是为了统一有个规定
Endpoint 分为三类:
admin url –> 给admin用户使用,Port:35357
internal url –> OpenStack内部服务使用来跟别的服务通信,Port:5000
public url –> 互联网用户可以访问的地址,Port:5000
keystone详解:
User:user用户;使用Openstack组件的客户端可以是人、服务、系统,任何的客户端来访问openstack组件,都需要有一个用户名。
Credetials:用于确认用户身份的凭证
Authentication:验证用户身份的过程。Keystone 服务通过检查用户的 Credential 来确定用户的身份
Token:是一个数字字符串,访问资源时需要"亮出"你的令牌。
Role:给user用户划分权限
Policy:Policy就是一个JSON文件,默认是/etc/keystone/policy.json。通过配置这个文件,Keystone实现了对User基于Role的权限管理。
Project(Tenant):是一个人、或服务所拥有的资源集合。不同的Project之间资源是隔离的。在一个Project(Tenant)中可以包含多个User,每一个User都会根据权限的划分来使用Project(Tenant)中的资源
Service:即Openstack中运行的各个组件服务。
Endpoint 分为三类:
admin url –> 给admin用户使用,Port:35357
internal url –> OpenStack内部服务使用来跟别的服务通信,Port:5000
public url –> 互联网用户可以访问的地址,Port:5000
Catalog:catalog一个openstack部署的相关服务的集合,每个服务都有一个或者多个endpoint(即可以访问的url地址),即catalog=services+endpoint
glance组件:
v1版本
分为glance-api,glance-registry
glance-api:1、接受api请求,发给glance-registry。2、到后端的存储设备拉取镜像
glance-registry:1、查询数据库,获取镜像的元数据(镜像信息存在mysql数据库里)
v2版本
只用glance-api来完成上述操作
glance组件内布通信不走rpc机制(MQ),直接通信
简单了解三种存储方式
1、站在用户的角度,看到的是一个文件夹,就是文件存储
2、站在用户的角度,看到的是一个裸盘,就是块存储
3、站在用户的角度,存放文件调用的是rest api的方式去存,就算对象存储
文件存储可以基于原来的文件做修改,对象存储不行(只能覆盖)
cinder主要组成:
1、cinder-api:提供 rest 接口,负责处理 client 请求,并将 RPC 请求发送至 cinder-scheduler 组件
2、cinder-scheduler: 负责 cinder 请求调度,负责 cinder-volume 具体的调度处理,发送 cinder RPC 请求到选择的 cinder-volume。(实际上是从数据库里去调用所有cinder-volume信息,通过自己的算法来选)
3、cinder-volume:负责具体的 volume 请求处理,由不同后端存储提供 volume 存储空间
openstack组件内部的通信,一个组件一个服务是基于rpc机制实现的。
rpc机制是基于AMQP(高级消息队列协议)实现的。AMQP是用于异步消息通讯的消息中间件协议,从而满足组件内部的松耦合性。rabbitmq就是基于AMQP的消息队列,可以理解为rpc机制就算基于rabbitmq实现的
AMQP 模型有四个重要的角色:
1、Exchange:根据 Routing key 转发消息到对应的 Message Queue 中
2、Routing key:用于 Exchange 判断哪些消息需要发送对应的 Message Queue
3、Publisher:消息的发送者(消息的发布者),将消息发送的 Exchange 并指明 Routing Key,以便 Message Queue 可以正确的收到消息
4、Consumer:消息的接受者(消息的订阅者),从 Message Queue 获取消息
拿寄快递举例:
publisher:快递内容
exchange:京东快递
routing key:地址
message queue:收快件箱
consumer:收件人
快递发布(publisher)选择一个快递->京东快递或顺丰快递(exchange)->发送到对应地址(routing key)->放在收件箱(message queue)<-收件人(consumer)从收件箱取件
Publisher可以分为4类:
1、Direct Publisher发送点对点的消息;
2、Topic Publisher采用“发布——订阅”模式发送消息;
3、Fanout Publisher发送广播消息的发送;
4、Notify Publisher同Topic Publisher,发送 Notification 相关的消息。
Exchange可以分为3类:
1.Direct Exchange根据Routing Key进行精确匹配,只有对应的 Message Queue 会接受到消息;
2.Topic Exchange根据Routing Key进行模式匹配,只要符合模式匹配的Message Queue都会收到消息;
3.Fanout Exchange将消息转发给所有绑定的Message Queue。
OpenStack RPC 模块提供了 rpc.call,rpc.cast, rpc.fanout_cast 三种 RPC 调用方法,发送和接收 RPC 请求。
rpc.call:发送 RPC 请求并返回请求处理结果(一定要有返回值)
rpc.cast:发送 RPC 请求无返回(不需要返回值)
rpc._cast:用于发送 RPC 广播信息无返回结果
组件间通信基于rest api(每个组件内都会有一个api组件存在),组件内通信基于rpc机制
nova与cinder的工作原理类似
nova主要组成:
nova-api:与cinder-api作用类似
nova-scheduler:与cinder-scheduler作用类似
nova-compute:与cinder-volume作用类似
nova-conductor:帮助nova-computer查看数据库,然后将消息通过message queue传给nova-computer
为什么查看数据库时要借助nova-conductor而不是nova-computer直接查?
1、基于安全考虑:一旦虚拟机被攻破了,就会通过nova-computer拿到虚拟机相关信息
2、基于数据库压力考虑:nova-computer有很多个,可以同时建很多虚拟机出来,多个nova-computer同时访问数据库会对数据库造成压力
MQ(message queue)是消息的分发机制,是各个组件之间用来解耦和。是一个异步机制
数据库是用来记录整个openstack的状态的,例如各个组件的状态,建立虚拟机的详细信息,镜像的详细信息,用户的令牌等
openstack的组件全部可以单独找一台机器布置,完全是分布式的
neutron包含组件
1、neutron-server:可以理解为一个专门用来接收neutron rest api调用的服务器,然后负责将不同的rest api分发到不同的neutron-plugin上
2、neutron-plugin:可以理解为不同网络功能实现的入口,各个厂商可以开发自己的plugin。接收到分发过来的rest api后,像neutron database完成一些信息的注册,然后将具体要执行的业务操作和参数通知给自身对应的neutron agent
3、neutron-agent:可以直观的理解为neutron-plugin在设备上的代理,将通知的业务操作和参数转换为具体的设备级操作,以指导设备的动作。当设备本地发生问题时,neutron-agent会将情况通知给neutron-plugin。
neutron database:neutron的数据库,一些业务相关的参数都存在这。
neutron-plugin分为两部分:core-plugin,service-plugin
core-plugin:neutron中即为ML2(二层插件,数据链路层,基于mac地址)
ML2包括network、subnet(子网)、port(虚拟交换机上的一个虚拟交换端口)
service-plugin:除了core-plugin以外的其它plugin,包括route、firewall、loadbalancer(负载均衡器)、VPN等
部署时通常neutron-server和neutron-plugin部署在一台机器上,neutron-agent(具体干活的)部署于一台专门的机器上(这台机器被称为网络节点)
三个节点:控制节点(各个组件的api放在上面负责发请求接请求)、计算节点(负责建虚拟机的)、网络节点(负责各种各样的网络功能)
vlan网络模式特点:
1、必须跟物理网络绑定
2、大二层:广播通信
3、可以不需要网络节点
4、小规模部署,效率高
缺点:
1、4096 vlan上限问题
2、mac地址和arp表过大
3、广播风暴问题
4、基于ip地址的子网划分限制网络规模
流程图:
OpenStack部分组件通信流程图
Rpc机制实现简图
Cinder组件内部通信流程图