在 Ubuntu 上安装和配置 OpenStack Nova

openstack

OpenStack 是由 Rackspace 和 NASA 共同开发的云计算平台,帮助服务商和企业内部实现类似于 Amazon EC2 和 S3 的云基础架构服务(Infrastructure as a Service, IaaS)。OpenStack 包含两个主要模块:Nova 和 Swift,前者是 NASA 开发的虚拟服务器部署和业务计算模块;后者是 Rackspack 开发的分布式云存储模块,两者可以一起用,也可以分开单独用。OpenStack 是开源项目,除了有 Rackspace 和 NASA 的大力支持外,后面还有包括 Dell, Citrix, Cisco, Canonical 这些重量级公司的贡献和支持,发展速度非常快,有取代另一个业界领先开源云平台 Eucalyptus 的态势。

OpenStack 是 Python 2.6 写的,CentOS 5.6 上默认的是 Python 2.4 的环境并且还有很多依赖关系不容易升级到 2.6,所以在 Ubuntu 上安装会简单一些,而且 Ubuntu 是 OpenStack 的官方首选系统,文档都是按 Ubuntu 写的,所以这里 VPSee 采用最新的 Ubuntu 11.04 Server 64bit 版本来安装和配置 OpenStack Nova. 使用 CentOS 的朋友可以看看:在 CentOS 上安装和配置 OpenStack Nova;如果对其他类似的开源云计算平台感兴趣的话可以看看:在 CentOS 上安装和配置 OpenNebula.

配置网络

在安装完基本的 Ubuntu 11.04 Server 系统后升级和更新整个系统,安装完 bridge-utils 包后重启系统:

$ sudo apt-get update
$ sudo apt-get upgrade

$ sudo apt-get install bridge-utils

$ sudo reboot

配置网桥:

$ sudo vi /etc/network/interfaces

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
address 172.16.39.111
netmask 255.255.254.0
gateway 172.16.38.1

auto br100
iface br100 inet static
bridge_ports eth1
bridge_stp off
bridge_maxwait 0
bridge_fd 0
address 192.168.0.1
netmask 255.255.0.0
broadcast 192.168.255.255

关于 FlatManager 网络配置可参考:OpenStack Nova 安装后的 FlatManager 网络配置

安装 NTP 服务

OpenStack Nova 需要 NTP 服务器来保持所有节点服务器(Cloud Compute)的时间同步,所以需要在前端控制服务器(Cloud Controller)上安装 NTP 服务器,然后在节点服务器上安装 NTP 客户端保持与前端的同步:

$ sudo apt-get install ntp

$ sudo vi /etc/ntp.conf
server 127.127.1.0
fudge 127.127.1.0 stratum 10

$ sudo /etc/init.d/ntp restart

安装和配置 MySQL 数据库

OpenStack Nova 需要数据库的支持,这里选用 MySQL(当然也可以用其他的数据库,比如 PostgreSQL 等):

$ sudo apt-get install mysql-server

修改 MySQL 绑定地址,以便其他的节点服务器也能访问这个数据库:

$ sudo vi /etc/mysql/my.cnf
...
#bind-address           = 127.0.0.1
bind-address            = 0.0.0.0
...

$ sudo /etc/init.d/mysql restart

创建一个名为 nova 的数据库,并设置 root 从任何 IP 访问的权限和密码:

$ sudo mysql -uroot -ppassword -e 'CREATE DATABASE nova;'
$ sudo mysql -uroot -ppassword -e "GRANT ALL PRIVILEGES ON *.* TO \
'root'@'%' WITH GRANT OPTION;"
$ sudo mysql -uroot -ppassword -e "SET PASSWORD FOR \
'root'@'%' = PASSWORD('password');"

安装 Glance 镜像服务

Glance 是个镜像服务器,用来给 OpenStack Nova 提供操作系统镜像(image)服务,提供可选择的操作系统模版(镜像)。

$ sudo apt-get install glance

安装 OpenStack Nova

OpenStack Nova 已经进入 Ubuntu 11.04 源,所以直接安装就可以了,不必源码安装:

$ sudo apt-get install rabbitmq-server nova-common nova-doc python-nova 
nova-api nova-network nova-volume nova-objectstore nova-scheduler nova-compute

$ sudo apt-get install -y euca2ools

$ sudo apt-get install -y unzip

配置 Nova:

$ sudo vi /etc/nova/nova.conf
--dhcpbridge_flagfile=/etc/nova/nova.conf
--dhcpbridge=/usr/bin/nova-dhcpbridge
--logdir=/var/log/nova
--state_path=/var/lib/nova
--lock_path=/var/lock/nova
--verbose
--s3_host=172.16.39.111
--rabbit_host=192.168.0.1
--cc_host=192.168.0.1
--ec2_url=http://172.16.39.111:8773/services/Cloud
--fixed_range=192.168.0.0/16
--network_size=8
--FAKE_subdomain=ec2
--routing_source_ip=192.168.0.1
--sql_connection=mysql://root:password@172.16.39.111/nova
--glance_host=192.168.0.1
--image_service=nova.image.glance.GlanceImageService

重启 nova 相关服务以便设置生效:

$ sudo restart libvirt-bin; sudo restart nova-network; 
sudo restart nova-compute; sudo restart nova-api; 
sudo restart nova-objectstore; sudo restart nova-scheduler; 
sudo restart nova-volume; sudo restart glance-api; sudo restart glance-registry

使用 Nova

开始使用 Nova 前需要创建 nova 数据库表、创建网络、创建管理员帐号、创建云并联到刚才创建的管理员上:

$ sudo nova-manage db sync
$ sudo nova-manage network create 192.168.0.0/24 1 255
$ sudo nova-manage floating create 10.10.10.2 10.10.10.224/27
$ sudo nova-manage user admin vpsee
$ sudo nova-manage project create mycloud vpsee

因为多个管理员可以创建多个不同的云,所以某个云的管理员需要特定的权限才能访问和管理自己的 Nova 云,创建权限信息,并解压到自己的目录里,需要注意的是每次使用 nova 管理云的时候都需要读取 novarc 里面的配置信息:

$ mkdir /home/vpsee/creds
$ sudo nova-manage project zipfile mycloud vpsee /home/vpsee/creds/novacreds.zip

$ cd /home/vpsee/creds
$ unzip novacreds.zip
$ sudo chown -R vpsee:vpsee /home/vpsee/creds/

$ source /home/vpsee/creds/novarc

每次用 nova 的时候都要用到 novarc 里面的环境变量,每次 source novarc 很麻烦,所以最好加到 .bashrc 里面:

$ cat  /home/vpsee/creds/novarc >> /home/vpsee/.bashrc
$ source /home/vpsee/.bashrc

再次重启 nova 相关的所有服务:

$ sudo restart libvirt-bin; sudo restart nova-network; 
sudo restart nova-compute; sudo restart nova-api; 
sudo restart nova-objectstore; sudo restart nova-scheduler;
sudo restart nova-volume; sudo restart glance-api; sudo restart glance-registry

如果一切正常的话,应该可以打印出如下的类似信息:

$ euca-describe-availability-zones verbose
AVAILABILITYZONE	nova	available
AVAILABILITYZONE	|- node00
AVAILABILITYZONE	| |- nova-scheduler	enabled :-) 2011-05-22 10:32:31
AVAILABILITYZONE	| |- nova-network	enabled :-) 2011-05-22 10:32:32
AVAILABILITYZONE	| |- nova-compute	enabled :-) 2011-05-22 10:32:24

如果出现这个问题,检查 novarc 这个文件看看 EC2_URL, S3_URL, NOVA_URL 这三行是不是有两个连续的 http://?

$ euca-describe-availability-zones verbose
invalid literal for int() with base 10: ''

$ vi /home/vpsee/creds/novarc
...
export EC2_URL="http://http://172.16.39.100:8773/services/Cloud"
export S3_URL="http://http://172.16.39.100:3333"
...
export NOVA_URL="http://http://172.16.39.100:8774/v1.1/"
...

删除一个 http:// 就可以了:

$ vi /home/vpsee/creds/novarc
...
export EC2_URL="http://172.16.39.100:8773/services/Cloud"
export S3_URL="http://172.16.39.100:3333"
...
export NOVA_URL="http://172.16.39.100:8774/v1.1/"
...

启动第一个实例

启动实例之前需要先上传一个系统模版,我们称之为镜像(image),自己制作操作系统镜像有点麻烦(请看:为 OpenStack Nova 制作 Ubuntu 镜像为 OpenStack Nova 制作 CentOS 镜像为 OpenStack Nova 制作 Windows 镜像。),这里直接使用一个已经做好的 Ubuntu 10.10 版本镜像,下载已经做好的镜像文件并上传到镜像服务器(这里镜像服务器和前端服务器在同一台物理服务器上):

$ wget http://c0179148.cdn1.cloudfiles.rackspacecloud.com/ubuntu1010-UEC-localuser-image.tar.gz

$ uec-publish-tarball ubuntu1010-UEC-localuser-image.tar.gz ubuntu1010-bucket x86_64

列出云里现有的可以加载的镜像,并以某个镜像(比如编号为 ami-00000003)为模版启动一个实例(操作系统):

$ euca-describe-images
IMAGE	aki-00000001	ubuntu1010-bucket/vmlinuz-2.6.32-28-server.manifest.xml		available	public		x86_64	kernel	 	 
IMAGE	ari-00000002	ubuntu1010-bucket/initrd.img-2.6.32-28-server.manifest.xmavailable	public		x86_64	ramdisk	 	 
IMAGE	ami-00000003	ubuntu1010-bucket/maverick-server-uec-amd64.img.manifest.xml		available	public		x86_64	machine	aki-00000001	ari-00000002

$ euca-add-keypair mykey > mykey.priv

$ euca-run-instances -k mykey -t m1.tiny ami-00000003

检查一下实例是否成功启动和运行:

$ virsh list
 Id Name                 State
----------------------------------
  1 instance-00000001    running

访问实例

启动实例后怎么访问呢?和访问 VPS 一样,需要 IP 地址然后 ssh 访问,还记得上面的网络配置么,新创建的系统将按照 192.168.0.x 的形式分配 IP,所以 192.168.0.3 就是刚刚 euca-run-instances 创建的实例的 IP 地址:

$ ssh ubuntu@192.168.0.3

Troubleshooting

解决 DataSourceEc2.py[WARNING]: ‘http://169.254.169.254′ failed: url error 问题
删除 OpenStack Nova Volume 时遇到的 error_deleting 问题
解决 Warning: failed to parse error message from AWS: :1:0: syntax error 问题
重置 OpenStack Nova 数据库

评论 (178 Comments)

  1. @vpsee
    您好,您有关于etc/nova/nova.conf配置说明的文档资料不,我对它里面的配置不是很明白。我想server1上之所以出现下面问题是因为nova配置问题,
    AVAILABILITYZONE nova available
    AVAILABILITYZONE |- chenwd
    AVAILABILITYZONE | |- nova-scheduler enabled XXX None
    AVAILABILITYZONE | |- nova-network enabled XXX None
    AVAILABILITYZONE | |- nova-compute enabled XXX None
    但是我确实是不知道nova配置是如何运作的。希望您能帮我一下,万分感激。如果您有相关资料,方便的话劳烦您发我邮箱里一下。我的邮箱:xksung@gmail.com

  2. @宋晓坤
    openstack 的 nova.conf 详细配置信息可以从 http://docs.openstack.org/ 获得。

  3. 你好,我已经搭建好了eucalyptus,手动能够从安装CLC的机子上启动NC上的虚拟机,SSH命令也可以登录,但是怎么建立web虚拟桌面供用户在浏览器中访问启动的虚拟机实例呢?谢谢,期待您的解释!

  4. 请问博主,我用devstack脚本装的时候总是到 /opt/stack/nova 中执行sudo python setup.py install时出错,提示为没有setup.py这个文件,我查了一下里面确实也没有,好多次都不行,这是怎么回事?有什么办法帮我一下吗?谢谢

  5. 重启nova-volume说没有实例是怎么回事?其他步骤都正常
    stack@openstack2:~$ sudo apt-get install nova-volume
    Reading package lists… Done
    Building dependency tree
    Reading state information… Done
    nova-volume is already the newest version.
    0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

    stack@openstack2:~$
    stack@openstack2:~$ sudo restart nova-volume
    restart: Unknown instance:

  6. 解决了:
    sudo start nova-volume

  7. 你好,我在运行期间,遇到几个问题,向您请教下。
    在nova-compute运行一段时间后,会出现这样的两个服务
    root 4718 1 0 Mar12 ? 00:00:37 /usr/sbin/libvirtd -d
    root 5634 4718 0 02:44 ? 00:00:00 /usr/sbin/libvirtd -d
    导致,
    nova-compute comptue-node1 nova enabled XXX 2012-03-12 18:43:53
    此nova-compute不可用

    查看/var/log/libvirt/libvirtd.log日志

    114:08:19.884: 13660: warning : qemudDispatchSignalEvent:424 : Shutting down on signal 15
    210:07:41.135: 2372: warning : virEventPollUpdateHandle:147 : Ignoring invalid update watch -1
    310:07:40.604: 2375: error : virCommandWait:1991 : internal error Child process (LC_ALL=C PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin /usr/bin/qemu -help) status unexpected: fatal signal 15
    416:25:22.376: 4961: error : qemudClientWriteBuf:1948 : write: Broken pipe
    516:25:22.376: 4961: error : qemudClientReadBuf:1702 : read: Bad file descriptor
    619:28:28.982: 1432: error : qemuMonitorIO:576 : internal error End of file from monitor
    713:49:40.572: 1436: error : virDomainObjIsDuplicate:10148 : operation failed: domain ‘instance-00000008’ already exists with uuid df60f002-900e-c6a6-deb1-e6a7eb1ca347
    819:14:35.424: 1464: error : qemudDomainDestroy:1505 : Requested operation is not valid: domain is not running
    906:41:48.965: 10557: error : ebtablesCreateRuleInstance:1899 : internal error cannot create rule since ebtables tool is missing.

  8. 急~你好,我想问下你的文章“在 Ubuntu 上安装和配置 OpenStack Nova”, 第一步,配置网桥后,重启机器后为什么不能上网了?万分感谢。

  9. @vpsee
    我运行euca-describe-availability-zones verbose时的结果如下:
    AVAILABILITYZONE nova available
    AVAILABILITYZONE |- ubuntu
    AVAILABILITYZONE | |- nova-scheduler enabled XXX 2012-03-20 02:34:40
    AVAILABILITYZONE | |- nova-compute enabled XXX 2012-03-22 05:27:49
    AVAILABILITYZONE | |- nova-network enabled XXX 2012-03-20 02:34:45
    AVAILABILITYZONE |- Controller
    AVAILABILITYZONE | |- nova-scheduler enabled :-) 2012-03-22 06:12:44
    AVAILABILITYZONE | |- nova-network enabled :-) 2012-03-22 06:12:44
    AVAILABILITYZONE | |- nova-compute enabled :-) 2012-03
    AVAILABILITYZONE |- Compute2
    AVAILABILITYZONE | |- nova-compute enabled XXX 2012-03-21 07:55:30
    AVAILABILITYZONE |- Compute1
    AVAILABILITYZONE | |- nova-compute enabled :-) 2012-03

    ubuntu是我控制节点以前的名字,现在我把名字改为了Controller,可是每次查看服务的时候都会显示ubuntu这个名称的服务情况,结果肯定是全没有,怎么把这个多余的显示消掉啊?求指教,谢谢。

  10. openstack的安装快把人折磨死了。。。。

    推荐一个博客:
    http://hi.baidu.com/weiyuanke/blog/item/5e1c1682a4be0aa06d8119ad.html

  11. @dev
    可以在数据库里删除。

  12. euca-run-instances -k mykey -t m1.tiny ami-00000003
    virsh list
    显示为空
    用nova-manage vm list没有显示launching 而是building,怎么回事啊?

  13. @luoge
    原因很多,可以查看日志 /var/log/nova/nova* 找问题出在哪。

  14. 重启系统之后,ntp,mysql-server,rabbitmq-server,libvirt-bin,nova-api,nova-objectstore,glance-api,glance-registery相关服务默认自动启动,nova-network,nova-compute,nova-scheduler等启动失败。麻烦帮忙寻找一下原因。
    相关信息如下:
    Ubuntu11.10 32-bit desktop

    系统启动时如下服务启动失败
    grep fail /var/log/boot.log
    * Starting Nova VNC proxy [fail]
    * Starting Nova Volume server [fail]
    * Starting Nova compute worker [fail]
    * Starting Nova network worker [fail]
    * Starting Nova scheduler [fail]
    interfaces配置文件信息如下:
    # /etc/network/interfaces
    auto lo
    iface lo inet loopback

    auto eth0
    iface eth0 inet static
    address 192.168.1.170
    netmask 255.255.255.0
    gateway 192.168.1.1
    network 192.168.1.0
    broadcast 192.168.1.255

    auto br100
    iface br100 inet static
    address 192.168.1.2
    netmask 255.255.255.0
    gateway 192.168.1.1
    network 192.168.1.0

    # /etc/resolv.conf
    nameserver 192.168.1.1

    nova.conf配置文件信息如下:
    # /ect/nova/nova.conf
    –daemonize=1
    –dhcpbridge_flagfile=/etc/nova/nova.conf
    –dhcpbridge=/usr/bin/nova-dhcpbridge
    –logdir=/var/log/nova
    –state_path=/var/lib/nova
    –lock_path=/var/lock/nova
    –verbose
    #rabbit
    –rabbit_host=192.168.1.170
    –s3_host=192.168.1.170
    –cc_host=192.168.1.170
    –ec2_url=http://192.168.1.170:8773/services/Cloud
    –FAKE_subdomain=ec2
    #nova database
    –sql_connection=mysql://root:rootpass@192.168.1.170/nova
    #glance
    –glance_host=192.168.1.170
    –image_service=nova.image.glance.GlanceImageService
    #network
    –network_host=192.168.1.170
    –network_manager=nova.network.manager.FlatDHCPManager
    –fixed_range=192.168.1.0/24
    –network_size=256
    –flat_injected=False
    –flat_network_dchp_start=192.168.1.2
    #–routing_source_ip=192.168.1.170
    –public_interface=eth0
    –flat_interface=eth0
    –flat_network_bridge=br100

  15. 其它信息,在手动启动nova-compute,nova-network,nova-scheduler等之后,ps查看只有nova-api和nova-objectstore
    start nova-compute
    start nova-network
    start nova-scheduler
    ps -e |grep nova
    1195 ? 00:00:01 nova-api
    1205 ? 00:00:00 nova-objectstore

  16. vpsee大神,近几天都在读你的帖子,我的opennebula sunstone不知道怎么配置template和virtual network,不知道你能不能给出一个可用的配置事例,在下万分感谢!

  17. @云计算
    这个是 openstack 的文章,opennebula template 和 virtual network 的配置例子可以在本站的 opennebula 相关文章里找到。

  18. 你好,请教一个问题:搭建openstack nova时,无法生成证书 报错:The above error may show that the certificate db has not been created. Please create a database by running a nova-cert server on this host. 需要一个名为certificate的数据库吗?需要手动在MySQL中建立certificate?谢谢!

  19. @qh
    需要安装 apt-get install nova-cert 并启动 nova-cert

  20. 一步一步的安装OpenStack会有很多问题,过程太繁琐了,稍不注意就出现各种问题。
    现在可以试试OneStack,Ubuntu上一键部署OpenStack,希望有用http://code.google.com/p/onestack

    这个工具可以安装、重置、卸载、重新安装OpenStack,方便大家,不喜欢折腾的朋友可以试用。

  21. @vpsee
    我想问一下怎样把两台电脑共同搭建openstack呢?就算一台电脑崩了·对另一台不会影响.也不会影响怎个平台

  22. @啊林
    OpenStack 头节点可以做 HA,计算节点不用考虑 HA,计算节点崩了不会影响其他计算节点也不会影响头节点。

  23. @vpsee
    谢谢.请问还有没有一些比较详细的教程..刚接触不是太懂..我的openstack是用onestack脚本搭建起来的..

  24. 你好大神,我在启动instance的时候出错了,查询nova-compute日志显示ImageNotAuthorized错误,不知道大神有没有遇到过,求助!

  25. @vpsee openstack可以实现高可用吗?如里面一个vm死掉了,它上面运行的服务会自动迁移到别的备用资源上面吗?

  26. @tstianzy
    貌似你提到的 “高可用性” 涉及到三个不同层次的高可用性:
    1、OpenStack 本身的高可用性,比如某个结点或服务 openstack-compute, openstack-storage, openstack-networking 挂掉了,是否能自动启用备用结点和服务;
    2、OpenStack 上运行的 VM 的高可用性,比如某个 VM 挂掉了,是否能自动启用另一个备用 VM;
    3、VM 上面运行的服务的高可用性,比如 VM 上运行的 Apache/MySQL 挂掉了是否能自动启用另一台 VM 上的服务。
    OpenStack 本身不提供第2种和第3种层面的高可用性,不过可以通过其他办法实现。

  27. 好~

  28. nova-manage service list 为什么看不到节点信息

发表评论