OpenStack安装部署

OpenStack是一个美国国家航空航天局和Rackspace合作研发的,以Apache许可证授权,并且是一个自由软件和开放源代码项目。

OpenStack主要包括以下几个子项目: OpenStack Compute(Nova)、云对象存储Cloud ObjectStorage(Swift)、镜像管理 (Glance)、身份识别Identity(Keystone),网络连接管理Network Connectivity(Quantum)、Web管理界面DashBoard等。


    目前有超过150家公司参与了Openstack项目,包括HP,Dell,AMD,Intel,Cisco,Citrix等公司,国内有如新浪、华胜天成、H3C等公司也参与了OpenStack项目。此外微软在2010年10月表示支持OpenStack 与Windows Server 2008 R2的整合,而Ubuntu在11.04版本中已开始集成OpenStack。OpenStack是目前最受关注与支持的开源云计算平台之一。


     OpenStack 以Python编写 ,这意味着相比其他以C/C++或Java编写的开源云计算平台,OpenStack更容易修改与调试等。OpenStack整合了Tornado网页服务器、Nebula运算平台,使用Twisted框架,目前OpenStack支持的虚拟机宿主包括KVM,XEN,VirtualBox,QEMU,LXC等。


     OpenStack至今共有5个版本,最新版本代号为 Essex。

    主要特性:

    管理虚拟商品服务器资源的能力
    管理局域网的能力
    虚拟机镜像管理
    安全组
    基于角色的访问控制
    项目及配额
    通过网络浏览器的VNC代理
    价格: OpenStack 2011.3是开源的,可免费下载。该项目由各种贡献者开发,主要来自于用户捐助。

    社区: 与本调查提到的其他产品相比,OpenStack似乎拥有最大和最活跃的社区。社区成员总是愿意帮助别人找到任何出现问题的解决办法。

    文档: 然而,OpenStack文档有些不太完整。由于产品快速的发展程度,其文档不能及时覆盖所有目前存在的问题和新功能。通常你需要访问论坛或使用IRC来获得所需信息。

    体验: 我们已经成功地安装和配置了Nova,Keystone和dashboard,没有任何严重问题。

    结论: 这个开源平台是免费的,而且发展非常迅速。它显示了很大的进步,但在用于产品前仍需很多努力。OpenStack 2011.3已经兼容亚马逊API,dashboard项目目前正在研究中。


    CloudStack是新加入到Apache基金会中的开源云计算平台。 CloudStack开发语言为Java ,此前为Cloud.com研发应用的商业软件,此后被Citrix思杰收购,2012年4月5日思杰宣布将CloudStack项目提交至Apache基金会, CloudStack成为Apache许可下的完全开源软件


    CloudStack是一个管理资源计算的数据中心的控制台。一些知名的信息驱动的公司,比如Zynga,诺基亚研究中心,已经使用CloudStack部署了云。除了有其自己的API,该平台还支持CloudBridge Amazon EC2,它可以把亚马逊API转换成CloudStack API。你可以在下面看到一个详细的命令列表。

    CloudStack平台可以加速高伸缩性的公共和私有云(IaaS)的部署、管理、配置。其最新版本的CloudStack 3颇具Amazon亚马逊风格,它帮助那些希望效仿全球最成功云平台来构建云设施的企业用户,快速而轻松地将虚拟数据中心资源转入自动化、富于弹性且可自我服务的云平台中。另外,CloudStack兼容亚马逊API接口,允许跨CloudStack和亚马逊平台实现负载兼容。使用CloudStack作为基础,数据中心操作者可以快速方便的通过现存基础架构创建云服务。


  主要特性:

管理程序不可知(KVM, XEN, ESXi, OVM and BareMetal)
角色(分配和管理权限)
虚拟网络(VLAN支持)
资源池(管理员可以对虚拟资源加以限制,例如,一个帐户可以创建的虚拟机的数量,分配到一个 帐 户的公共IP地址的数量,等)
快照和卷
虚拟路由器,一个防火墙和一个负载均衡器
带有主机维护的实时迁移
    如果你的数据中心是基于vSphere的,CloudStack会使用vCenter API。这意味着你可以管理你的已使用vSphere 4.1动态部署的数据处理中心。

    价格 :CloudStack在GNU Public License v3许可下免费发行。要获得付费支持,你应通过电子邮件联系它的开发者。

    社区 :有一个及时提供免费技术支持的在线社区。在论坛里你能找到许多CloudStack问题的解决办法。还有一个IRC频道欢迎大家提问。

    文档 :如果有基本的技术水平,以默认设置安装CloudStack平台对你来说相当容易。如果需要进行一个更复杂的安装,你可能会面临一些挑战,因为文档并没有完全涵盖复杂问题。该手册给出了一步步的指示,但大体上来讲,并未提供任何关于平台如何工作的信息。

    体验 :我们已经进行了安装,配置了系统并试过了VMware以及KVM集群。CentOS 5.5和CentOS 6.2用于主机。此外,我们的技术团队将我们用CloudStack部署的私有云连接到了RightScale管理控制台。平台易于安装,表现如预期。

    可能的问题和错误修正 :在使用CentOS 6时,运行libvirtd时会有一些错误发生。在/etc/cgconfig.conf中加入一下代码可以解决该问题:

    group virt { cpu { cpu.shares = 9216; } }

    输入代码后,重新开启/etc/init.d/cgconfig并启动libvirtd。

    在网页上使用控制也可能引发一些问题。其中一个就是vnc服务器使用127.0.0.1作为主机的默认地址。要检查该问题,请执行如下命令:

    netstat -nlp | grep kvmtcp 0 0 0.0.0.0:5900 0.0.0.0:* LISTEN 11673/qemu-kvmtcp 0 0 0.0.0.0:5901 0.0.0.0:* LISTEN 11872/qemu-kvmtcp 0 0 0.0.0.0:5902 0.0.0.0:* LISTEN 15227/qemu-kvmtcp 0 0 0.0.0.0:5903 0.0.0.0:* LISTEN 12587/qemu-kvm

    地址如有127.0.0.1,你要在配置文件/etc/libvirt/qemu.conf中取消vnc_listen = "0.0.0.0"这一行的注释,并重启虚拟机。

    结论: 使用CloudStack管理控制台给我们的技术团队留下了非常不错的印象。这是一个快速发展中的工具,提供了广泛的功能而且是免费的。它可以用于生产,但如果你使用VMware管理程序,vCloud Director似乎是一个更好的选择。


OpenStack是云操作系统,要学习OpenStack,首先需要掌握一些虚拟化和云计算的相关知识。

    
虚拟化是云计算的基础。简单的说,虚拟化使得在一台物理的服务器上可以跑多台虚拟机,虚拟机共享物理机的 CPU、内存、IO 硬件资源,但逻辑上虚拟机之间是相互隔离的。

物理机我们一般称为宿主机(Host),宿主机上面的虚拟机称为客户机(Guest)。

那么 Host 是如何将自己的硬件资源虚拟化,并提供给 Guest 使用的呢?
这个主要是通过一个叫做 Hypervisor 的程序实现的。

根据 Hypervisor 的实现方式和所处的位置,虚拟化又分为两种:

1型虚拟化和2型虚拟化

1型虚拟化

Hypervisor 直接安装在物理机上,多个虚拟机在 Hypervisor 上运行。Hypervisor 实现方式一般是一个特殊定制的 Linux 系统。Xen 和 VMWare 的 ESXi 都属于这个类型。


2型虚拟化

物理机上首先安装常规的操作系统,比如 Redhat、Ubuntu 和 Windows。Hypervisor 作为 OS 上的一个程序模块运行,并对管理虚拟机进行管理。KVM、VirtualBox 和 VMWare Workstation 都属于这个类型。

理论上讲:

1型虚拟化一般对硬件虚拟化功能进行了特别优化,性能上比2型要高;

2型虚拟化因为基于普通的操作系统,会比较灵活,比如支持虚拟机嵌套。嵌套意味着可以在KVM虚拟机中再运行KVM。

KVM

下面重点介绍KVM这种2型虚拟化技术。
基本概念
在 x86 平台上最热门运用最广泛的虚拟化方案莫过于 KVM 了。OpenStack 对 KVM 支持得也最好,我们的教程也理所当然选择 KVM 作为 实验环境的 Hypervisor。
KVM 全称是 Kernel-Based Virtual Machine。也就是说 KVM 是基于 Linux 内核实现的。
KVM有一个内核模块叫 kvm.ko,只用于管理虚拟 CPU 和内存。


那 IO 的虚拟化,比如存储和网络设备由谁实现呢?
这个就交给 Linux 内核和Qemu来实现。
说白了,作为一个 Hypervisor,KVM 本身只关注虚拟机调度和内存管理这两个方面。IO 外设的任务交给 Linux 内核和 Qemu。
Libvirt

大家在网上看 KVM 相关文章的时候肯定经常会看到 Libvirt 这个东西。
Libvirt 是啥?
简单说就是 KVM 的管理工具。

其实,Libvirt 除了能管理 KVM 这种 Hypervisor,还能管理 Xen,VirtualBox 等。
OpenStack 底层也使用 Libvirt,所以很有必要学习一下。

Libvirt 包含 3 个东西:后台 daemon 程序 libvirtd、API 库和命令行工具 virsh

libvirtd是服务程序,接收和处理 API 请求;
        
API 库使得其他人可以开发基于 Libvirt 的高级工具,比如 virt-manager,这是个图形化的 KVM 管理工具,后面我们也会介绍;
        virsh 是我们经常要用的 KVM 命令行工具,后面会有使用的示例。        
作为 KVM 和 OpenStack 的实施人员,virsh 和 virt-manager 是一定要会用的。

4、主机网络配置
  控制节点
配置网络接口
  Controller:IP:192.168.0.112/24 GATEWAY:192.168.0.1
  网络配置完之后需要将防火墙和selinux关闭。
关闭防火墙:
  systemctl stop firewalld.service
禁止防火墙开机启动
  systemctl disable firewalld.service
关闭selinux
  vim /etc/selinux/config

        配置selinux=disabled
  # setenforce 0,使配置立即生效
配置地址解析
  编辑 vim /etc/hosts
  # controller
  192.168.0.112 controller
  # compute1
  192.168.0.113 compute1
  计算节点
 配置网络接口。
  Compute:IP:192.168.0.113/24 GATEWAY:192.168.0.1
  同样需要配置地址解析,参考控制节点。
  配置完成之后需要进行验证:
与外网连通性:
  分别在控制节点和计算节点上:
  # ping -c 4 www.baidu.com
控制节点和计算节点连通性:
  控制节点上输入# ping -c 4 compute1
  计算节点上输入# ping -c 4 controller
5、NTP
  控制节点
安装相关包
  # yum install chrony
编辑 /etc/chrony.conf
  server NTP_SERVER iburst
  可以根据需要将NTP_SERVER替换为合适的NTP服务器,建议不用改。然后添加:
  allow 192.168.0.0/24
  即允许计算节点同步。(计算节点IP网段属于192.168.0.0)
  # systemctl enable chronyd.service
  # systemctl start chronyd.service
  启动服务。
  计算节点
  编辑/etc/chrony.conf,可以将其他的几个同步地址注释掉。
  server controller iburst
  同步控制节点。
  # systemctl enable chronyd.service
  # systemctl start chronyd.service
  启动服务。(如果发现同步的不是控制节点,那么重启一下NTP服务即可。)
  # systemctl restart chronyd.service
  验证操作:
  在控制节点上同步时间。
  # chronyc sources
  带星号的是NTP当前同步的地址。
  计算节点上同步。
  # chronycsources
  210 Number of sources = 1
  MS Name/IP address
  Stratum Poll Reach LastRx Last sample
  ======================================================
  ^* controller 3 9 377 421 +15us[ -87us] +/- 15ms
6、安装OpenStack包
  以下操作在所有节点上进行。
启用OpenStack库:
  # yum install centos-release-openstack-ocata
完成安装
  1)在所有节点上升级包
# yum upgrade
  2)安装OpenStack 客户端
  # yum install python-openstackclient
  3)CentOS默认启用了SELinux,安装openstack-selinux来自动管理OpenStack服务的安全策略。
  # yum install openstack-selinux
  7、安装数据库
  数据库一般运行在控制节点上。
  安装并配置组件。
安装相关包。
  # yum install mariadb mariadb-server python2-PyMySQL


  创建并编辑/etc/my.cnf.d/openstack.cnf 文件,并完成以下操作。在配置文件中添加以下配置:
  [mysqld]
  bind-address=192.168.0.112
  default-storage-engine=innodb
  innodb_file_per_table=on
  max_connections=4096
  collation-server=utf8_general_ci
  character-set-server=utf8
  其中bind-address为控制节点IP地址
完成安装
  1)启动数据库并设置开机启动


  # systemctl enable mariadb.service
  # systemctl start mariadb.service


  2)运行mysql_secure_installation脚本来保证数据库安全,为root账户设置一个合适的密码


  # mysql_secure_installation


  8、消息队列


  OpenStack使用消息队列来协调服务之间的状态和操作,消息队列服务一般运行在控制节点上。,OpenStack支持RabbitMQ,Qpid以及ZeroMQ等消息队列服务。本指南使用RabbitMQ消息队列服务。


安装相关包
  # yum install rabbitmq-server
启动消息队列并设置开机启动
  # systemctl enable rabbitmq-server.service
  # systemctl start rabbitmq-server.service


添加openstack用户
  #rabbitmqctl add_user openstack RABBIT_PASS
  Creating user "openstack" ...
  使用合适的密码替换掉 RABBIT_PASS


允许openstack用户的配置、写、读权限
  #rabbitmqctl set_permissions openstack ".*" ".*" ".*"
  Setting permissions for user "openstack" in vhost "/" ...


9、缓存令牌
  认证服务的认证机制使用Memcached来缓存令牌,一般运行在控制节点上


安装相关包
  # yum install memcached python-memcached
  编辑 /etc/sysconfig/memcached文件并配置IP地址,将127.0.0.1改为控制节点IP。


完成安装
  启动 Memcached服务并设置开机启动。
  # systemctl enable memcached.service
  # systemctl start memcached.service


二、认证服务


  在 控制节点上配置。 

1、前提条件
创建数据库
  以root身份登录数据库
$ mysql -u root -p
  创建keystone数据库


  MariaDB[(none)]> CREATE DATABASE keystone;


  给数据库赋予适当的权限;


  MariaDB [(none)]> GRANT ALL PRIVILEGESON keystone.* TO 'keystone'@'localhost'
  IDENTIFIED BY 'KEYSTONE_DBPASS';
  MariaDB [(none)]> GRANT ALL PRIVILEGESON keystone.* TO 'keystone'@'%'
  IDENTIFIED BY 'KEYSTONE_DBPASS';
  用合适的密码替换KEYSTONE_DBPASS


  2、安装并配置组件


运行命令安装相关包
  # yum install openstack-keystone httpd mod_wsgi
  编辑文件/etc/keystone/keystone.conf


  在[database]选项配置数据库连接
  [database]
  # ...
  connection=mysql+pymysql://keystone:KEYSTONE_DBPASS@controller/keystone
  替换掉KEYSTONE_DBPASS
  在[token]选项中,配置,Fernet令牌提供者:
  [token]
  # ...
  provider=fernet


同步认证服务数据库
  # su -s/bin/sh -c "keystone-manage db_sync" keystone


初始化Fernetkey仓库
  # keystone-manage fernet_setup --keystone-user keystone --keystone-
  groupkeystone
  # keystone-manage credential_setup --keystone-user keystone--keystone-groupkeystone
引导认证服务
  # keystone-manage bootstrap --bootstrap-password ADMIN_PASS
  --bootstrap-admin-urlhttp://controller:35357/v3/
  --bootstrap-internal-urlhttp://controller:5000/v3/
  --bootstrap-public-urlhttp://controller:5000/v3/
  --bootstrap-region-id RegionOne
  替换掉ADMIN_PASS
配置Apache服务器
编辑/etc/httpd/conf/httpd.conf并配置ServerName选项,使之参考控制节点
给/usr/share/keystone/wsgi-keystone.conf文件创建一个链接
  # ln -s/usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/
完成安装
  1.启动Apache服务器并设置开机启动
  # systemctlenable httpd.service
  # systemctl start httpd.service
  2.配置管理账户
  $export OS_USERNAME=admin
  $export OS_PASSWORD=ADMIN_PASS
  $export OS_PROJECT_NAME=admin
  $export OS_USER_DOMAIN_NAME=Default
  $export OS_PROJECT_DOMAIN_NAME=Default
  $export OS_AUTH_URL=http://controller:35357/v3
  $export OS_IDENTITY_API_VERSION=3
3、创建一个域、项目、用户和角色


本指南有一个service 项目,你添加的每一个服务都有唯一的用户。
  $ openstack project create --domain default
  --deion "Service Project"service
普通的任务不应该使用具有特权的项目和用户。作为示例,本指南创建一个demo项目和用户。
  1、创建demo项目:
  $ openstack project create --domain default
  --deion "Demo Project"demo
  2、创建demo用户:
  
  $ openstack user create --domain default
  --password-prompt demo
  3、创建user角色:
  $ openstack role create user
  4、将user角色添加到demo项目和用户中。
  $ openstack role add --project demo --user demo user


4、验证操作
出于安全性的原因,禁用掉暂时的认证令牌机制。
  编辑 vim /etc/keystone/keystone-paste.ini文件,

并从[pipeline:public_api], [pipeline:admin_api], 和[pipeline:api_v3]选项中删除admin_token_auth


​取消设置临时的OS_AUTH_URL和OS_PASSWORD环境变量:
  $unset OS_AUTH_URL OS_PASSWORD
使用admin用户,请求一个认证令牌;
  $ openstack --os-auth-url http://controller:35357/v3
  --os-project-domain-name default--os-user-domain-name default
  --os-project-name admin --os-username admintoken issue
  这里遇到错误




由于是Http错误,所以返回Apache HTTP 服务配置的地方,重启Apache 服务,并重新设置管理账户:
  # systemctlrestart httpd.service
  $ export OS_USERNAME=admin
  $ export OS_PASSWORD=ADMIN_PASS
  $ export OS_PROJECT_NAME=admin
  $ export OS_USER_DOMAIN_NAME=Default
  $ export OS_PROJECT_DOMAIN_NAME=Default
  $ export OS_AUTH_URL=http://controller:35357/v3
  $ export OS_IDENTITY_API_VERSION=3 



错误解决!
使用demo用户,请求认证令牌:
  $ openstack--os-auth-url http://controller:5000/v3
  --os-project-domain-namedefault --os-user-domain-name default
  --os-project-namedemo --os-username demo token issue
  Password:
  密码为创建demo用户时的密码。


  5、创建OpenStack客户端环境脚本:


创建脚本
  创建并编辑admin-openrc文件,并添加以下内容:
  export OS_PROJECT_DOMAIN_NAME=Default
  export OS_USER_DOMAIN_NAME=Default
  export OS_PROJECT_NAME=admin
  export OS_USERNAME=admin
  export OS_PASSWORD=root
  export OS_AUTH_URL=http://controller:35357/v3
  export OS_IDENTITY_API_VERSION=3
  export OS_IMAGE_API_VERSION=2
  替换掉OS_PASSWORD的密码。
  创建并编辑demo-openrc文件,并添加以下内容:
  export OS_PROJECT_DOMAIN_NAME=Default
  export OS_USER_DOMAIN_NAME=Default
  export OS_PROJECT_NAME=demo
  export OS_USERNAME=demo
  export OS_PASSWORD=DEMO_PASS
  export OS_AUTH_URL=http://controller:5000/v3
  export OS_IDENTITY_API_VERSION=3
  export OS_IMAGE_API_VERSION=2
使用脚本
  加载脚本文件更新环境变量:
  $ . admin-openrc
  请求一个认证令牌;
  $ openstack token issue


  三、镜像服务
  1、前提条件
创建数据库
  连接数据库,使用root登录。
  $ mysql -u root -p
  创建 glance 数据库
  MariaDB [(none)]> CREATE DATABASEglance;
  赋予权限:
  MariaDB [(none)]> GRANT ALL PRIVILEGESON glance.* TO 'glance'@'localhost'
  IDENTIFIED BY 'GLANCE_DBPASS';
  MariaDB [(none)]> GRANT ALL PRIVILEGESON glance.* TO 'glance'@'%'
  IDENTIFIED BY 'GLANCE_DBPASS';
  替换GLANCE_DBPASS为合适的密码;
  退出数据库连接。
导入admin证书来获取只有admin才能执行的命令行权限;
  $ . admin-openrc
创建服务认证:
  创建glance用户
  $ openstack user create --domain default --password-prompt glance
  添加管理员角色到glance用户和service项目中:
  $ openstack role add --project service --user glance admin
创建glance服务实体
  创建镜像服务API端口:
  $ openstack endpoint create --region RegionOne
  imagepublic http://controller:9292
  $ openstack endpoint create --region RegionOne
  image internal http://controller:9292
  $ openstack endpoint create --region RegionOne
  image admin http://controller:9292
2、安装并配置组件
安装相关包:
  # yum install openstack-glance
编辑/etc/glance/glance-api.conf文件,完成以下操作;
  在[keystone_authtoken]和[paste_deploy]选项中,配置认证服务权限:
  [keystone_authtoken]
  # ...
  auth_uri=http://controller:5000
  auth_url=http://controller:35357
  memcached_servers=controller:11211
  auth_type=password
  project_domain_name=default
  user_domain_name=default
  project_name=service
  username=glance
  password=GLANCE_PASS
  [paste_deploy]
  # ...
  flavor=keystone
  替换掉GLANCE_PASS密码。删除或注释掉其他[keystone_authtoken]参数。
  在[glance_store]选项中,配置本地文件系统存储和镜像文件位置。
  [glance_store]
  # ...
  stores=file,http
  default_store=file
  filesystem_store_datadir=/var/lib/glance/images/
  编辑/etc/glance/glance-registry.conf文件,并完成以下操作:
  在[database]选项中,配置数据库权限:
  [database]
  # ...
  connection=mysql+pymysql://glance:GLANCE_DBPASS@controller/glance
  替换掉 GLANCE_DBPASS密码。
  在[keystone_authtoken]和[paste_deploy]选项中,配置认证服务权限:
[keystone_authtoken]
  # ...
  auth_uri=http://controller:5000
  auth_url=http://controller:35357
  memcached_servers=controller:11211
  auth_type=password
  project_domain_name=default
  user_domain_name=default
  project_name=service
  username=glance
  password=GLANCE_PASS
  [paste_deploy]
  # ...
  flavor=keystone
  替换掉GLANCE_DBPASS密码。
  4、更新镜像服务数据库
  完成安装
启动镜像服务并设置开机启动。
  # systemctl enable openstack-glance-api.service
  openstack-glance-registry.service
  # systemctl start openstack-glance-api.service
  openstack-glance-registry.service
5、验证操作
获取admin权限
  $ . admin-openrc
下载源镜像
  $ wget http://download.cirros-cloud.net/0.3.4/cirros-0.3.4-x86_64-disk.img
上传镜像
  $ openstack image create "cirros"
  --file cirros-0.3.4-x86_64-disk.img
  --disk-format qcow2 --container-format bare
  --public
验证上传镜像:
  openstack image list
四、计算服务 1、安装和配置控制节点
准备条件
  创建数据库,与之前步骤类似,这里不再详细列出
  $ mysql -u root -p
  MariaDB [(none)]> CREATE DATABASEnova_api;
  MariaDB [(none)]> CREATE DATABASE nova;
  MariaDB [(none)]> GRANT ALL PRIVILEGESON nova_api.* TO 'nova'@'localhost'
  IDENTIFIED BY 'NOVA_DBPASS';
  MariaDB [(none)]> GRANT ALL PRIVILEGESON nova_api.* TO 'nova'@'%'
  IDENTIFIED BY 'NOVA_DBPASS';
  MariaDB [(none)]> GRANT ALL PRIVILEGESON nova.* TO 'nova'@'localhost'
  IDENTIFIED BY 'NOVA_DBPASS';
  MariaDB [(none)]> GRANT ALL PRIVILEGESON nova.* TO 'nova'@'%'
  IDENTIFIED BY 'NOVA_DBPASS';
获取admin权限:
  $ . admin-openrc
  创建nova用户
  $ openstack user create --domain default
  --password-prompt nova
  设置合适的密码
  向nova用户中添加admin角色。
  $ openstack role add --project service --user nova admin
  创建nova服务实体
  $ openstack service create --name nova
  --deion "OpenStack Compute" compute
  2、创建计算服务API端口
  $ openstack endpoint create --region RegionOne
  compute public http://controller:8774/v2.1/%(tenant_id)s
  $ openstack endpoint create --region RegionOne
  compute internal http://controller:8774/v2.1/%(tenant_id)s
  $ openstack endpoint create --region RegionOne
  compute admin http://controller:8774/v2.1/%(tenant_id)s
安装并配置组件
  安装相关包
  # yum install openstack-nova-api openstack-nova-conductor
  openstack-nova-console openstack-nova-novncproxy
  openstack-nova-scheduler
编辑 /etc/nova/nova.conf文件
  在[DEFAULT]选项中,开启计算和元数据API
  [DEFAULT]
  # ...
  enabled_apis=osapi_compute,metadata
  在 [api_database]和[database]选项中,配置数据库连接
  [api_database]
  # ...
  connection=mysql+pymysql://nova:NOVA_DBPASS@controller/nova_api
  [database]
  # ...
  connection=mysql+pymysql://nova:NOVA_DBPASS@controller/nova
  替换NOVA_DBPASS密码。
  在[DEFAULT]选项中,配置消息队列连接。
  [DEFAULT]
  # ...
  transport_url=rabbit://openstack:RABBIT_PASS@controller
  替换掉RABBIT_PASS
  在[api]和[keystone_authtoken]选项中,
  [api]
  # ...
  auth_strategy=keystone
  [keystone_authtoken]
  # ...
  auth_uri=http://controller:5000
  auth_url=http://controller:35357
  memcached_servers=controller:11211
  auth_type=password
  project_domain_name=default
  user_domain_name=default
  project_name=service
  username=nova
  password=NOVA_PASS
  替换掉NOVA_PASS
  在[DEFAULT]选项中,配置my_ip
  [DEFAULT]
  # ...
  my_ip=10.0.0.11
  开启对网络服务的支持
  [DEFAULT]
  # ...
  use_neutron=True
  firewall_driver=nova.virt.firewall.NoopFirewallDriver
  在[vnc]选项中,配置VNC代理
  [vnc]
  enabled=true
  # ...
  vncserver_listen=$my_ip
  vncserver_proxyclient_address=$my_ip
  在[glance]选项中,配置镜像服务API的位置。
  [glance]
  # ...
  api_servers=http://controller:9292
  在[oslo_concurrency]选项中,配置锁定路径
  [oslo_concurrency]
  # ...
  lock_path=/var/lib/nova/tmp
  更新数据库
  #su -s /bin/sh -c"nova-manage api_db sync"nova
  #su -s /bin/sh -c "nova-manage db sync"nova
完成安装
  开启计算服务并设置开机启动;
  # systemctl enable openstack-nova-api.service
  openstack-nova-consoleauth.service openstack-nova-scheduler.service
  openstack-nova-conductor.service openstack-nova-novncproxy.service
  # systemctl start openstack-nova-api.service
  openstack-nova-consoleauth.service openstack-nova-scheduler.service
  openstack-nova-conductor.service openstack-nova-novncproxy.service
3、安装并配置计算节点
安装并配置组件
  安装相关包
  # yum install openstack-nova-compute
  编辑/etc/nova/nova.conf文件
  在[DEFAULT]选项中,开启计算和元数据API
  [DEFAULT]
  # ...
  enabled_apis=osapi_compute,metadata
  在[DEFAULT]选项中,配置消息队列权限
  [DEFAULT]
  # ...
  transport_url=rabbit://openstack:RABBIT_PASS@controller
  替换掉RABBIT_PASS
  在[api]和[keystone_authtoken]选项中,配置认证服务权限
  [api]
  # ...
  auth_strategy=keystone
  [keystone_authtoken]
  # ...
  auth_uri=http://controller:5000
  auth_url=http://controller:35357
  memcached_servers=controller:11211
  auth_type=password
  project_domain_name=default
  user_domain_name=default
  project_name=service
  username=nova
  password=NOVA_PASS
  替换掉NOVA_PASS
  在[DEFAULT]选项中,配置my_ip参数
  [DEFAULT]
  # ...
  my_ip=MANAGEMENT_INTERFACE_IP_ADDRESS
  替换MANAGEMENT_INTERFACE_IP_ADDRESS为计算节点IP
  在[DEFAULT]选项中,开启网络服务支持
  [DEFAULT]
  # ...
  use_neutron=True
  firewall_driver=nova.virt.firewall.NoopFirewallDriver
  在[vnc]选项中,开启并配置远程控制台权限
  [vnc]
  # ...
  enabled=True
  vncserver_listen=0.0.0.0
  vncserver_proxyclient_address=$my_ip
  novncproxy_base_url=http://controller:6080/vnc_auto.html
  在[glance]选项中,配置镜像服务API地址
  [glance]
  # ...
  api_servers=http://controller:9292
  在[oslo_concurrency]选项,配置锁定路径
  [oslo_concurrency]
  # ...
  lock_path=/var/lib/nova/tmp
  4、完成安装
检查你的计算节点是否支持硬件虚拟化
  $ egrep -c '(vmx|svm)' /proc/cpuinfo
  如果输出值大于等于1,那么不需要配置,否则,需要做一下配置
  编辑/etc/nova/nova.conf文件,配置[libvirt]
  [libvirt]
  # ...
  virt_type=qemu
开启计算服务并设置开机启动
  # systemctl enable libvirtd.serviceopenstack-nova-compute.service
  # systemctl start libvirtd.service openstack-nova-compute.service
验证操作
  在控制节点上进行操作。
  获取admin权限
  $ . admin-openrc
  列出服务组件来验证每个组件都成功运行了
  $ openstack compute service list

openstack 搭建

主机名与服务器ip地址

controller 192.168.23.98(控制节点)

compute1   192.168.23.61(计算节点)

2.配置hosts解析

[root@controller ~]# vim /etc/hosts
添加
192.168.23.98 controller
192.168.23.61 compute1

[root@controller ~]# scp /etc/hosts root@compute1:/etc/hosts            要保证每个节点的
hosts文件统一

3.验证

[root@controller ~]# ping -c 4 compute1
PING compute1 (192.168.23.61) 56(84) bytes of data.
64 bytes from compute1 (192.168.23.61): icmp_seq=1 ttl=64 time=0.639 ms
64 bytes from compute1 (192.168.23.61): icmp_seq=2 ttl=64 time=0.307 ms
64 bytes from compute1 (192.168.23.61): icmp_seq=3 ttl=64 time=0.324 ms
64 bytes from compute1 (192.168.23.61): icmp_seq=4 ttl=64 time=0.312 ms
 
--- compute1 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3000ms
rtt min/avg/max/mdev = 0.307/0.395/0.639/0.142 ms


5.关闭selinx和防火墙firewalld

以下命令所有节点都执行

# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

# setenforce 0
# systemctl stop firewalld.service
# systemctl disable firewalld.service
# reboot
# sestatus –v         检查是否关闭成功
SELinux status:                 disabled

4.配置时间同步服务器(NTP)

控制节点
[root@controller ~]# yum install chrony -y             安装服务
[root@controller ~]# sed -i 's/#allow 192.168\/16/allow 192.168\/16/g' /etc/chrony.conf 
[root@controller ~]# cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime    更改时区
启动NTP服务
[root@controller ~]# systemctl enable chronyd.service
[root@controller ~]# systemctl start chronyd.service
配置计算节点
[root@compute1 ~]# yum install chrony -y
[root@compute1 ~]# sed -i 's/^server.*$//g' /etc/chrony.conf 
[root@compute1 ~]# sed -i "N;2aserver controller iburst" /etc/chrony.conf 
[root@compute1 ~]# cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime   更改时区
启动NTP服务
[root@compute1 ~]# systemctl enable chronyd.service
[root@compute1 ~]# systemctl start chronyd.servic
5.openstack安装包


所有节点执行
# yum install centos-release-openstack-newton -y
# yum upgrade -y
# yum install python-openstackclient openstack-selinux -y
基本的准备基本完成


安装数据库

[root@controller ~]# yum install mariadb mariadb-server python2-PyMySQL -y

2.配置数据库

[root@controller ~]#  vim /etc/my.cnf.d/openstack.cnf
[mysqld]
bind-address = 192.168.23.98           #本服务器的ip
 
default-storage-engine = innodb
innodb_file_per_table
max_connections = 4096
collation-server = utf8_general_ci
character-set-server = utf8

4. 启动数据库

[root@controller ~]# systemctl enable mariadb.service
[root@controller ~]# systemctl start mariadb.service

5. 初始化数据库

[root@controller ~]# mysql_secure_installation

数据库密码为123456

6.验证数据库


[root@controller ~]# mysql -uroot -p123456    能进入数据库表示成功

7.消息队列

openstack使用一个消息队列的服务之间进行协调的操作和状态的信息。 消息队列服务通常在控制器节点上运行。OpenStack的支持多种消息队列服务,包括RabbitMQ的, Qpid和ZeroMQ。

8.安装rabbitmq

[root@controller ~]#  yum install rabbitmq-server -y

9.启动rabbitmq服务


[root@controller ~]# systemctl enable rabbitmq-server.service
[root@controller ~]# systemctl start rabbitmq-server.service

8.创建openstack用户这里使用RABBIT_PASS做openstack用户的密码

[root@controller ~]#  rabbitmqctl add_user openstack RABBIT_PASS
Creating user "openstack" ...

9.允许openstack用户的配置,写入和读取的访问


[root@controller ~]#  rabbitmqctl set_permissions openstack ".*" ".*" ".*"
Setting permissions for user "openstack" in vhost "/" ...

10. 安装Memcached  


[root@controller ~]#  yum install memcached python-memcached -y

11.启动服务

[root@controller ~]# systemctl enable memcached.service
[root@controller ~]# systemctl start memcached.service

安装配置keystone身份认证服务

创建数据库


[root@controller ~]# mysql -uroot -p123456
# 创建keystone数据库
MariaDB [(none)]> CREATE DATABASE keystone;
Query OK, 1 row affected (0.00 sec)
# 授予数据库访问权限
MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' \  
 IDENTIFIED BY 'KEYSTONE_DBPASS';
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' \    
 IDENTIFIED BY 'KEYSTONE_DBPASS';
Query OK, 0 rows affected (0.00 sec)
# 用合适的密码替换KEYSTONE_DBPASS。

2.安装软件包
[root@controller ~]#  yum install openstack-keystone httpd mod_wsgi -y

3.编辑/etc/keystone/keystone.conf文件


[root@controller ~]# cd /etc/keystone/
[root@controller keystone]# cp keystone.conf keystone.conf.bak
[root@controller keystone]# egrep -v "^#|^$" keystone.conf.bak > keystone.conf
[root@controller keystone]#  vim keystone.conf
添加如下内容
[database]
...
connection = mysql+pymysql://keystone:KEYSTONE_DBPASS@controller/keystone
[token]
...
provider = fernet

4.导入数据库


[root@controller ~]#  su -s /bin/sh -c "keystone-manage db_sync" keystone

5.初始化Fernet key存储库


[root@controller ~]#  keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
[root@controller ~]# keystone-manage credential_setup --keystone-user keystone --keystone-group keystone

6.引导身份认证

# keystone-manage bootstrap --bootstrap-password admin \  
--bootstrap-admin-url http://controller:35357/v3/ \  
--bootstrap-internal-url http://controller:35357/v3/ \  
--bootstrap-public-url http://controller:5000/v3/ \  
--bootstrap-region-id RegionOne

7.配置http服务器

[root@controller ~]#  sed -i 's/#ServerName www.example.com:80/ServerName controller/g' /etc/httpd/conf/httpd.conf 

[root@controller ~]#  ln -s /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/

8.启动http服务


[root@controller ~]# systemctl enable httpd.service
[root@controller ~]# systemctl start httpd.service
[root@controller ~]# netstat -lntp |grep http
9.配置管理用户

[root@controller ~]# export OS_USERNAME=admin
[root@controller ~]# export OS_PASSWORD=admin
[root@controller ~]# export OS_PROJECT_NAME=admin
[root@controller ~]# export OS_USER_DOMAIN_NAME=Default
[root@controller ~]# export OS_PROJECT_DOMAIN_NAME=Default
[root@controller ~]# export OS_AUTH_URL=
[root@controller ~]# export OS_IDENTITY_API_VERSION=3
10.创建用户、域、角色


[root@controller ~]#  openstack project create --domain default   --description "Service Project" service




[root@controller ~]#  openstack project create --domain default  --description "Demo Project" demo  




[root@controller ~]#  openstack user create --domain default  --password-prompt demo




[root@controller ~]# openstack role create user



[root@controller ~]#  openstack role add --project demo --user demo user










nova计算节点服务安装

安装软件包
#  yum install openstack-nova-compute -y

2.编辑/etc/nova/nova.conf


[root@compute1 ~]# cd /etc/nova/
[root@compute1 nova]# cp nova.conf nova.conf.bak

[root@compute1 nova]# egrep -v "^#|^$" nova.conf.bak > nova.conf

[root@compute1 nova]#  vim nova.conf

添加如下内容
[DEFAULT]
...
enabled_apis = osapi_compute,metadata
transport_url = rabbit://openstack:RABBIT_PASS@controller
auth_strategy = keystone
my_ip = 192.168.23.61
use_neutron = True
firewall_driver = nova.virt.firewall.NoopFirewallDriver
[keystone_authtoken]
...
auth_uri = http://controller:5000
auth_url = http://controller:35357
memcached_servers = controller:11211
auth_type = password
project_domain_name = Default
user_domain_name = Default
project_name = service
username = nova
password = 123456
[vnc]
...
enabled = True
vncserver_listen = 0.0.0.0
vncserver_proxyclient_address = $my_ip
novncproxy_base_url = http://controller:6080/vnc_auto.html
[glance]
...
api_servers = http://controller:9292
[oslo_concurrency]
...
lock_path = /var/lib/nova/tmp

3. 确定计算节点是否支持虚拟化。

# egrep -c '(vmx|svm)' /proc/cpuinfo
如果返回值大于1表示支持虚拟化
如果不支持请更改/etc/nova/nova.conf
[libvirt]
...
virt_type = qemu

4.启动服务
# systemctl enable libvirtd.service openstack-nova-compute.service

# systemctl start libvirtd.service openstack-nova-compute.service

如果nova-compute服务无法启动,请检查/var/log/nova/nova-compute.log 。控制器上的错误消息AMQP服务器:5672无法访问可能表示控制器节点上的防火墙阻止访问端口5672,关闭防火墙和selinux即可。

5.在控制端进行检查

# . admin-openrc
# openstack compute service list

[root@controller ~]#  openstack compute service list
+----+------------------+----------------------+----------+---------+-------+----------------------------+
| ID | Binary           | Host                 | Zone     | Status  | State | Updated At                 |
+----+------------------+----------------------+----------+---------+-------+----------------------------+
|  1 | nova-conductor   | controller.novalocal | internal | enabled | up    | 2017-01-13T01:48:04.000000 |
|  2 | nova-consoleauth | controller.novalocal | internal | enabled | up    | 2017-01-13T01:48:07.000000 |
|  3 | nova-scheduler   | controller.novalocal | internal | enabled | up    | 2017-01-13T01:48:04.000000 |
| 10 | nova-compute     | compute1.novalocal   | nova     | enabled | up    | 2017-01-13T01:48:09.000000 |
+----+------------------+----------------------+----------+---------+-------+----------------------------+
[root@controller ~]# nova service-list
+----+------------------+----------------------+----------+---------+-------+----------------------------+-----------------+
| Id | Binary           | Host                 | Zone     | Status  | State | Updated_at                 | Disabled Reason |
+----+------------------+----------------------+----------+---------+-------+----------------------------+-----------------+
| 1  | nova-conductor   | controller.novalocal | internal | enabled | up    | 2017-01-13T01:48:24.000000 | -               |
| 2  | nova-consoleauth | controller.novalocal | internal | enabled | up    | 2017-01-13T01:48:17.000000 | -               |
| 3  | nova-scheduler   | controller.novalocal | internal | enabled | up    | 2017-01-13T01:48:24.000000 | -               |
| 10 | nova-compute     | compute1.novalocal   | nova     | enabled | up    | 2017-01-13T01:48:19.000000 | -               |
+----+------------------+----------------------+----------+---------+-------+----------------------------+-----------------+
表示nova服务安装完成 


openstack组件使用的默认端口号

openstack service default ports port type
Block Storage (cinder) 8776 publicurl and adminurl
Compute (nova) endpoints 8774 publicurl and adminurl
Compute API (nova-api) 8773, 8775
Compute ports for access to virtual machine consoles 5900-5999
Compute VNC proxy for browsers ( openstack-nova-novncproxy) 6080
Compute VNC proxy for traditional VNC clients (openstack-nova-xvpvncproxy) 6081
Proxy port for HTML5 console used by Compute service 6082
Data processing service (sahara) endpoint 8386 publicurl and adminurl
Identity service (keystone) administrative endpoint 35357 adminurl
Identity service public endpoint 5000 publicurl
Image service (glance) API 9292 publicurl and adminurl
Image service registry 9191
Networking (neutron) 9696 publicurl and adminurl
Object Storage (swift) 6000, 6001, 6002
Orchestration (heat) endpoint 8004 publicurl and adminurl
Orchestration AWS CloudFormation-compatible API (openstack-heat-api-cfn) 8000
Orchestration AWS CloudWatch-compatible API (openstack-heat-api-cloudwatch) 8003
Telemetry (ceilometer) 8777 publicurl and adminurl

非openstack组件使用的默认端口号

openstack service default ports used by
HTTP 80 OpenStack dashboard (Horizon) when it is not configured to use secure access.
HTTP alternate 8080 OpenStack Object Storage (swift) service.
HTTPS 443 Any OpenStack service that is enabled for SSL, especially secure-access dashboard.
rsync 873 OpenStack Object Storage. Required.
iSCSI target 3260 OpenStack Block Storage. Required.
MySQL database service 3306 Most OpenStack components.
Message Broker (AMQP traffic) 5672 OpenStack Block Storage, Networking, Orchestration, and Compute.


网络服务计算节点的安装及配置

1.安装服务

yum install openstack-neutron-linuxbridge ebtables ipset -y


2. 修改/etc/neutron/neutron.conf

[DEFAULT]
...
transport_url = rabbit://openstack:RABBIT_PASS@controller
auth_strategy = keystone
[keystone_authtoken]
...
auth_uri = http://controller:5000
auth_url = http://controller:35357
memcached_servers = controller:11211
auth_type = password
project_domain_name = Default
user_domain_name = Default
project_name = service
username = neutron
password = 123456
[oslo_concurrency]
...
lock_path = /var/lib/neutron/tmp


3. 修改/etc/neutron/plugins/ml2/linuxbridge_agent.ini

[linux_bridge]
physical_interface_mappings = provider:PROVIDER_INTERFACE_NAME
[vxlan]
enable_vxlan = False
[securitygroup]
...
enable_security_group = True
firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver

4. 修改/etc/nova/nova.conf
[neutron]
...
url = http://controller:9696
auth_url = http://controller:35357
auth_type = password
project_domain_name = Default
user_domain_name = Default
region_name = RegionOne
project_name = service
username = neutron
password = 123456

5.重启nova-compute服务

# systemctl restart openstack-nova-compute.service

6.启动服务
# systemctl enable neutron-linuxbridge-agent.service
# systemctl start neutron-linuxbridge-agent.service
7.验证
openstack network agent list


[root@controller ~]# openstack network agent list
+--------------------------------------+--------------------+----------------------+-------------------+-------+-------+---------------------------+
| ID                                   | Agent Type         | Host                 | Availability Zone | Alive | State | Binary                    |
+--------------------------------------+--------------------+----------------------+-------------------+-------+-------+---------------------------+
| 698c8ca2-3090-4c0c-99c6-c057372b964f | Linux bridge agent | controller.novalocal | None              | True  | UP    | neutron-linuxbridge-agent |
| 75342101-7cc6-449f-93aa-915b145d071e | Metadata agent     | controller.novalocal | None              | True  | UP    | neutron-metadata-agent    |
| 7c8ea576-695a-4d58-bb7f-b04ac4ada40a | Linux bridge agent | compute1.novalocal   | None              | True  | UP    | neutron-linuxbridge-agent |
| d8c7e1b1-52a1-4a4f-9b9b-ab5fa56e94e9 | DHCP agent         | controller.novalocal | nova              | True  | UP    | neutron-dhcp-agent        |
+--------------------------------------+--------------------+----------------------+-------------------+-------+-------+---------------------------+

CloudStack和OpenStack的区别

以汽车为例,云平台的各个组件就好像汽车的各个零部件。OpenStack的特点是,定义好了各个零件的接口,比如轮胎,你可以有各种各样的轮胎可以使用,如果你向要一部车子,你需要自己选择各个零部件,然后自己组装,自己做各个零件之间的磨合,自己做性能的优化等,总之, OpenStack提供了各种各样的零件,你可以任意组合搭配,一切都取决于你自己的技术水平。 所以使用OpenStack意味着你必须有一个强大的技术团队做支撑。记得Ustack的发布会上,程辉曾经分享过一个数据,大概意思是你要玩转OpenStack,至少需要千万级的投入,团队人数最少20人,这还不能保证你能玩的好。由此可见,OpenStack的技术门槛其实挺高的。这也是Ustack等OpenStack的相关公司的价值所在。


CloudStack就好像是一部已经组装调试好的车,你可以直接开走,也可以自己动手换个喜欢的轮胎,或者在汽车外面弄个喜欢的喷绘。总之,最复杂的工作社区已经帮你做好了,你只需要学会使用就行 。而且CloudStack的学习成本低,开发成本低。Java的程序员在国内太多了。


CloudStack最大优势在于apache基金会的管理,这是保证CloudStack能持续有生命力的关键。Apache基金会的管理中,很重要的一点是社区高于代码。Apache基金会关注社区的建设,项目本身的代码质量会因为社区的繁荣得到改善,社区也是项目有生命力的关键。


来看看OpenStack的玩家,HP,IBM,RedHat,Novell,Oracle,huawei,VMWare等,无一不是有极强的研发能力,没有一个不是庞然大物。国内的OpenStack的小玩家未来基本会逐渐被边缘化。OpenStack现在基本是大公司博弈的场所,小公司是无法驾驭这样一个复杂的系统的。OpenStack是巨头们包装自己商业产品的嫁衣。


OpenStack由NASA和Rackspace公司在2010年联合发布,两者分别贡献 计算代码 (Nova)和 存储代码 (Swift),以Apache许可协议进行授权。OpenStack的目标是提供一个既可以用来建设公有云也能建设私有云的通用的开源云计算平台,而且做到云平台的搭建尽量的简单方便,同时能够快速的横向扩展。


CloudStack最初由Cloud.com公司开发,分为商业和开源两个版本,开源版本通过GPLv3(GNU General Public License, version 3)许可协议进行授权,Citrix公司在2011年收购Cloud.com后,将全部代码开源,并在2012年将CloudStack贡献给Apache软件基金会,成为Apache的孵化项目,同时将授权协议改为更加宽松开放和商业友好的Apache许可协议,CloudStack在2013年3月份升级为Apache的正式项目。CloudStack的目标是提供高度可用的、高度可扩展的能够进行大规模虚拟机部署和管理的开放云平台。


Round 1:灵活性


OpenStack由几个主要的组件组合起来完成具体工作,采用分布式架构 。整个平台按照功能不同分为多个模块项目,项目之间通过消息队列中间件和RESTful形式的API进行交互通信,因此每个项目都可以单独部署在不同的主机上,支持几乎所有类型的云环境。


CloudStack采用集中式的单体架构(Monolithic architecture),整个平台只有一个项目构成 ,不同模块之间通过的本地调用进行交互,在一台主机上就可以完成平台的部署,非常方便。


可以看到,两者的架构几乎是相对的,

​OpenStack的分布式架构灵活性好,缺点每个项目都要部署配置一遍,比较麻烦


​CloudStack因为只有一个项目,部署起来会相对容易很多,然而平台的扩展性就要相对弱一些。


如果单从用户最关注的灵活性的角度来看,本回合OpenStack胜。

Round2: 避免被厂商锁定

OpenStack和CloudStack都是功能强大的开源云平台,满足企业私有云建设的需求,并且因为开放开源,都可以根据需要进行定制。

不同的是CloudStack虽然在云平台构建时会比较方便,对企业来说会更容易上手,但它必竟是从商业软件开源出来的,会带有商业软件属性;而OpenStack自诞生之初就是开源软件,所有的开发都是由社区承担,采用分布式的架构,不同的项目之间几乎没有耦合,所以可以方便的进行开发定制。

综合比较,第二回合,OpenStack胜。

Roud3: 更低的成本

又如前面说到的, CloudStack由于其某种程度带有商业软件属性,平台架构又比较集中,模块间耦合度比较高,导致其二次开发的成本较高

OpenStack面临的问题是,由多个项目组成,每个项目都要单独安装,并且要保证项目间的协作,所以部署会比较麻烦

而且以Openstack目前发展的状况看来,不同版本之间项目可能会有较大的变动,因此版本间的升级会比较困难,由此带来的运维成本不好估算。

但我们还要考虑到的是,OpenStack和 CloudStack虽然都对VMware的ESXi虚拟化技术提供支持,但支持方式是不一样的。CloudStack要经过vCenter 才可以实现对ESXi宿主机上虚拟机的管理;而OpenStack支持直接和ESXi通信,实现对虚拟机的基本管理,只有高级功能才需要vCenter的 支持。针对目前中小企业普遍采用VMware的免费虚拟化技术而没有vCenter的现状,这也是在平台选择时需要考虑的。


本回合OpenStack 险胜。

Round 4: 开放的标准和API(60%)。

我们已经知道,OpenStack和CloudStack都是功能强大的开源云平台,满足企业私有云建设的需求,并且因为开放开源,都可以根据需要进行定制。OpenStack对外提供丰富和功能强大的API,使得资源可以被用户方便的使用和调度,同时提供和Amazon AWS(Amazon Web Services)兼容的API。CloudStack同样地对外提供自身API和与Amazon AWS相兼容的API。

所以这轮,双方算打个平手。

openstack常用命令


openstack的常用命令
1、查看rabbitmq 队列:rabbitmqctl list_queues
2、查看keystone的用户:keystone user-list
3、查看keystone endpoint:keystone endpoint-list
4、查看keystone的role:keystone role-list
5、查看keystone 服务:keystone service-list
6、查看keystone租户:keystone tenant-list
7、查看租户情况:keystone tenant-get ID
8、查看keystone进程:ps -ef | grep -i keystone-all
9、查看日志是否有错误:grep ERROR /var/log/keystone/keystone.log
上传imageglance:
add name="Ubuntu 12.04 cloudimg amd64" is_public=true container_format=ovf \
disk_format=qcow2 < /root/precise-server-cloudimg-amd64-disk1.img 
10、查看image:glance index
11、nova 命令查看image:nova image-list
12、查看image具体信息(ID是通过 glance index 查看获得):glance show ID
13、查看nova 服务:nova-manage service list
14、创建密钥:nova keypair-add oskey > oskey.priv
chmod 600 oskey.priv
15、申请floating IP:nova floating-ip-create
16、安全组相关命令:
nova secgroup-add-rule default tcp 22 22 0.0.0.0/0  ---设置虚拟机能ssh
nova secgroup-add-rule default icmp -1 -1 0.0.0.0/0  ---设置虚拟机能ping icmp包
nova secgroup-list
nova secgroup-list-rules default 
17、查看虚拟机配置种类:nova flavor-list
18、创建虚拟机(一个test的虚拟机):
nova boot --flavor 2 --key_name oskey --image ea3ffba1-065e-483f-bfe2-c84184ee76be test1
19、完整创建一个虚拟机的流程:
nova keypair-add oskey > oskey.priv
chmod 600 oskey.priv
nova flavor-list
nova image-list
nova boot --flavor 2 --key_name oskey --image ea3ffba1-065e-483f-bfe2-c84184ee76be test1
nova secgroup-add-rule default tcp 22 22 0.0.0.0/0
nova secgroup-add-rule default icmp -1 -1 0.0.0.0/0
20、查看申请flating IP 列表:nova floating-ip-list
21、查看虚拟机:nova list
22、添加floating IP给虚拟机(id是虚拟机的ID,通过nova list获得):
nova add-floating-ip  7eb1d4b3-13fa-4e39-be17-3a27eb0db218 10.1.199.33
23、查看虚拟机的floating IP (nova list,就可以查看,需要等待1分钟):nova list
24、ssh到虚拟机上 (ubuntu的虚拟机,默认的用户名是ubuntu,只能用密钥登陆):
ssh -i oskey.priv [email protected]
25、删除flating IP (ID就是虚拟机ID,通过 nova list 获得):
nova remove-floating-ip ID 10.1.199.33
26、删除虚拟机:nova delete ID
27、创建10G的volumenova:volume-create --display_name "test volume" 10
28、查看nova volume情况:nova volume-list
29、把volume添加到虚拟机上( ID是虚拟机的id,后面的1,是volume的ID)添加完后可以通过 nova volume-list查看结果:
nova volume-attach 7eb1d4b3-13fa-4e39-be17-3a27eb0db218 1 /dev/vdc
30、查看虚拟机里的volume情况(登陆虚拟机里):
ubuntu@test1:~$ cat /proc/partitions 
major minor  #blocks  name
253        0   10485760 vda
253        1   10474380 vda1
253       16   20971520 vdb
253       32   10485760 vdc
31、删除volume:nova volume-detach VM_ID Volume_ID
32、创建snapshot ( 完成后可以通过 nova image-list 查看):
nova image-create 7eb1d4b3-13fa-4e39-be17-3a27eb0db218 "snapshot 1"
33、虚拟机重启,停止:
nova suspend ac9e6a9f-58c3-47c3-9b4c-485aa421b8a8
nova resume ac9e6a9f-58c3-47c3-9b4c-485aa421b8a8
nova reboot ac9e6a9f-58c3-47c3-9b4c-485aa421b8a8
34、迁移虚拟机:nova live-migration
35、挂载快存储到虚拟机:nova volume-attach
36、基于kvm的也可以使用virsh list查看实例
root@compute1:/var/lib/nova/instances# virsh list


OpenStack基础及概念


一、云计算基本概念解析 
      1.1什么是云计算
 云计算:代表计算资源向云水循环一样,按需分配,循环利用。

  1.2、云计算分类
 狭义:IT基础设施的交互和使用模式,通过网络以按需,易扩展的方式获取资源
 广义:服务(IT基础设施、软件等)的交互和使用模式,通过网络以按需、易扩展的方式获取资源。


  二、云服务模式

  2.1、IaaS:基础设施即服务
        用户通过网络获取虚机、存储、网络,然后用户根据自己的需求操作获取的资源。  典型应用:亚马逊AWS等

  2.2、PaaS:平台即服务
        将软件研发平台作为一种服务, 如Eclipse/Java编程平台,服务商提供编程接口/运行平台等。典型应用:Google AppEngine、Force.com、微软Azure等 

  2.3、SaaS:软件即服务  
        将软件作为一种服务通过网络提供给用户,如web的电子邮件、HR系统、订单管理系统、客户关系系统等。用户无需购买软件,而是向提供商租用基于web的软件,来管理企业经营活动。典型应用:Google Doc、Saleforce.com、Oracle CRM On Demand、Office Live Workspace等


 三、 云计算解决了哪些问题


 3.1 有效解决硬件单点故障问题
  单点故障是指某个硬件的故障造成网站某个服务的中断。要真正解决这个问题,需要为每个硬件准备冗余,这不仅大大增加了硬件购置成本,而且部署与维护成本也不容小视。
    而云计算平台是基于服务器集群,从设计之初就考虑了单点故障问题,并在建设时有效地解决了这个问题。

 3.2  按需增/减硬件资源
    自己托管服务器,增/减硬件一直是头疼的问题。
    1. 增加服务器的时候,购买服务器需要时间,而且这个时间自己无法控制。而使用云服务器,随时可以增加服务器——垂手可得。
    2. 减服务器只能从机房拉回办公室,无法再把服务器退给厂商,购置服务器的成本就浪费了。而使用云服务器,如果下个月不用,不续费就行了(针对阿里云按月购买的情况)——想用就用,想扔就扔。
    3. 不能按需增加满足基本需求的服务器配置。假如我们现在需要一台低配置的服务器用Linux跑缓存服务,如果为之单独购买一台便宜的低配置的服务器很不合算,因为这台服务器仅仅一年的电费就至少要3000元左右。所以只能尽量减少服务器数量,提高单台服务器的配置,在让一台服务器跑更多东西。而使用云服务器,需要什么样的配置就买什么样的配置,让各个服务器的职责更单一,互相之间的影响更小——职责分明,效率更高。


 3.3 BGP线路解决南北互通问题
   南北互通问题是南方电信与北方联通线路之间的互通问题,这个问题困扰我们多年,之前用过双线机房,解决的也不是很好。目前只有BGP线路才能有效解决这个问题,而拥有真正的BGP线路的机房不是很多,成本也非常高。而我准备使用的阿里云用的就是BGP线路,这也是吸引我们的主要地方之一。


 3.4 按需增/减带宽 
   带宽是主要成本,托管服务器时,与ISP服务商签一年合同之前就要确定带宽。用了一段时间之后,你发现带宽买多了,想减一些是不允许的。中途要临时增加带宽一段时间也是不行的,要买就买一年(这是根据我们接触过的ISP服务商)。所以,一般都会多买一些带宽,留一些余量。
    使用云服务器可以灵活地增减带宽,不会浪费带宽,即使买少了也不用担心,随时可以增加。虽然各个云服务商会有一定的限制,比如在阿里云一次至少要购买1个月的带宽,但比自己托管服务器灵活很多,同样的带宽条件,会节省不少成本,尤其是带宽需求在一年中变化比较大的网站。

  3.5 更有吸引力的费用支付方式
   在IDC机房托管服务器一般是签一年合同,一次支付一个季度的费用。
    而使用云服务,一次可以支付更短时间的费用,比如阿里云可以一次只支付一个月的费用,节约了流动资金。
    从总体上考虑,差不多的成本,却拥有更多的内存、更多的CPU、更多的硬盘空间、更优质的带宽线路,更重要的是可以随时按需扩展计算资源。

    四、云应用形式
  
    4.1、私有云
        将基础设施与软硬件资源构建于防火墙内,基于iaas构建私有云平台供企业内部使用,开源组件有:openstack(最为出色),cloudstack等


    4.2、云存储

        云存储系统是一个以数据存储和管理为核心的云计算系统

    4.3、云游戏

        游戏运行云平台服务端,云平台将游戏画面解压缩后传给用户,用户端无需高配置处理器和显卡,只需要基本的视频解压缩能力即可。

    4.4、云物联

        基于云平台实现物物相连的互联网。

    4.5、云安全

        通过网状的大量客户端检测网络中软件的异常,获取木马,恶意程序的最新信息,推送到云平台服务端自动分析和处理,再把解决方案发送给每一个客户端。云平台使用者越多,越安全。

    4.6、公有云

        云平台对外开放,主要以Iaas和Paas为主,较为成熟的是Iaas,如阿里云,腾讯云,青云,ucloud,首都在线等

    4.7、混合云  

        公有云和私有云的结合,即对企业内部又对企业外部,例如AWS
  
  五、传统应用与云感知应用
  
    5.1、传统应用

    传统应用像养宠物,宠物病了要细心呵护
    每个应用都是独特的、专门的
    专门的服务器、硬件和软件保证可靠性
    资源不够,增加cpu、内存、磁盘
    专门的技术支持
    5.2、云感知应用

    云感知应用像养牛,牛生病了,你需要一头新的牛
    应用跑在一个或多个虚拟机里
    资源不够,增加新的虚拟机
    应用挂起,重启或创建新的虚拟机
  
    六、 openstack与及其相关组件介绍
  
    openstack前世今身 
    Openstack项目及组件功能简单介绍 
    核心项目3个 
    存储项目2个
    共享服务3个
    高层服务1个
    openstack各组件逻辑关系 
    各组件逻辑关系图解

    1、openstack前世今身
    openstack最早由美国国家航空航天局NASA研发的Nova和Rackspace研发的swift组成。后来以apache许可证授权,旨在为公共及私有云平台建设。openstack主要用来为企业内部实现类似于Amazon EC2和S3的云基础架构服务(Iaas).每6个月更新一次,基本与ubuntu同步,命名是以A-Z作为首字母来的。

    2、Openstack项目及组件功能简单介绍 
     核心项目3个

    1.控制台
    服务名:Dashboard
    项目名:Horizon
    功能:web方式管理云平台,建云主机,分配网络,配安全组,加云盘

    2.计算
    服务名:计算
    项目名:Nova
    功能:负责响应虚拟机创建请求、调度、销毁云主机
    
    3.网络
    服务名:网络
    项目名:Neutron
    功能:实现SDN(软件定义网络),提供一整套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 
    
   3、openstack各组件详解及运行流程






虚拟机启动过程如下:


界面或命令行通过RESTful API向keystone获取认证信息。
keystone通过用户请求认证信息,并生成auth-token返回给对应的认证请求。
界面或命令行通过RESTful API向nova-api发送一个boot instance的请求(携带auth-token)。
nova-api接受请求后向keystone发送认证请求,查看token是否为有效用户和token。
keystone验证token是否有效,如有效则返回有效的认证和对应的角色(注:有些操作需要有角色权限才能操作)。
通过认证后nova-api和数据库通讯。
初始化新建虚拟机的数据库记录。
nova-api通过rpc.call向nova-scheduler请求是否有创建虚拟机的资源(Host ID)。
nova-scheduler进程侦听消息队列,获取nova-api的请求。
nova-scheduler通过查询nova数据库中计算资源的情况,并通过调度算法计算符合虚拟机创建需要的主机。
对于有符合虚拟机创建的主机,nova-scheduler更新数据库中虚拟机对应的物理主机信息。
nova-scheduler通过rpc.cast向nova-compute发送对应的创建虚拟机请求的消息。
nova-compute会从对应的消息队列中获取创建虚拟机请求的消息。
nova-compute通过rpc.call向nova-conductor请求获取虚拟机消息。(Flavor)
nova-conductor从消息队队列中拿到nova-compute请求消息。
nova-conductor根据消息查询虚拟机对应的信息。
nova-conductor从数据库中获得虚拟机对应信息。
nova-conductor把虚拟机信息通过消息的方式发送到消息队列中。
nova-compute从对应的消息队列中获取虚拟机信息消息。
nova-compute通过keystone的RESTfull API拿到认证的token,并通过HTTP请求glance-api获取创建虚拟机所需要镜像。
glance-api向keystone认证token是否有效,并返回验证结果。
token验证通过,nova-compute获得虚拟机镜像信息(URL)。
nova-compute通过keystone的RESTfull API拿到认证k的token,并通过HTTP请求neutron-server获取创建虚拟机所需要的网络信息。
neutron-server向keystone认证token是否有效,并返回验证结果。
token验证通过,nova-compute获得虚拟机网络信息。
nova-compute通过keystone的RESTfull API拿到认证的token,并通过HTTP请求cinder-api获取创建虚拟机所需要的持久化存储信息。
cinder-api向keystone认证token是否有效,并返回验证结果。
token验证通过,nova-compute获得虚拟机持久化存储信息。
nova-compute根据instance的信息调用配置的虚拟化驱动来创建虚拟机。


openstack Networking(neutron)服务篇


一、安装并配置控制节点
1.先决条件
在你配置OpenStack网络(neutron)服务,你必须创建一个数据库,服务凭证和API端点。
1)创建数据库
mysql -uroot -p123123
      create database neutron;
      grant all privileges on neutron.* to'neutron'@'localhost' identified  by'123123';
      grant all privileges on neutron.* to'neutron'@'%' identified by '123123';
      exit;
2)获得 admin 凭证来获取只有管理员能执行命令的访问权限
      sourceadmin-openrc
3)创建服务证书
  a.创建neutron用户
      openstack user create --domain default--password-prompt neutron ##设置密码
  b.添加admin角色到neutron用户
      openstack role add --project service--user neutron admin
  c.创建neutron服务实体
      openstack service create --name neutron--description "OpenStack Networking" network
4)创建网络服务API端点
      openstack endpoint create --regionRegionOne network public http://controller:9696
      openstack endpoint create --regionRegionOne network internel http://controller:9696
      openstack endpoint create --regionRegionOne network admin http://controller:9696
2.配置网络选项(这配置私有网络)

 1)安装组件
      yum install openstack-neutronopenstack-neutron-ml2 openstack-neutron-linuxbridge ebtables
 2)配置服务组件
  a.编辑/etc/neutron/neutron.conf文件并完成如下动作
      vi /etc/neutron/neutron.conf
      [database]
      connection = mysql+pymysql://neutron:123123@controller/neutron  ##配置数据库访问
      [DEFAULT]
      core_plugin = ml2
      service_plugins = router
      allow_overlapping_ips = True ##启用Modular Layer 2 (ML2)插件,路由服务和重叠的IP地址
      auth_strategy = keystone  ##配置认证服务访问
      notify_nova_on_port_status_changes = True
      notify_nova_on_port_data_changes = True  ##配置网络服务来通知计算节点的网络拓扑变化
      rpc_backend = rabbit  ##配置RabbitMQ消息队列的连接
      [oslo_messaging_rabbit]
      rabbit_host = controller
      rabbit_userid = openstack
      rabbit_password = 123123  ##配置RabbitMQ消息队列的连接
      [keystone_authtoken]   ##配置认证服务
      auth_uri = http://controller:5000
      auth_url = http://controller:35357
      memcached_servers = controller:11211
      auth_type = password
      project_domain_name = default
      user_domain_name = default
      project_name = service
      username = neutron
      password = 123123  ##配置认证服务,在 [keystone_authtoken] 中注释或者删除其他选项。
      [nova]  ##配置网络以能够反映计算网络拓扑变化:
auth_url =http://controller:35357
      auth_plugin = password
      project_domain_name = default
      user_domain_name = default
      region_name = RegionOne
      project_name = service
      username = nova
      password = 123123  ##配置网络以能够反映计算网络拓扑变化
      [oslo_concurrency]
      lock_path = /var/lib/neutron/tmp  ##配置锁路径

3)配置Modular Layer 2(ML2)插件

ML2插件使用Linux桥接机制为实例创建layer-2 (桥接/交换)虚拟网络基础设施。
a.编辑/etc/neutron/plugins/ml2/ml2_conf.ini文件并完成下面的操作
      vi /etc/neutron/plugins/ml2/ml2_conf.ini
      [ml2]
      type_drivers = flat,vlan,vxlan  ##启用flat,VLAN和VXLAN网络
      tenant_network_types = vxlan  ##启用VXLAN项目(私有)网络
      mechanism_drivers =linuxbridge,l2population  ##启用Linuxbridge和ayer-2机制
##在你配置ML2插件后,删除可能导致数据库不一致的``type_drivers``项的值,Linux桥接代理只支持VXLAN网络。
      extension_drivers = port_security  ##启用端口安全扩展驱动
      [ml2_type_flat]
      flat_networks = provider  ##配置公共flat提供网络
      [ml2_type_vxlan]
      vni_ranges = 1:1000  ##私有网络配置VXLAN网络识别的网络范围
      [securitygroup]
      enable_ipset = True  ##启用 ipset 增加安全组的方便性
 4)配置Linux桥接代理
a.编辑/etc/neutron/plugins/ml2/linuxbridge_agent.ini文件并完成下面的操作:
      vi /etc/neutron/plugins/ml2/linuxbridge_agent.ini
      [linux_bridge]
      physical_interface_mappings = public:eth2  ##映射公共虚拟网络到公共物理网络接口,将eth2替换为物理公共网络接口。
      [vxlan]
      enable_vxlan = True
      local_ip = 10.0.0.31
      12_population = True  ##启用VXLAN覆盖网络,配置处理覆盖网络和启用layer-2 的物理网络接口的IP地址
      [securitygroup]
      enable_security_group = True
      firewall_driver =neutron.agent.linux.iptables_firewall.IptablesFirewallDriver  ##启用安全组并配置 Linux 桥接iptables 防火墙驱动
5)配置layer-3代理
a.编辑 /etc/neutron/l3_agent.ini 文件并完成下面操作:
      vi /etc/neutron/l3_agent.ini
      [DEFAULT]
      interface_driver =neutron.agent.linux.interface.BridgeInterfaceDriver
      external_network_bridge =
##配置Linux桥接网络驱动和外部网络桥接,external_network_bridge选项故意缺少值,这样就可以在一个代理上启用多个外部网络。
6)配置DHCP代理
a.编辑/etc/neutron/dhcp_agent.ini文件并完成下面的操作
配置Linux桥接网卡驱动,Dnsmasq DHCP驱动并启用隔离元数据,这样在公共网络上的实例就可以通过网络访问元数据
      [DEFAULT]
      interface_driver =neutron.agent.linux.interface.BridgeInterfaceDriver
      dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq
      enable_isolated_metadata = True
3.配置元数据代理
 1)编辑/etc/neutron/metadata_agent.ini文件并完成下面的操作
      vi /etc/neutron/metadata_agent.ini
      [DEFAULT]
      nova_metadata_ip = controller
      metadata_proxy_shared_secret = 123123  ##配置元数据代理共享密码
4.配置计算使用网络
1)编辑/etc/nova/nova.conf文件并完成下面操作
      vi /etc/nova/nova.conf
      [neutron]
      url = http://controller:9696
      auth_url = http://controller:35357
      auth_type = password
      project_domain_name = default
      user_domain_name = default
      region_name = RegionOne
      project_name = service
      username = neutron
      password = 123123 
      service_metadata_proxy = True
      metadata_proxy_shared_secret = 123123  ##配置访问参数,启用元数据代理并设置密码
5.完成安装
 1)网络服务初始化脚本需要一个超链接 /etc/neutron/plugin.ini指向ML2插件配置文件/etc/neutron/plugins/ml2/ml2_conf.ini。如果超链接不存在,使用下面的命令创建它:
    ln -s /etc/neutron/plugins/ml2/ml2_conf.ini/etc/neutron/plugin.ini
 2)同步数据库
     su -s/bin/sh -c "neutron-db-manage --config-file /etc/neutron/neutron.conf--config-file /etc/neutron/plugins/ml2/ml2_conf.ini upgrade head" neutron
##数据库的同步发生在 Networking之后,因为脚本需要完成服务器和插件的配置文件。
3)重启计算API服务
 systemctl restart openstack-nova-api.service
4)启动Networking服务并配置他们开机启动
a.对所有网络选项:
systemctl enableneutron-server.service neutron-linuxbridge-agent.serviceneutron-dhcp-agent.service neutron-metadata-agent.service
systemctl startneutron-server.service neutron-linuxbridge-agent.serviceneutron-dhcp-agent.service neutron-metadata-agent.service
 b.对网络选项2,同样也启用并启动layer-3服务
   systemctl enable neutron-13-agent.service
    systemctlstart neutron-13-agent.service   
二、 安装和配置计算节点
1.安装组件
      yum install openstack-neutronopenstack-neutron-linuxbridge ebtables ipset
2.配置通用组件
Networking通用组件的配置包括认证机制、消息队列和插件
1)编辑/etc/neutron/neutron.conf文件并完成如下动作:
在[database]部分,注释所有connection项,因为计算节点不直接访问数据库
      [DEFAULT]
      rpc_backend = rabbit  ##配置RabbitMQ消息队列访问
      auth_strategy = keystone  ##配置认证服务访问
      [oslo_messaging_rabbit]
      rabbit_host = controller
      rabbit_userid = openstack
      rabbit_password = 123123  ##配置RabbitMQ消息队列访问
     
      [keystone_authtoken]
      auth_uri = http://controller:5000
      auth_url = http://controller:35357
      memcached_servers = controller:11211
      auth_type = password
      project_domain_name = default
      user_domain_name = default
      project_name = service
      username = neutron
      password = 123123  ##配置认证服务访问,在 [keystone_authtoken] 中注释或者删除其他选项。
      [oslo_concurrency]
      lock_path = /var/lib/neutron/tmp  ##配锁路径
3.配置网络选项
1)配置Linux桥接代理
a.编辑/etc/neutron/plugins/ml2/linuxbridge_agent.ini文件并完成下面的操作:
      vi /etc/neutron/plugins/ml2/linuxbridge_agent.ini
      [linux_bridge]
      physical_interface_mappings = public:eth2
##映射公共虚拟网络到公共物理网络接口,将eth2替换为物理公共网络接口
      [vxlan]
      enable_vxlan = True
      local_ip = 10.0.0.31
      12_population = True  ##启用VXLAN覆盖网络,配置处理覆盖网络和启用layer-2的物理网络接口的IP地址
      [securitygroup]
      enable_security_group = True
      firewall_driver =   neutron.agent.linux.iptables_firewall.IptablesFirewallDriver
##用安全组并配置Linux 桥接 iptables 防火墙驱动:
4.配置计算机使用网络
1)编辑/etc/nova/nova.conf文件并完成下面的操作
      vi /etc/nova/nova.conf
      [neutron]
      url = http://controller:9696
      auth_url = http://controller:35357
      auth_type = password
      project_domain_name = default
      user_domain_name = default
      region_name = RegionOne
      project_name = service
      username = neutron
      password = 123123  ##配置访问参数
5.完成安装
1)重启计算服务
     systemctl restartopenstack-nova-compute.service
2)启动Linuxbridge代理并配置它开机自启动
     systemctl enableneutron-linuxbridge-agent.service
      systemctl start neutron-linuxbridge-agent.service
三、验证操作
1.获得admin凭证来获取只有管理员能执行命令的访问权限
      source admin-openrc
2.列出加载的扩展来验证neutron-server进程是否正常启动
      neutron ext-list
3.验证网络选项,列出代理验证启动neutron代理是否成功
 neutron agent-list




openstack计算(nova)服务篇


一、安装并配置控制节点
1.先决条件
1)完成下面的步骤以创建数据库:
mysql-uroot -p123123
createdatabase nove;
createdatabase nova_api;
grantall privileges on nove.* to 'nove'@'localhost' identified by '123123';
grantall privileges on nove.* to 'nove'@'%' identified by '123123';
grantall privileges on nove_api.* to 'nove'@'localhost' identified by '123123';
grantall privileges on nove_api.* to 'nove'@'%' identified by '123123';
exit
2)获得admin凭证来获取只有管理员能执行命令的访问权限
sourceadmin-openrc.sh
3)创建服务证书
a.创建nove用户
openstackuser create --domain default --password-prompt nova ##设置密码
b.添加admin角色到nova用户
openstackrole add --project service --user nova admin
c.创建nova服务实体
openstackservice create --name nova --description "Openstack Compute" compute
4)创建计算服务API端点
openstackendpoint create --region RegionOne compute public http://controller:8774/v2.1/%\(tenant_id\)s
openstackendpoint create --region RegionOne compute internal http://controller:8774/v2.1/%\(tenant_id\)s
openstackendpoint create --region RegionOne compute admin http://controller:8774/v2.1/%\(tenant_id\)s
2.安全并配置组件
1)安装软件包
yuminstall openstack-nova-api openstack-nova-conductor openstack-nova-consoleopenstack-nova-novncproxy openstack-nova-scheduler
2)编译/etc/nova/nova.conf文件并完成下面的操作
vi/etc/nova/nova.conf
       [DEFAULT]
       enable_apis= osapi_compute,metadata  ##只启用计算和元数据API
       rpc_backend = rabbit  ##配置rabbit消息队列访问
       auth_strategy = keystone  ## 配置认证服务访问
       my_ip = 10.0.0.11  ##使用控制节点的管理接口的IP 地址
       use_neutron = True
       firewall_driver = nova.virt.firewall.NoopFirewallDriver  ##使用Networking服务
     [database]
     connection = mysql+pymysql://nova:123123@controller/nova  ##配置数据库的连接
       [api_database]
       connection= mysql+pymysql://nova:123123@controller/nova_api  ##配置数据库的连接
[oslo_messaging_rabbit]
      rabbit_host = controller
      rabbit_userid = openstack
      rabbit_password = 123123 ##配置rabbit消息队列访问
      [keystone_authtoken]
      auth_uri = http://controller:5000
      auth_url = http://controller:35357
      auth_plugin = password
      project_domain_name = default
      user_domain_name = default
      project_name = service
      username = nova
      password = 123123  在[keystone_authtoken]中注释或者删除其他选项。
      [vnc]
      vncserver_listen = $my_ip
      vncserver_proxyclient_address = $my_ip ##配置VNC代理使用控制节点的管理接口IP地址
      [glance]
        api_servers= http://controller:9292      
      [oslo_concurrency]
      lock_path = /var/lib/nova/tmp
3)同步Compute数据库
        su-s /bin/sh -c “nova-manage api_db sync” nova
      su -s /bin/sh -c "nova-manage dbsync" nova
3.完成安装
 1)启动Compute服务并将其设置为随系统启动
     systemctl enable openstack-nova-api.serviceopenstack-nova-consoleauth.service openstack-nova-scheduler.serviceopenstack-nova-conductor.service openstack-nova-novacproxy.service
     systemctl start openstack-nova-api.serviceopenstack-nova-consoleauth.service openstack-nova-scheduler.serviceopenstack-nova-conductor.service openstack-nova-novncproxy.service
二、安装和配置计算节点
1.安装并配置组件
1)安装软件包
yum -y install openstack-nova-compute
2)编辑/etc/nova/nova.conf文件并完成下面的操作
      vi /etc/nova/nova.conf
   [DEFAULT]
   rpc_backend = rabbit  ##配置rabbitmq消息队列的连接
      auth_strategy = keystone  ##配置认证服务访问
      my_ip = 10.0.0.31
      use_neutron = True   ##使用Networking服务
      firewall_driver = nova.virt.firewall.NoopF irewallDriver ##使用Networking服务
[keystone_authtoken]
      auth_uri = http://controller:5000
      auth_url = http://controller:35357
      auth_plugin = password
      project_domain_id = default
      user_domain_id = default
      project_name = service
      username = nova
      password = 123123  ##配置认证服务访问,在[keystone_authtoken]中注释或者删除其他选项
   [oslo_messaging_rabbit]
   rabbit_host = controller
   rabbit_userid = openstack
   rabbit_password = 123123  ##配置rabbitmq消息队列的连接
      [vnc]
      enabled = True
      vncserver_listen = 0.0.0.0
      vncserver_proxyclient_address = $my_ip
      novncproxy_base_url = http://controller:6080/vnc_auto.html  ##启用并配置远程控制台访问
      [glance]
      api_servers = http://controller:9292   ##配置镜像服务API的位置
      [oslo_concurrency]
      lock_path = /var/lib/nova/tmp  ##配置锁路径
2.完成安装
1)确定您的计算节点是否支持虚拟机的硬件加速。
egrep-c  '(vmx|svm)' /proc/cpuinfo
##如果这个命令返回 ``one或者更大``的值,说明您的计算节点支持硬件加速,一般不需要进行额外的配置。
如果这个命令返回``zero``,你的计算节点不支持硬件加速,你必须配置 libvirt 使用QEMU而不是使用KVM。
   vi /etc/nova/nova.conf
      [libvirt]
      virt_type = qemu
2)启动计算服务及其依赖,并将其配置为随系统自动启动:
systemctl enable libvirtd.serviceopenstack-nova-compute.service
systemctl start libvirtd.serviceopenstack-nova-compute.service
三、验证操作
1.获得admin凭证来获取只有管理员能执行的命令的访问权限
      source admin-openrc
2.列出服务组件,以验证是否成功启动并注册了每个进程
      openstack compute service list

1.时间同步  ##所有节点都要安装
[root@controller ~]# yum install chrony
[root@controller ~]# vim /etc/chrony.conf 
server Controller iburst
allow 172.29.50.0/24

[root@controller ~]# timedatectl set-timezone Asia/Shanghai
[root@controller ~]#  systemctl enable chronyd.service
[root@controller ~]# systemctl start chronyd.service
[root@controller ~]# systemctl disable firewalld.service

[root@controller ~]# vim  /etc/selinux/config

SELINUX=disabled

[root@controller ~]# reboot


1-1 host文件配置 ##所有节点都要安装

172.29.50.200  controller
172.29.50.201  computer
172.29.50.202  neutron



2.基本环境2-1 OpenStack packages   ###所有节点上都安装

[root@controller ~]# yum install centos-release-openstack-mitaka
[root@controller ~]# yum upgrade
[root@controller ~]# yum -y install python-openstackclient
[root@controller ~]# yum install openstack-selinux

[root@controller ~]# reboot




2-2 MariabbMysql数据库  ###控制节点
[root@controller ~]#  yum -y install mariadb mariadb-server python2-PyMySQL 
[root@controller ~]#  vim /etc/my.cnf.d/openstack.cnf
[mysqld]
bind-address = 172.29.50.200    
default-storage-engine = innodb
innodb_file_per_table
max_connections = 4096
collation-server = utf8_general_ci
character-set-server = utf8

[root@controller ~]# systemctl enable mariadb.service
[root@controller ~]# systemctl start mariadb.service
[root@controller ~]# mysql_secure_installation 


2-3 安装MongoDB,给Telemetry服务  ###控制节点
[root@controller ~]# yum install mongodb-server mongodb

[root@controller ~]# vim /etc/mongod.conf
bind_ip = 172.29.50.200
smallfiles = true

[root@controller ~]# systemctl enable mongod.service
[root@controller ~]# systemctl start mongod.service


3. 消息队列--端口号5672    ###控制节点

[root@controller ~]# yum install net-tools
[root@controller ~]# yum install rabbitmq-server 
[root@controller ~]# systemctl enable rabbitmq-server.service
[root@controller ~]# systemctl start rabbitmq-server.service
[root@controller ~]# rabbitmqctl add_user openstack openstack 
Creating user "openstack" ...
...done.  
建个用户名为openstack 密码为openstack
[root@controller ~]# rabbitmqctl set_permissions openstack ".*" ".*" ".*"  
Setting permissions for user "openstack" in vhost "/" ...
...done.
授权所有

[root@controller ~]# rabbitmq-plugins list   查看rabbitp插件
[root@controller ~]# rabbitmq-plugins enable rabbitmq_management   启用管理
[root@controller ~]# systemctl restart rabbitmq-server.service
[root@controller ~]# netstat -ntlp    这儿是否有15672

http://172.29.50.200:15672    用户名密码都是默认的guest 
这儿要把OPENSTACK加进去

3-1 认证服务认证缓存使用Memcached缓存令牌。缓存服务memecached运行在控制节点  ###控制节点

[root@controller ~]# yum install memcached python-memcached
[root@controller ~]# systemctl enable memcached.service
[root@controller ~]# systemctl start memcached.service

你可能感兴趣的:(OpenStack安装部署)