OpenStack配置笔记
第1章 绪论OpenStack 是一个由 NASA(美国国家航空航天局)和 Rackspace 合作研发并发起的,以 Apache 许可证授权的自由软件和开放源代码项目。
OpenStack 是一个开源的云计算管理平台项目,由几个主要的组件组合起来完成具体工作。OpenStack 支持几乎所有类型的云环境,项目目标是提供实施简单、可大规模扩展、丰富、标准统一的云计算管理平台。OpenStack 通过各种互补的服务提供了基础设施即服务(IaaS)的解决方案,每个服务提供API以进行集成。
OpenStack 是一个旨在为公共及私有云的建设与管理提供软件的开源项目。它的社区拥有超过 130 家企业及 1350 位开发者,这些机构与个人都将 OpenStack 作为基础设施即服务(IaaS)资源的通用前端。OpenStack 项目的首要任务是简化云的部署过程并为其带来良好的可扩展性。本文希望通过提供必要的指导信息,帮助大家利用 OpenStack 前端来设置及管理自己的公共云或私有云。
OpenStack 云计算平台,帮助服务商和企业内部实现类似于 Amazon EC2 和 S3的云基础架构服务(Infrastructure as a Service, IaaS)。OpenStack 包含两个主要模块:Nova 和 Swift,前者是 NASA 开发的虚拟服务器部署和业务计算模块;后者是 Rackspace 开发的分布式云存储模块,两者可以一起用,也可以分开单独用。OpenStack 除了有 Rackspace 和 NASA 的大力支持外,还有包括 Dell、 Citrix、 Cisco、 Canonical 等重量级公司的贡献和支持,发展速度非常快。
OpenStack 核心项目
OpenStack概念架构
OpenStack逻辑架构
部署架构
两节点的nova-network部署示例
三节点的neutron 部署示例
第2章 OpenStack概况
2.1、Keystone
Keystone(OpenStack>
Keystone基本概念介绍:
2.1.1 User
User即用户,他们代表可以通过keystone进行访问的人或程序。Users通过认证信息(credentials,如密码、API Keys等)进行验证。
2.1.2 Tenant
Tenant即租户,它是各个服务中的一些可以访问的资源集合。例如,在Nova中一个tenant可以是一些机器,在Swift和Glance中一个tenant可以是一些镜像存储,在Quantum中一个tenant可以是一些网络资源。Users默认的总是绑定到某些tenant上。
2.1.3 Role
Role即角色,Roles代表一组用户可以访问的资源权限,例如Nova中的虚拟机、Glance中的镜像。Users可以被添加到任意一个全局的或租户内的角色中。在全局的role中,用户的role权限作用于所有的租户,即可以对所有的租户执行role规定的权限;在租户内的role中,用户仅能在当前租户内执行role规定的权限。
2.1.4 Service
Service即服务,如Nova、Glance、Swift。根据前三个概念(User,Tenant和Role)一个服务可以确认当前用户是否具有访问其资源的权限。但是当一个user尝试着访问其租户内的service时,他必须知道这个service是否存在以及如何访问这个service,这里通常使用一些不同的名称表示不同的服务。在上文中谈到的Role,实际上也是可以绑定到某个service的。例如,当swift需要一个管理员权限的访问进行对象创建时,对于相同的role我们并不一定也需要对nova进行管理员权限的访问。为了实现这个目标,我们应该创建两个独立的管理员role,一个绑定到swift,另一个绑定到nova,从而实现对swift进行管理员权限访问不会影响到Nova或其他服务。
2.1.5 Endpoint
Endpoint,翻译为“端点”,我们可以理解它是一个服务暴露出来的访问点,如果需要访问一个服务,则必须知道他的endpoint。因此,在keystone中包含一个endpoint模板(endpoint template,在安装keystone的时候我们可以在conf文件夹下看到这个文件),这个模板提供了所有存在的服务endpoints信息。一个endpoint template包含一个URLs列表,列表中的每个URL都对应一个服务实例的访问地址,并且具有public、private和admin这三种权限。public url可以被全局访问(如http://compute.example.com),private url只能被局域网访问(如http://compute.example.local),admin url被从常规的访问中分离。
2.2 Glance
Glance项目提供虚拟机镜像的发现,注册,取得服务。Glance提供restful API可以查询虚拟机镜像的metadata,并且可以获得镜像。通过Glance,虚拟机镜像可以被存储到多种存储上,比如简单的文件存储或者对象存储(比如OpenStack中swiftx项目)。
2.2.1 Glance,像所有的OpenStack项目一样,遵循以下思想:
1.基于组件的架构 便于快速增加新特性
2.高可用性 支持大负荷
3.容错性 独立的进程避免串行错误
4.开放标准 对社区驱动的API提供参考实现
2.2.2 Glance的几个重要概念:
1.Image>
2.2.2.1
2.3 Nova
Nova提供按需分配的虚拟机。它类似于Rackspaces的cloud servers和亚马逊的Amazon Elastic ;Nova是OpenStack计算的弹性控制器。OpenStack云实例生命期所需的各种动作都将由Nova进行处理和支撑,这就意味着Nova以管理平台的身份登场,负责管理整个云的计算资源、网络、授权及测度。虽然Nova本身并不提供任何虚拟能力,但是它将使用libvirt API与虚拟机的宿主机进行交互。Nova通过Web服务API来对外提供处理接口,而且这些接口与Amazon的Web服务接口是兼容的。
2.3.1 Openstack Nova的逻辑架构
OpenStack Nova的逻辑组件,用户自定义的python编写的两种守护进程
1)WSGI应用程序去接收和中转API请求(nova-api, glance-api 等等);
2)Worker守护进程去执行orchestration任务(nova-compute, nova-network, nova-schedule等等);
2.3.2 Nova逻辑架构可以总结为以下3点
1)终端用户(开发/运维人员和其他OpenStack组件)与nova-api进行交互;
2)OpenStack Nova守护进程间通过消息队列(动作)和数据库(信息)交互;
3)OpenStack Glance是一个完全和OpenStack Nova不一样的架构,他们之间用过Glance API进行交互;
nova-api 起到了Cloud Controller的作用,主要为所有的API查询提供了一个接口(比如Openstack API ,EC2 API),引发多数业务流程的活动(如运行一个实例),并实施一些政策(主要是配额检查)。
2.3.3 功能及特点
实例生命周期管理
计算资源管理
网络与授权管理
基于REST的API
异步连续通信
支持各种宿主:Xen、XenServer/XCP、KVM、UML、VMware vSphere及Hyper-V
OpenStack计算部件
2.3.4 Nova弹性云包含以下主要部分
API Server(nova-api)
消息队列(rabbit-mq server)
运算工作站(nova-compute)
网络控制器(nova-network)
卷管理(nova-volume)
调度器(nova-scheduler)
2.3.5 API服务器(nova-api)
API服务器提供了云设施与外界交互的接口,它是外界用户对云实施管理的唯一通道。通过使用web服务来调用各种EC2的API,接着API服务器便通过消息队列把请求送达至云内目标设施进行处理。作为对EC2-api的替代,用户也可以使用OpenStack的原生API,我们把它叫做“OpenStack API”。
2.3.6 消息队列(Rabbit MQ Server)
OpenStack内部在遵循AMQP(高级消息队列协议)的基础上采用消息队列进行通信。Nova对请求应答进行异步调用,当请求接收后便则立即触发一个回调。由于使用了异步通信,不会有用户的动作被长置于等待状态。例如,启动一个实例或上传一份镜像的过程较为耗时,API调用就将等待返回结果而不影响其它操作,在此异步通信起到了很大作用,使整个系统变得更加高效。
2.3.7 运算工作站(nova-compute)
运算工作站的主要任务是管理实例的整个生命周期。他们通过消息队列接收请求并执行,从而对实例进行各种操作。在典型实际生产环境下,会架设许多运算工作站,根据调度算法,一个实例可以在可用的任意一台运算工作站上部署。
2.3.8 网络控制器(nova-network)
网络控制器处理主机的网络配置,例如IP地址分配,配置项目VLAN,设定安全群组以及为计算节点配置网络。
2.3.9 卷工作站(nova-volume)
卷工作站管理基于LVM的实例卷,它能够为一个实例创建、删除、附加卷,也可以从一个实例中分离卷。卷管理为何如此重要?因为它提供了一种保持实例持续存储的手段,比如当结束一个实例后,根分区如果是非持续化的,那么对其的任何改变都将丢失。可是,如果从一个实例中将卷分离出来,或者为这个实例附加上卷的话,即使实例被关闭,数据仍然保存其中。这些数据可以通过将卷附加到原实例或其他实例的方式而重新访问。
因此,为了日后访问,重要数据务必要写入卷中。这种应用对于数据服务器实例的存储而言,尤为重要。
2.3.10 调度器(nova-scheduler)
调度器负责把nova-API调用送达给目标。调度器以名为“nova-schedule”的守护进程方式运行,并根据调度算法从可用资源池中恰当地选择运算服务器。有很多因素都可以影响调度结果,比如负载、内存、子节点的远近、CPU架构等等。强大的是nova调度器采用的是可插入式架构。
目前nova调度器使用了几种基本的调度算法:
随机化:主机随机选择可用节点;
可用化:与随机相似,只是随机选择的范围被指定;
简单化:应用这种方式,主机选择负载最小者来运行实例。负载数据可
以从别处获得,如负载均衡服务器。
2.4 Neutron
2.4.1 基本概念
1)网络连接服务Network connectivity as a service;
2)提供面向租户(Tenant)的API接口,用于创建虚拟网络,路由器,负载均衡等,关联instance到指定的网络和路由;
3)通过API接口管理虚拟或物理交换机;
4)提供plugin架构来支持不同的技术平台;
5) Neutron Private Network – 提供固定私网地址;
6)Neutron Public Network – 提供浮动IP地址;
2.4.2 关键概念
1)Network
一个L2二层网络单元;
租户可通过Neutron API 创建自己的网络;
2) Subnet
一段IPV4/IPV6地址段;
为Instance提供私网或公网地址;
3)Router
三层路由器;
为租户的Instance提供路由功能;
4)Port
虚拟交换机上的端口;
管理Instance的网卡;
2.4.3 Neutron组件
■ Neutron Server
实现Neutron API和API扩展;
管理Network,subnet,port;
管理port的IP地址;
■ ML2 agent
运行在每个计算节点上(compute node);
连接虚拟机到网络端口;
■ DHCP agent
负责DHCP配置,为虚拟机分配IP;
开始/停止dhcp服务器In multi-host mode, run on each compute node (deferred);
Start/stop dhcp server;
Maintain dhcp configuration;
■ L3-agent
负责公网浮动ip地址和NAT;
负责其他三层特性,例如负载均衡等;
每个network对应一个L3 agent;
■ Metadata-agent
提供元数据服务Neutron L3-agent,dhcp-agent, nova metadata API server;
Neutron将网络按照三层交换机的概念分为:
Network:相当于交换机根据vlan创建的一个三层接口;
Subnet:相当于交换机创建了一个三层接口地址;
Port:相当于交换机的一个物理端口,但是这个端口有一个MAC地址;
Neutron支持的plugin有:
Open vSwitch Plugin
Cisco UCS/Nexus Plugin
Linux Bridge Plugin
Modular Layer 2 Plugin
Nicira Network Virtualization Platform (NVP) Plugin
Ryu OpenFlow Controller Plugin
NEC OpenFlow Plugin
Big Switch Controller Plugin
Cloudbase Hyper-V Plugin
MidoNet Plugin
Brocade Neutron Plugin Brocade Neutron Plugin
PLUMgrid Plugin
Mellanox Neutron Plugin Mellanox Neutron Plugin
Embrane Neutron Plugin
还有一些非官方维护的:
OpenContrail Plugin
Extreme Networks Plugin
Ruijie Networks Plugin
Juniper Networks Neutron Plugin
Neutron 之前世今生
OpenStack 网络服务,现已由之前的 Quantum 改名为 Neutron。Neutron 是 OpenStack 核心项目之一,提供云计算环境下的虚拟网络功能。OpenStack Havana 版本的>
Multi-Vendor-Support:同时支持多种物理网络类型,支持 Linux Bridge、Hyper-V 和 OVS bridge 计算节点共存;
Neutron-Fwaas:支持防火墙服务;
VPNaas:支持节点间 VPN 服务;
More-Vendors:更多的网络设备支持和开源 SDN 实现完善和提高,新增加了 ML2 (The Modular Layer2) 插件。
OpenStack nova-network 网络模型:
在 OpenStack 网络组件没有独立出来之前,OpenStack 最初的 nova-network 网络模型。
单一平面网络的缺点:
存在单一网络瓶颈,缺乏可伸缩性。
缺乏合适的多租户隔离。
OpenStack Neutron 网络模型
OpenStack nova-network 独立成为单独的组件 Neutron 后,形象的网络模型的多平面网络、混合平面私有网络。
混合平面私有网络
通过私有网络实现运营商路由功能
通过私有网络实现每个租户创建自己专属的网络区段
Neutron 网络创建过程
Neutron 网络目的是为 OpenStack 云更灵活地划分物理网络,在多租户环境下提供给每个租户独立的网络环境。另外,Neutron 提供 API 来实现这种目标。Neutron 中用户可以创建自己的网络对象,如果要和物理环境下的概念映射的话,这个网络对象相当于一个巨大的交换机,可以拥有无限多个动态可创建和销毁的虚拟端口。在 Horizon 上创建 Neutron 网络过程如下:
首先管理员拿到一组可以在互联网上寻址的 IP 地址,并且创建一个外部网络和子网。
租户创建一个网络和子网。
租户创建一个路由器并且连接租户子网和外部网络。
租户创建虚拟机。
OpenStack 网络类型
一个标准的 OpenStack 网络设置有 4 个不同的物理数据中心网络:
管理网络:用于 OpenStack 各组件之间的内部通信。
数据网络:用于云部署中虚拟数据之间的通信。
外部网络:公共网络,外部或 internet 可以访问的网络。
API 网络:暴露所有 OpenStack APIs,包括 OpenStack 网络 API 给租户们。
Neutron 服务网络管理的三种模式
Flat 模式
Flat 模式和 FlatDHCP 模式其实区别不大,都是基于网桥网络,只是 FLat 模式需要管理员手动配置(包括配置网桥和外部的 DHCP 设备)
Flat 网络拓扑
Flat DHCP 模式
这种模式下与 Flat 模式不同的地方在于有一个 DHCP 进程,每一个运行 nova-network 进程的节点(网络控制节点/nove-network 主机)就是一个单独的网络。Nova 会在 nova-network 主机建立网桥(默认名称 br100,配置项 flat_network_bridge=br100),并给该网桥指定该网络的网关 IP,同时 Nova 在网桥处起一个 DHCP 进程,最后,会建立 iptables 规则(SNAT/DNAT)使虚拟机能够与外界通信,同时与一个 metadata 服务器通信以取得 cloud 内的信息。
计算节点负责创建对应节点的网桥,此时的计算节点网卡可以不需要 IP 地址,因为网桥把虚拟机与 nove-network 主机连接在一个逻辑网络内。虚拟机启动时会发送 dhcpdiscover 以获取 IP 地址。虚拟机通往外界的数据都要通过 nova-network 主机,DHCP 在网桥处监听,分配 fixed_range 指定的 IP 段
Flat DHCP 网络拓扑。
VLAN 模式
VLAN(Virtual Local Area Network)的中文名为"虚拟局域网"。VLAN 是一种将局域网设备从逻辑上划分成一个个网段,从而实现虚拟工作组的新兴数据交换技术。
VLAN 模式与 Flat 模式的区别:
在 Flat 模式下,管理员的工作流程应该是这样的:
为所有租户创建一个 IP 池:
nova-manage network create --fixed_range_v4=10.0.0.0/16 –label=public
创建租户
租户创建虚拟机,为虚拟机分配 IP 池中的可用 IP
DB 中虚拟机信息可能如下图,从图中我们看到 2 个虚拟机处于同一网段。
在 VLAN 模式下流程如下:
创建新的租户,并记下租户的标识为该租户创建独占的 fixed_ip 段:
nova-manage network create --fixed_range_v4=10.0.1.0/24 --vlan=102 --project_id="tenantID"租户创建虚拟机,从租户的私有 IP 段内分配 IP 给虚拟机。
因此,与 Flat 模式相比,VLAN 模式为网络增加了:将网络与租户关联和为网络分配一个 VLAN 号。
2.5 Horizon
Horizon是一个用以管理、控制OpenStack服务的Web控制面板,它可以管理实例、镜像、创建密匙对,对实例添加卷、操作Swift容器等。除此之外,用户还可以在控制面板中使用终端(console)或VNC直接访问实例。总之,Horizon具有如下一些特点:
1、实例管理:创建、终止实例,查看终端日志,VNC连接,添加卷等
2、访问与安全管理:创建安全群组,管理密匙对,设置浮动IP等
3、偏好设定:对虚拟硬件模板可以进行不同偏好设定
4、镜像管理:编辑或删除镜像
5、查看服务目录
6、管理用户、配额及项目用途
7、用户管理:创建用户等
8、卷管理:创建卷和快照
9、对象存储处理:创建、删除容器和对象
10、为项目下载环境变量
2.6 Cinder
Cinder提供持久化块存储,.一个独立的volume可以灵活的挂载和卸载到不同的VM实例(就好比我们的一块硬盘拔插了)。VM实例可以用cinder volume作为启动盘。Block Storage服务无法提供类似于NFS的共享存储。一个块设备同时只能挂在到一个VM实例。
2.6.1 服务组件
Cinder有如下服务组件:
cinder-api:WSGI应用,接受API请求并发送到cinder-volume处理。
cinder-scheduler:调度器,处理消息队列中的请求,并根据预定策略(Filter Scheduler)选择合适的cinder-volume节点来完成请求。
cinder-volume:cinder-volume服务运行在存储节点上,管理块存储设备。该服务会对cinder数据库进行读写操作,通过消息队列与其他服务交互(如cinder-scheduler)。cinder-volume支持多种后端存储。多个存储节点可以组成一个存储资源池。
cinder-backup:可以将volume备份到多种目标对象(如swift、ceph)。
Messaging queue:在块存储服务之间传递消息,块存储服务和计算节点交互来为VM提供volume。
2.6.2 Cinder其他概念
·Back-end Storage Devices.:后端存储设备,默认采用本地LVM VG。此外,Cinder还支持很多种存储。
·Users和Tenants (Projects):我的理解是这里也是基于Keystone的权限控制。对于租户而言,cinder quota控制可以做如下限制:创建volume的数量、创建快照的数量、每个租户总空间(volume和快照分享)。用户有权使用哪些volume是通过租户来限制的。控制硬件资源quota是对每个租户启用的,而授予vomle访问权限的key pairs是对单个用户启用的。
2.6.3 Volume Type
Volume Type是一个条件的抽象集合,这个集合用来定义一个特定的服务水平(如惯称的金、银、铜),包含一个key/value pairs列表(可通过cinder extra-specs-list查看)。可以在创建volume时指定volume类型,volume创建后类型是可以修改的。cinder scheduler可以根据volume类型定义来指定存储后端,而且volume类型还可以用来指定存储后端的行为依赖的特殊信息。volume类型名可以任意指定。
当使用cinder-volume节点使用多种后端存储时,必须启用filter_scheduler。scheduler使用 filtering和weighing来选择最优的存储后端。首先,filter scheduler过滤可用的存储后端,默认情况下,AvailabilityZoneFilter,CapacityFilter和CapabilitiesFilter被启用。然后,filter scheduler会通过scheduler weigher权衡先前过滤的存储后端,默认情况下,CapacityWeigheris被启用,此种情况下会优先使用容量较多的存储后端。
Volume类型默认key pairs有:volume_backend_name(在cinder.conf定义的名字)、verdor_name、driver_version、storage_protocol。每个厂商的存储会有自己的Extra Specs。此外,目前cinder还支持Qos,Cinder的Qos主要依赖于frontend(hypervisor)和backend(存储)。
Frontend可以通过吞吐量(total_bytes_sec, read_bytes_sec, write_bytes_sec)、IPOS(total_iops_sec,read_iops_sec,write_iops_sec)来控制。
2.7 Swift
Swift 最初是由 Rackspace 公司开发的高可用分布式对象存储服务,并于 2010 年贡献给 OpenStack 开源社区作为其最初的核心子项目之一,为其 Nova 子项目提供虚机镜像存储服务。Swift 构筑在比较便宜的标准硬件存储基础设施之上,无需采用 RAID(磁盘冗余阵列),通过在软件层面引入一致性散列技术和数据冗余性,牺牲一定程度的数据一致性来达到高可用性和可伸缩性,支持多租户模式、容器和对象读写操作,适合解决互联网的应用场景下非结构化数据存储问题。
2.7.1 数据模型
Swift 采用层次数据模型,共设三层逻辑结构:Account/Container/Object(即账户/容器/对象),每层节点数均没有限制,可以任意扩展。这里的账户和个人账户不是一个概念,可理解为租户,用来做顶层的隔离机制,可以被多个个人账户所共同使用;容器代表封装一组对象,类似文件夹或目录;叶子节点代表对象,由元数据和内容两部分组成。
2.7.2 系统架构
Swift 采用完全对称、面向资源的分布式系统架构设计,所有组件都可扩展,避免因单点失效而扩散并影响整个系统运转;通信方式采用非阻塞式 I/O 模式,提高了系统吞吐和响应能力。
2.7.3 基本原理
一致性散列(Consistent Hashing)
面对海量级别的对象,需要存放在成千上万台服务器和硬盘设备上,首先要解决寻址问题,即如何将对象分布到这些设备地址上。Swift 是基于一致性散列技术,通过计算可将对象均匀分布到虚拟空间的虚拟节点上,在增加或删除节点时可大大减少需移动的数据量;虚拟空间大小通常采用 2 的 n 次幂,便于进行高效的移位操作;然后通过独特的数据结构 Ring(环)再将虚拟节点映射到实际的物理存储设备上,完成寻址过程。
以逆时针方向递增的散列空间有 4 个字节长共 32 位,整数范围是;将散列结果右移 m 位,可产生 232-m个虚拟节点,例如 m=29 时可产生 8 个虚拟节点。在实际部署的时候需要经过仔细计算得到合适的虚拟节点数,以达到存储空间和工作负载之间的平衡。
2.7.4 数据一致性模型(Consistency Model)
按照 Eric Brewer 的 CAP(Consistency,Availability,Partition Tolerance)理论,无法同时满足 3 个方面,Swift 放弃严格一致性(满足 ACID 事务级别),而采用最终一致性模型(Eventual Consistency),来达到高可用性和无限水平扩展能力。为了实现这一目标,Swift 采用 Quorum 仲裁协议(Quorum 有法定投票人数的含义):
(1)定义:N:数据的副本总数;W:写操作被确认接受的副本数量;R:读操作的副本数量;
(2)强一致性:R+W>N,以保证对副本的读写操作会产生交集,从而保证可以读取到最新版本;如果 W=N,R=1,则需要全部更新,适合大量读少量写操作场景下的强一致性;如果 R=N,W=1,则只更新一个副本,通过读取全部副本来得到最新版本,适合大量写少量读场景下的强一致性。
(3)弱一致性:R+W<=N,如果读写操作的副本集合不产生交集,就可能会读到脏数据;适合对一致性要求比较低的场景。
Swift 针对的是读写都比较频繁的场景,所以采用了比较折中的策略,即写操作需要满足至少一半以上成功 W >N/2,再保证读操作与写操作的副本集合至少产生一个交集,即 R+W>N。Swift 默认配置是 N=3,W=2>N/2,R=1 或 2,即每个对象会存在 3 个副本,这些副本会尽量被存储在不同区域的节点上;W=2 表示至少需要更新 2 个副本才算写成功;当 R=1 时意味着某一个读操作成功便立刻返回,此种情况下可能会读取到旧版本(弱一致性模型);当 R=2 时,需要通过在读操作请求头中增加 x-newest=true 参数来同时读取 2 个副本的元数据信息,然后比较时间戳来确定哪个是最新版本(强一致性模型);如果数据出现了不一致,后台服务进程会在一定时间窗口内通过检测和复制协议来完成数据同步,从而保证达到最终一致性。
2.7.5 环的数据结构
环是为了将虚拟节点(分区)映射到一组物理存储设备上,并提供一定的冗余度而设计的,其数据结构由以下信息组成:
存储设备列表、设备信息包括唯一标识号(id)、区域号(zone)、权重(weight)、IP 地址(ip)、端口(port)、设备名称(device)、元数据(meta)。
分区到设备映射关系(replica2part2dev_id 数组)
计算分区号的位移(part_shift 整数,即图 1 中的 m)
以查找一个对象的计算过程为例:
环的数据机构
使用对象的层次结构 account/container/object 作为键,使用 MD5 散列算法得到一个散列值,对该散列值的前 4 个字节进行右移操作得到分区索引号,移动位数由上面的 part_shift 设置指定;按照分区索引号在分区到设备映射表(replica2part2dev_id)里查找该对象所在分区的对应的所有设备编号,这些设备会被尽量选择部署在不同区域(Zone)内,区域只是个抽象概念,它可以是某台机器,某个机架,甚至某个建筑内的机群,以提供最高级别的冗余性,建议至少部署 5 个区域;权重参数是个相对值,可以来根据磁盘的大小来调节,权重越大表示可分配的空间越多,可部署更多的分区。Swift 为账户,容器和对象分别定义了的环,查找账户和容器的是同样的过程。
2.7.6数据模型
Swift 采用层次数据模型,共设三层逻辑结构:Account/Container/Object(即账户/容器/对象),每层节点数均没有限制,可以任意扩展。这里的账户和个人账户不是一个概念,可理解为租户,用来做顶层的隔离机制,可以被多个个人账户所共同使用;容器代表封装一组对象,类似文件夹或目录;叶子节点代表对象,由元数据和内容两部分组成。
2.7.8 系统架构
Swift 采用完全对称、面向资源的分布式系统架构设计,所有组件都可扩展,避免因单点失效而扩散并影响整个系统运转;通信方式采用非阻塞式 I/O 模式,提高了系统吞吐和响应能力。
2.7.9 Swift 组件
代理服务(Proxy Server):对外提供对象服务 API,会根据环的信息来查
找服务地址并转发用户请求至相应的账户、容器或者对象服务;由于采用无状态的REST 请求协议,可以进行横向扩展来均衡负载。
认证服务(Authentication Server):验证访问用户的身份信息,并获得
一个对象访问令牌(Token),在一定的时间内会一直有效;验证访问令牌的有效性并缓存下来直至过期时间。
缓存服务(Cache Server):缓存的内容包括对象服务令牌,账户和容器的
存在信息,但不会缓存对象本身的数据;缓存服务可采用 Memcached 集群,Swift
会使用一致性散列算法来分配缓存地址。
账户服务(Account Server):提供账户元数据和统计信息,并维护所含容
器列表的服务,每个账户的信息被存储在一个 SQLite 数据库中。
容器服务(Container Server):提供容器元数据和统计信息,并维护所含
对象列表的服务,每个容器的信息也存储在一个 SQLite 数据库中。
对象服务(Object Server):提供对象元数据和内容服务,每个对象的内
容会以文件的形式存储在文件系统中,元数据会作为文件属性来存储,建议采用支持扩展属性的 XFS 文件系统。
复制服务(Replicator):会检测本地分区副本和远程副本是否一致,具体
是通过对比散列文件和高级水印来完成,发现不一致时会采用推式(Push)更新
远程副本,例如对象复制服务会使用远程文件拷贝工具 rsync 来同步;另外一
个任务是确保被标记删除的对象从文件系统中移除。
更新服务(Updater):当对象由于高负载的原因而无法立即更新时,任务
将会被序列化到在本地文件系统中进行排队,以便服务恢复后进行异步更新;例如成功创建对象后容器服务器没有及时更新对象列表,这个时候容器的更新操作就会进入排队中,更新服务会在系统恢复正常后扫描队列并进行相应的更新处理。审计服务(Auditor):检查对象,容器和账户的完整性,如果发现比特级的错误,文件将被隔离,并复制其他的副本以覆盖本地损坏的副本;其他类型的错误会被记录到日志中。
账户清理服务(Account Reaper):移除被标记为删除的账户,删除其所包
含的所有容器和对象。
Swift 通过 Proxy Server 向外提供基于 HTTP 的 REST 服务接口,对账
户、容器和对象进行 CRUD 等操作。在访问 Swift 服务之前,需要先通过认证服务获取访问令牌,然后在发送的请求中加入头部信息 X-Auth-Token。
第3章项目实施过程
3.1 安全
OpenStack 服务支持各种各样的安全方式,包括密码 password、policy 和 encryption,支持的服务包括数据库服务器,且消息 broker 至少支持 password 的安全方式。
下面的表格给出了需要密码的服务列表以及它们在指南中关联关系:
OpenStack和配套服务在安装和操作过程中需要管理员权限。另外,网络服务设定内核网络参数的默认值并且修改防火墙规则。
3.2 环境
开启多台虚拟机搭建分布式OpenStack,搭建移动热点使各个节点和主机连接起来,在局域网内建立分布式openstack。
配置每个节点和主机的IP地址:
Network节点ip地址配置:
Controller节点IP地址配置:
Compute节点1IP地址配置:
Compute节点2IP地址配置:
Block Storage节点IP地址配置:
Object Storage节点1IP地址配置:
Object Storage节点2IP地址配置:
配置主机环境
安装时间同步服务,在每台主机上安装时间同步服务,其中的一台配置如下图:
配置OpenStack安装包源,为每个节点配置yum安装源,其中的一台主机的安装源配置如下:
在控制节点安装消息队列服务RabbitMQ
3.3 安装数据库Mariadb
创建证书和密钥,启动keystone,并设置keystone开机启动
修改keyston配置文件/etc/keystone/keystone.conf
启动openstack-keystone服务
http://images2015.cnblogs.com/blog/1019477/201610/1019477-20161010221532227-154692436.png
创建周期性的任务清除keystone数据库数据,避免数据库存放大量过期令牌而降低服务器性能;
http://images2015.cnblogs.com/blog/1019477/201610/1019477-20161010221543149-1177691442.png
配置环境变量
http://images2015.cnblogs.com/blog/1019477/201610/1019477-20161010221549727-123300988.png
http://images2015.cnblogs.com/blog/1019477/201610/1019477-20161010221737055-430195429.png
3.4 创建租户、用户和角色
创建管理员租户
http://images2015.cnblogs.com/blog/1019477/201610/1019477-20161010221558758-308549596.png
将管理员账号admin加入管理员租户admin和管理员角色admin
http://images2015.cnblogs.com/blog/1019477/201610/1019477-20161010221946883-1834689273.png
创建管理员角色
http://images2015.cnblogs.com/blog/1019477/201610/1019477-20161010221953211-929636734.png
创建一般租户demo
http://images2015.cnblogs.com/blog/1019477/201610/1019477-20161010221708008-663127900.png
创建用户demo并加入租户demo
http://images2015.cnblogs.com/blog/1019477/201610/1019477-20161010222001243-57084994.png
为openstack服务创建一个租户
http://images2015.cnblogs.com/blog/1019477/201610/1019477-20161010222017133-1304080527.png
为keystone创建服务实体
http://images2015.cnblogs.com/blog/1019477/201610/1019477-20161010222021586-1364022577.png
创建keystone服务API访问点
http://images2015.cnblogs.com/blog/1019477/201610/1019477-20161010222027414-197778782.png
删除环境变量,以管理员身份查看令牌
http://images2015.cnblogs.com/blog/1019477/201610/1019477-20161010222033180-856230579.png
以管理员身份查看租户列表
http://images2015.cnblogs.com/blog/1019477/201610/1019477-20161010222040649-2114674671.png
以管理员身份查看用户列表
http://images2015.cnblogs.com/blog/1019477/201610/1019477-20161010222112149-117065923.png
以管理员身份查看角色列表
http://images2015.cnblogs.com/blog/1019477/201610/1019477-20161010222119414-449225751.png
以普通用户身份获取令牌
http://images2015.cnblogs.com/blog/1019477/201610/1019477-20161010222126696-341232495.png
以普通用户身份查看用户列表,发现没有权限
http://images2015.cnblogs.com/blog/1019477/201610/1019477-20161010222133383-325014733.png
创建管理员环境
http://images2015.cnblogs.com/blog/1019477/201610/1019477-20161010222140274-1497492157.png
创建普通用户环境
http://images2015.cnblogs.com/blog/1019477/201610/1019477-20161010222146102-1673222622.png
3.5 网络节点配置
http://images2015.cnblogs.com/blog/1019477/201610/1019477-20161010222151461-393221286.png
http://images2015.cnblogs.com/blog/1019477/201610/1019477-20161010222202899-933189.png
http://images2015.cnblogs.com/blog/1019477/201610/1019477-20161010222207618-1331362556.png
http://images2015.cnblogs.com/blog/1019477/201610/1019477-20161010222213430-2120797041.png
http://images2015.cnblogs.com/blog/1019477/201610/1019477-20161010222219102-26183617.png
http://images2015.cnblogs.com/blog/1019477/201610/1019477-20161010222227977-1165822770.png
http://images2015.cnblogs.com/blog/1019477/201610/1019477-20161010222233618-1148622011.png
http://images2015.cnblogs.com/blog/1019477/201610/1019477-20161010222240899-1592406708.png
3.6 计算节点配置
http://images2015.cnblogs.com/blog/1019477/201610/1019477-20161010222254852-1971697483.png
http://images2015.cnblogs.com/blog/1019477/201610/1019477-20161010222300461-1714108827.png
http://images2015.cnblogs.com/blog/1019477/201610/1019477-20161010222307555-2093828184.png
http://images2015.cnblogs.com/blog/1019477/201610/1019477-20161010222312977-292258011.png
http://images2015.cnblogs.com/blog/1019477/201610/1019477-20161010222320180-138170634.png
http://images2015.cnblogs.com/blog/1019477/201610/1019477-20161010222325977-1018451868.png
http://images2015.cnblogs.com/blog/1019477/201610/1019477-20161010222332743-1663808800.png
http://images2015.cnblogs.com/blog/1019477/201610/1019477-20161010222338821-1914832068.png
3.7 添加镜像服务
OpenStack 的镜像服务 (glance) 允许用户发现、注册和恢复虚拟机镜像。它提供了一个 REST API,允许您查询虚拟机镜像的 metadata 并恢复一个实际的镜像。您可以存储虚拟机镜像通过不同位置的镜像服务使其可用,就像 OpenStack 对象存储那样从简单的文件系统到对象存储系统。
OpenStack镜像服务是IaaS的核心服务,
如同 :ref:get_started_conceptual_architecture所示。它接受磁盘镜像或服务器镜像API请求,和来自终端用户或OpenStack计算组件的镜像元数据。它也支持包括OpenStack对象存储在内的多种类型仓库上的磁盘镜像或服务器镜像存储。
大量周期性进程运行于OpenStack镜像服务上以支持缓存。同步复制(Replication)服务保证集群中的一致性和可用性。其它周期性进程包括auditors, updaters, 和 reapers。
OpenStack镜像服务包括以下组件:
glance-api
接收镜像API的调用,诸如镜像发现、恢复、存储。
glance-registry
存储、处理和恢复镜像的元数据,元数据包括项诸如大小和类型。
数据库
存放镜像元数据,用户是可以依据个人喜好选择数据库的,多数的部署使用MySQL或SQLite镜像文件的存储仓库。支持多种类型的仓库,它们有普通文件系统、对象存储、RADOS块设备、HTTP、以及亚马逊S3。记住,其中一些仓库仅支持只读方式使用。
安装和配置:
前提条件
安装和配置镜像服务之前,你必须创建创建一个数据库、服务凭证和API端点。
1)完成下面的步骤以创建数据库:
用数据库连接客户端以 root 用户连接到数据库服务器
创建 glance 数据库
对glance数据库授予恰当的权限
退出数据库客户端。
http://images2015.cnblogs.com/blog/1019477/201610/1019477-20161010222355711-1510128785.png
2)获得 admin 凭证来获取只有管理员能执行命令的访问权限:
http://images2015.cnblogs.com/blog/1019477/201610/1019477-20161010222403336-1608157065.png
3)要创建服务证书
创建 glance 用户:
添加 admin 角色到 glance 用户和 service 项目上
*创建glance服务实体:
http://images2015.cnblogs.com/blog/1019477/201610/1019477-20161010222451227-1965037682.png
4)创建镜像服务的 API 端点:
http://images2015.cnblogs.com/blog/1019477/201610/1019477-20161010222457258-1271261193.png
安全并配置组件
1、安装软件包
http://images2015.cnblogs.com/blog/1019477/201610/1019477-20161010222503024-1517563992.png
2、编辑文件 /etc/glance/glance-api.conf 并完成如下动作:
1)在 部分,配置数据库访问
2)在 和 部分,配置认证服务访问
3)在“”部分,配置本地文件系统存储和镜像文件位置
4)“”部分,配置 noop 禁用通知,因为他们只适合与可选的Telemetry 服务
5)(可选的)为帮助排错,在 “”部分启用详细日志
http://images2015.cnblogs.com/blog/1019477/201610/1019477-20161010222513086-11206608.png
3、编辑文件 /etc/glance/glance-registry.conf 并完成如下动作
1)在 部分,配置数据库访问
2)在 和 部分,配置认证服务访问
3)在“”部分,配置 noop 禁用通知,因为他们只适合与可选的Telemetry 服务
http://images2015.cnblogs.com/blog/1019477/201610/1019477-20161010222520274-2015798173.png
4、写入镜像服务数据库
http://images2015.cnblogs.com/blog/1019477/201610/1019477-20161010222528133-196429438.png
完成安装
启动镜像服务、配置他们随机启动
http://images2015.cnblogs.com/blog/1019477/201610/1019477-20161010222535352-1890386474.png
http://images2015.cnblogs.com/blog/1019477/201610/1019477-20161010222540930-1928673120.png
第5章项目出现问题
问题1:unable to establish connection to
http://controller:35357/v2.0/
问题2:keystone user-create --name neutron --pass xcu2016
Expecting an auth URL via either --os-auth-url or env
source admin-openrc.sh
问题3:keystone endpoint-create --service-id $(keystone service-list | awk '/>
usage: keystone [--version] [--debug] [--os-username
问题4:出现错误,有待解决:
http://images2015.cnblogs.com/blog/1019477/201610/1019477-20161010223146946-1246672360.png
问题5:
http://images2015.cnblogs.com/blog/1019477/201610/1019477-20161010223158118-205316374.png
Rm -f /var/run/yum.pid
问题6:重http://images2015.cnblogs.com/blog/1019477/201610/1019477-20161010223204133-61893309.png
启服务是起不来,日志也不报错
解决办法参考:
http://blog.csdn.net/Moolight_shadow/article/details/46848771
问题7:在web浏览dashboard,可以访问输入用户和密码,dashboard/admin页面提示“报错,请刷新,如需帮助请联系管理员”刷新后还是此错误;
http://images2015.cnblogs.com/blog/1019477/201610/1019477-20161010223222602-70193194.png
解决办法参考:http://www.aboutyun.com/forum.php?mod=viewthread&tid=11954
问题8:
http://images2015.cnblogs.com/blog/1019477/201610/1019477-20161010223232243-23541254.png
解决办法参考:
http://bbs.csdn.net/topics/390388209
http://blog.csdn.net/mashangyou/article/details/24237819
问题9:
http://images2015.cnblogs.com/blog/1019477/201610/1019477-20161010223239321-933850419.png
解决方法参考:
http://www.aboutyun.com/thread-11424-1-1.html
http://www.iyunv.com/Linux/2013-02/78919p4.htm
问题10:
http://images2015.cnblogs.com/blog/1019477/201610/1019477-20161010223244102-1843031666.png
解决方法参考链接:
http://blog.csdn.net/yxwmzouzou/article/details/43892261
http://bbs.csdn.net/topics/390847319
http://www.aboutyun.com/thread-11203-1-1.html
问题11:
http://images2015.cnblogs.com/blog/1019477/201610/1019477-20161010223253071-1134250276.png
http://bbs.vmsky.com/thread-48297-1-1.html#userconsent#
http://www.aboutyun.com/blog-61-1758.html
https://ask.openstack.org/en/question/54706/swiftclientserviceswifterror-account-not-found/
问题12:
错误信息:
$ env |grep OS
OS_PROJECT_DOMAIN_ID=default
OS_IMAGE_API_VERSION=2
OS_USER_DOMAIN_ID=default
OS_PROJECT_NAME=admin
OS_PASSWORD=admin
OS_AUTH_URL=http://controller:35357/v3
OS_USERNAME=admin
OS_TENANT_NAME=admin
OS_VOLUME_API_VERSION=2
$ swift --debug list
DEBUG:keystoneclient.auth.identity.v2:Making authentication request to http://controller:35357/v3/tokens
INFO:urllib3.connectionpool:Starting new HTTP connection (1): controller
DEBUG:urllib3.connectionpool:"POST /v3/tokens HTTP/1.1" 404 93
DEBUG:keystoneclient.session:Request returned failure status: 404
ERROR:swiftclient:Authorization Failure. Authorization Failed: The resource could not be found. (HTTP 404) (Request-ID: req-f62328e5-d8e9-49e6-9b0d-50130c3bcd8d)
Traceback (most recent call last):
File "/usr/lib/python2.7/dist-packages/swiftclient/client.py", line 1235, in _retry self.url, self.token = self.get_auth()
File "/usr/lib/python2.7/dist-packages/swiftclient/client.py", line 1209, in get_auth insecure=self.insecure)
File "/usr/lib/python2.7/dist-packages/swiftclient/client.py", line 406, in get_auth
auth_version=auth_version)
File "/usr/lib/python2.7/dist-packages/swiftclient/client.py", line 341, in get_auth_keystone
raise ClientException('Authorization Failure. %s' % err)
ClientException: Authorization Failure. Authorization Failed: The resource could not be found. (HTTP 404) (Request-ID:req-f62328e5-d8e9-49e6-9b0d-50130c3bcd8d)
Authorization Failure. Authorization Failed: The resource could not be found. (HTTP 404) (Request-ID:req-f62328e5-d8e9-49e6-9b0d-50130c3bcd8d)
解决方法参考:
https://bugs.launchpad.net/python-swiftclient/+bug/1470328
错误信息:
$ env |grep OS
OS_PROJECT_DOMAIN_ID=default
OS_IMAGE_API_VERSION=2
OS_USER_DOMAIN_ID=default
OS_PROJECT_NAME=admin
OS_PASSWORD=admin
OS_AUTH_URL=http://controller:35357/v3
OS_USERNAME=admin
OS_TENANT_NAME=admin
OS_VOLUME_API_VERSION=2
$ swift --debug list
DEBUG:keystoneclient.auth.identity.v2:Making authentication request to http://controller:35357/v3/tokens
INFO:urllib3.connectionpool:Starting new HTTP connection (1): controller
DEBUG:urllib3.connectionpool:"POST /v3/tokens HTTP/1.1" 404 93
DEBUG:keystoneclient.session:Request returned failure status: 404
ERROR:swiftclient:Authorization Failure. Authorization Failed: The resource could not be found. (HTTP 404) (Request-ID: req-f62328e5-d8e9-49e6-9b0d-50130c3bcd8d)
Traceback (most recent call last):
File "/usr/lib/python2.7/dist-packages/swiftclient/client.py", line 1235, in _retry
self.url, self.token = self.get_auth()
File "/usr/lib/python2.7/dist-packages/swiftclient/client.py", line 1209, in get_auth
insecure=self.insecure)
File "/usr/lib/python2.7/dist-packages/swiftclient/client.py", line 406, in get_auth
auth_version=auth_version)
File "/usr/lib/python2.7/dist-packages/swiftclient/client.py", line 341, in get_auth_keystone
raise ClientException('Authorization Failure. %s' % err)
ClientException: Authorization Failure. Authorization Failed: The resource could not be found. (HTTP 404) (Request-ID: req-f62328e5-d8e9-49e6-9b0d-50130c3bcd8d)
Authorization Failure. Authorization Failed: The resource could not be found. (HTTP 404) (Request-ID: req-f62328e5-d8e9-49e6-9b0d-50130c3bcd8d)
解决方法:
https://bugs.launchpad.net/python-swiftclient/+bug/1470328
问题13:
安装yum源出现的错误:A
http://images2015.cnblogs.com/blog/1019477/201610/1019477-20161010223314664-418857476.png
解决方法:
http://images2015.cnblogs.com/blog/1019477/201610/1019477-20161010223324508-954054695.png
重新安装neutron节点的插件:
http://images2015.cnblogs.com/blog/1019477/201610/1019477-20161010223330102-1775073839.png
http://images2015.cnblogs.com/blog/1019477/201610/1019477-20161010223337336-556700259.png
http://images2015.cnblogs.com/blog/1019477/201610/1019477-20161010223342680-1650223481.png
http://images2015.cnblogs.com/blog/1019477/201610/1019477-20161010223347555-1226416198.png
http://images2015.cnblogs.com/blog/1019477/201610/1019477-20161010223354008-166882062.png
http://images2015.cnblogs.com/blog/1019477/201610/1019477-20161010223401461-1624301117.png
http://images2015.cnblogs.com/blog/1019477/201610/1019477-20161010223406305-810040306.png
http://images2015.cnblogs.com/blog/1019477/201610/1019477-20161010223414274-767506113.png
http://images2015.cnblogs.com/blog/1019477/201610/1019477-20161010223421305-1122368217.png
http://images2015.cnblogs.com/blog/1019477/201610/1019477-20161010223428539-550618469.png
http://images2015.cnblogs.com/blog/1019477/201610/1019477-20161010223435696-1913584050.png
http://images2015.cnblogs.com/blog/1019477/201610/1019477-20161010223441508-247593802.png
使用nova-network方法安装neutron节点:
http://images2015.cnblogs.com/blog/1019477/201610/1019477-20161010223506868-1101762630.png
http://images2015.cnblogs.com/blog/1019477/201610/1019477-20161010223512321-625829945.png
http://images2015.cnblogs.com/blog/1019477/201610/1019477-20161010223517274-981221184.png
使用以下命令时出错:
nova network-create demo-net --bridge br100 --multi-host T --fixed-range-v4 255.255.255.0
遇到问题
执行命令:
swift list
产生如下错误:
1.Traceback (most recent call last):
2.File "/usr/bin/swift", line 10, in
不能定位错误,使用--debug,如下命令
swif--debug stat
http://images2015.cnblogs.com/blog/1019477/201610/1019477-20161010223542571-253975321.png
解决方法一:
检查和创建身份认证服务
http://images2015.cnblogs.com/blog/1019477/201610/1019477-20161010223553024-318865493.png
http://images2015.cnblogs.com/blog/1019477/201610/1019477-20161010223622649-119750017.png
http://images2015.cnblogs.com/blog/1019477/201610/1019477-20161010223629618-1741666732.png
http://images2015.cnblogs.com/blog/1019477/201610/1019477-20161010223637758-1285465273.png
解决方法二:
http://images2015.cnblogs.com/blog/1019477/201610/1019477-20161010223651118-77904453.png
解决方法三:
swift start 提示Account not found错误
查看swift stat
Traceback (most recent call last):File "/usr/bin/swift", line 10, in
解决方式六:
http://images2015.cnblogs.com/blog/1019477/201610/1019477-20161010223726571-749099052.png
http://images2015.cnblogs.com/blog/1019477/201610/1019477-20161010223755055-1443945717.png
解决方式七:
http://images2015.cnblogs.com/blog/1019477/201610/1019477-20161010223804899-1671088464.png
http://images2015.cnblogs.com/blog/1019477/201610/1019477-20161010223812368-807681181.png
解决方式八:
http://images2015.cnblogs.com/blog/1019477/201610/1019477-20161010223818477-1705380322.png
http://images2015.cnblogs.com/blog/1019477/201610/1019477-20161010223826883-63443470.png
问题14:
http://images2015.cnblogs.com/blog/1019477/201610/1019477-20161010223833258-787247456.png
解决方法一:
http://images2015.cnblogs.com/blog/1019477/201610/1019477-20161010223844602-508138489.png
解决方法二:http://images2015.cnblogs.com/blog/1019477/201610/1019477-20161010223853805-2145680836.png
可用的解决方案:
Setup of this environment is based on installation guide of kilo version. The openstack service on keystone node works just fine but swift doesn't. After then I modified the openstack client enviroment scripts from export OS_AUTH_URL=http://controller:35357/v3 to export OS_AUTH_URL=http://controller:35357/v2.0 the debug info is as below
解决方案三:
http://images2015.cnblogs.com/blog/1019477/201610/1019477-20161010223905946-1352014333.png
set OS_AUTH_VERSION=3
解决方法参考链接:
http://www.aboutyun.com/blog-61-1758.html
http://www.aboutyun.com/thread-11692-1-1.html
http://bbs.vmsky.com/thread-48297-1-1.html
http://www.cnblogs.com/fczjuever/p/3224022.html
https://bugs.launchpad.net/python-swiftclient/+bug/1392813
https://bugs.launchpad.net/openstack-manuals/+bug/1485278/comments/13
https://ask.openstack.org/en/question/54706/swiftclientserviceswifterror-account-not-found/
http://blog.csdn.net/evandeng2009/article/details/48775087
https://ask.openstack.org/en/question/68565/error-openstack-the-resource-could-not-be-found-http-404-openstack-user-list/
https://bugs.launchpad.net/python-swiftclient/+bug/1469974
http://www.gossamer-threads.com/lists/openstack/operators/40255
https://bugs.launchpad.net/python-swiftclient/+bug/1470328
问题15:
网络节点和swfit无法正常启动,修改安装源,重新配置配置openstack。
参考22日工作日志;
问题16:WARNING: swift has no endpoint in ! Available endpoints for this service:
参考链接:
http://blog.csdn.net/linglong0820/article/details/48392119
http://docs.openstack.org/liberty/zh_CN/install-guide-rdo/common/app_support.html
public-instance
ERROR (ClientException): Unexpected API Error. Please report this at http://bugs.launchpad.net/nova/ and attach the Nova API log if possible.
<class 'keystoneclient.exceptions.ConnectionRefused'> (HTTP 500) (Request-ID: req-cd203753-3b91-4c44-9e90-83dd1287261f)
解决办法参考链接:
https://bugs.launchpad.net/nova/+bug/1519641
https://wiki.openstack.org/wiki/Nova/BugsTeam/BugReportTemplate
http://docs.openstack.org/liberty/zh_CN/install-guide-rdo/common/app_support.html
http://docs.openstack.org/liberty/install-guide-ubuntu/launch-instance-public.html
https://bugs.launchpad.net/nova/+bug/1534163
https://ask.openstack.org/en/question/85804/liberty-ubuntu-launch-instance-failure-expecting-passwordcredentials/
https://bugs.launchpad.net/nova/+bug/1535079
https://bugs.launchpad.net/python-keystoneclient/+bug/1309180
https://answers.launchpad.net/nova/+question/222498
http://nullege.com/codes/search/keystoneclient.exceptions.ConnectionRefused
参考文献
http://www.ibm.com/developerworks/cn/cloud/library/1310_zhanghua_openstackswif/
http://www.pythontip.com/blog/post/11128/
http://blog.csdn.net/zzcase/article/details/6623424
http://jingyan.baidu.com/article/624e7459afe5ef34e9ba5a7d.html
http://blog.sina.com.cn/s/blog_4cccd8d30102vbr5.html
http://www.pythontip.com/blog/post/11128/
http://wenku.baidu.com/link?url=iENssQyC_pfmDjByQCvjTDEojCibILR0cFJXMeiiJn7x-V
5CF8AsfdFMpqzkpJkWfFQCrFLo4b-pTYRhf41H_0fFFM0 2LqLK6kXCDEkemze
http://www.openstack.cn/?p=1065
http://www.server110.com/openstack/201403/6926.html
http://blog.csdn.net/xiangmin2587/article/details/7737778
http://www.aboutyun.com/thread-9264-1-1.html
http://www.aboutyun.com/thread-7111-1-1.html
http://jingyan.baidu.com/article/624e7459afe5ef34e9ba5a7d.html
http://www.xuebuyuan.com/1201872.html
http://www.open-open.com/doc/view/264e20cb38854451ac60e275ea64414e
http://my.oschina.net/u/138210/blog/144639
http://www.verydemo.com/demo_c287_i28027.html
http://www.pythontip.com/blog/post/11128/
OpenStack 官方安装文档《openstack-install-guide-apt-kilo.pdf》
极客学院ujnzhoubing:《http://www.jikexueyuan.com/course/openstack/》
https://www.ustack.com/blog/neutron_intro/
https://www.ustack.com/blog/neutron_loadbalance/?cm_mc_uid=40971213882214662471179&cm_mc_sid_50200000=1466253986
http://www.ibm.com/developerworks/cn/cloud/library/1402_chenhy_openstacknetwor/
http://blog.csdn.net/u012336923/article/details/50181713
http://bbs.csdn.net/topics/390649427
http://stackoverflow.com/questions/29589835/unable-to-establish-a-connection-with-http-controller35357-v2-
页:
[1]