在 CentOS 上安装和配置 OpenStack Nova

因为 Python 的版本问题,在 CentOS 5.6 上安装 OpenStack 不是件容易的事情,因为 OpenStack 是 Python 2.6 写的,CentOS 5.6 上默认的是 Python 2.4 的环境,一些关键工具(比如 yum 等)和依赖关系都需要 2.4,不容易直接升级到 2.6,所以要在 CentOS 上安装 OpenStack 的话简单的办法是直接用 CentOS 6.0(默认是 Python 2.6). OpenStack 的基本介绍以及如何在 Ubuntu 上安装 OpenStack Nova 可以看:在 Ubuntu 上安装和配置 OpenStack Nova. 对云计算平台感兴趣的朋友可以看看另一个开源的云计算系统:在 CentOS 上安装和配置 OpenNebula.

安装和配置基本系统

在安装完基本的 CentOS 6.0 系统后(最小化安装)升级和更新整个系统,然后关闭 SELINUX 后重启,为了简单方便最好也关闭 iptables:

# yum update
# yum upgrade

# vi /etc/sysconfig/selinux
SELINUX=disabled

# chkconfig iptables off
# service iptables stop

# shutdown -r now

安装 OpenStack Nova

下载和安装 OpenStack 源:

# wget http://yum.griddynamics.net/yum/diablo-3/openstack/openstack-repo-2011.3-0.3.noarch.rpm
# rpm -ivh openstack-repo-2011.3-0.3.noarch.rpm

OpenStack Nova 需要在控制结点(Cloud Controller)和计算结点(Cloud Compute)上都安装和启用 libvirtd:

# yum install libvirt
# chkconfig libvirtd on
# service libvirtd start

如果服务器用来做 Cloud Controller 结点需要安装(OpenStack Nova 云里至少要有一台服务器作为控制结点):

# yum install euca2ools openstack-nova-node-full unzip

如果服务器只是做 Cloud Compute 结点则需要在每个计算结点上都安装(理论上 OpenStack Nova 云里可以有无数个计算结点):

# yum install openstack-nova-node-compute

配置 MySQL 数据库

OpenStack Nova 需要数据库的支持,这里用的是 MySQL:

# service mysqld start
# chkconfig mysqld on
# service rabbitmq-server start
# chkconfig rabbitmq-server on

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

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

# service mysql restart

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

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

配置 Nova:

$ sudo vi /etc/nova/nova.conf
--verbose=false
--ec2_url=http://172.16.39.111:8773/services/Cloud
--s3_host=172.16.39.111
--cc_host=172.16.39.111
--rabbit_host=172.16.39.111
--sql_connection=mysql://nova:nova@172.16.39.111/nova
--glance_api_servers=172.16.39.111:9292
--use_s3=true
--libvirt_type=kvm
--use_syslog=false
--node_availability_zone=nova
--logdir=/var/log/nova
--logging_context_format_string=%(asctime)s %(name)s: %(levelname)s [%(request_id)s %(user)s %(project)s] %(message)s
--logging_default_format_string=%(asctime)s %(name)s: %(message)s
--logging_debug_format_suffix=
--use_cow_images=true
--auth_driver=nova.auth.dbdriver.DbDriver
--network_manager=nova.network.manager.VlanManager
--scheduler_driver=nova.scheduler.zone.ZoneScheduler
--image_service=nova.image.glance.GlanceImageService
--use_ipv6=false
--ca_path=/var/lib/nova/CA
--keys_path=/var/lib/nova/keys
--images_path=/var/lib/nova/images
--buckets_path=/var/lib/nova/buckets
--instances_path=/var/lib/nova/instances
--networks_path=/var/lib/nova/networks
--dhcpbridge_flagfile=/etc/nova/nova.conf
--dhcpbridge=/usr/bin/nova-dhcpbridge
--injected_network_template=/usr/share/nova/interfaces/
--libvirt_xml_template=/usr/share/nova/libvirt.xml.template
--vpn_client_template=/usr/share/nova/client.ovpn.template
--credentials_template=/usr/share/nova/novarc.template
--state_path=/var/lib/nova
--lock_path=/var/lib/nova/tmp
--vnc_enabled=true
--vncproxy_url=http://172.16.39.111:6080
--vncserver_host=0.0.0.0
--vnc_token_ttl=300

每次重启一堆服务很麻烦,写个脚本方便重启 nova 所有服务:

# vi nova-restart-all.sh
#!/bin/bash
for n in api compute network objectstore scheduler vncproxy; do service openstack-nova-$n restart; done
service openstack-glance-api restart
service openstack-glance-registry restart

# chmod +x nova-restart-all.sh

# ./nova-restart-all.sh

使用 Nova

接下来的步骤和在 Ubuntu 上安装和配置 OpenStack Nova 差不多,这里就不再赘述:

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

导出权限信息:

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

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

# source /home/vpsee/creds/novarc

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

# ./nova-restart-all.sh

如果一切正常的话,应该可以看到下面的类似信息,这样 OpenStack Nova 就成功安装了:

# euca-describe-availability-zones verbose
AVAILABILITYZONE	nova	available
AVAILABILITYZONE	|- node00	
AVAILABILITYZONE	| |- nova-network	enabled :-) 2011-08-16 19:28:13
AVAILABILITYZONE	| |- nova-compute	enabled :-) 2011-08-16 19:28:22
AVAILABILITYZONE	| |- nova-scheduler	enabled :-) 2011-08-16 19:28:14

启动第一个实例

启动实例之前需要先上传一个系统模版(称之为镜像 image),自己制作 image 有点麻烦,可以参考:为 OpenStack Nova 制作 Ubuntu 镜像为 OpenStack Nova 制作 Windows 镜像

有了 image 后就可以启动实例了,就像在 C++/Java 等面向对象语言里面有了类(class)以后可以创建实例(instance)一样,这里有了 OS image 以后就可以创建 OS instance 了。启动和访问实例可以看这篇 的相关部分。

评论 (22 Comments)

  1. 学习了

  2. centos6.0 貌似有点问题 安装控制节点和计算节点时依赖有问题
    莫非 必须最小安装才可以?

  3. (nova.exception): TRACE: return self.driver.update_available_resource(context, self.host)
    (nova.exception): TRACE: File “/usr/lib/python2.6/site-packages/nova/virt/libvirt/connection.py”, line 1374, in update_available_resource
    (nova.exception): TRACE: ‘hypervisor_version’: self.get_hypervisor_version(),
    (nova.exception): TRACE: File “/usr/lib/python2.6/site-packages/nova/virt/libvirt/connection.py”, line 1258, in get_hypervisor_version
    (nova.exception): TRACE: return method()
    (nova.exception): TRACE: File “/usr/lib64/python2.6/site-packages/libvirt.py”, line 1853, in getVersion
    (nova.exception): TRACE: if ret == -1: raise libvirtError (‘virConnectGetVersion() failed’, conn=self)
    (nova.exception): TRACE: libvirtError: internal error Cannot find suitable emulator for x86_64
    (nova.exception): TRACE:
    2011-10-07 06:33:59,759 nova: internal error Cannot find suitable emulator for x86_64
    报这种错误是什么原因呢?

  4. 这是在重启openstack-nova-compute时,在/var/log/nova/nova-compute.log中报的。我用的是在虚拟机中安装的centos6 x86_64的系统。请高手指教。

  5. yum源服务器:yum.griddynamics.net的服务关闭了?

  6. @vpsee

    用nova-manage network create创建网络的时候nova-manage.log里输出如下:是什么原因呢?

    –bridge_interface is required to create a network.

  7. @longhudou
    ifconfig 看看有没有 br100?然后看看用 nova manage network create 192.168.3.0/24 1 256 –bridge_interface=eth0 命令看看。注意,openstack 在飞速发展中,以前的命令和参数可能都有变化,注意这篇写文章的时间。

  8. @vpsee

    我想用xen,而不是kvm,你上面给出的是控制节点的安装过程,不知道用xen的话控制节点的配置文件里–libvirt_type=kvm是不是改为xen就行了?计算节点是不是就简单的把nova.conf复制过去就行了呢?官方文档提到you must install openstack-compute on domU是什么意思呢?

  9. 控制节点上执行euca-describe-availability-zones verbose显示如下

    nova-manage service list
    nova1 nova-compute enabled XXX None
    nova1 nova-network enabled :-) 2011-11-10 10:22:27
    nova1 nova-scheduler enabled :-) 2011-11-10 10:22:29
    nova1 nova-vncproxy enabled :-) 2011-11-10 10:22:30
    nova2 nova-compute enabled XXX None
    nova3 nova-compute enabled XXX None
    nova4 nova-compute enabled XXX None
    不知道是什么原因?

  10. @longhudou

    你用的是默认的VlanManager吧,在nova.conf加上–vlan_interface=eth0
    可以参考官网上的OpenStack Compute Administration Manual

  11. @longhudou
    必须在 domU 上安装 openstack-compute,建议先看看我们其他文章了解一下 Xen.

  12. @longhudou
    nova-compute 服务不成功,原因很多,可以看看 log

  13. 按照这个步骤再执行[root@nova1 ~]# euca-describe-availability-zones verbose
    [Errno 111] Connection refused
    [root@nova1 ~]# netstat -tnap | grep 3333
    tcp 0 0 0.0.0.0:3333 0.0.0.0:* LISTEN 5814/python
    [root@nova1 ~]# netstat -tnap | grep 8773
    [root@nova1 ~]# cd /root/cert
    显示上面的错误,8773端口没被监听?不知道是什么问题,log中也没错误。

  14. CentOS6.2 + KVM + libvirt-0.9.4-23.el6_2.4.x86_64
    当执行
    virsh -c qemu:///system
    没有反应,必须用Ctrl+C来结束命令
    ———————其网络设置如下———————
    vi ifcfg-eth0

    DEVICE=eth0
    HWADDR=00:0C:29:00:EE:6E
    ONBOOT=yes
    BRIDGE=br0

    vi ifcfg-br0

    DEVICE=br0
    TYPE=Bridge
    BOOTPROTO=static
    IPADDR=192.168.1.160
    NETMASK=255.255.255.0
    GATEWAY=192.168.1.1
    ONBOOT=yes

  15. openstack-nova-node-full 为何centos 找不到呢?是不是

    openstack-nova-compute.noarch 2011.1.1-4 openstack-nova
    openstack-nova-compute-config.noarch 2011.1.1-1 openstack-nova

  16. @Percy
    需要安装 openstack-repo-2011.3-0.3.noarch.rpm 源先。

  17. 你好,我的rabbitmq-server 启动的时候永远是FAILED,是什么问题啊
    报错的信息差不多是TCP_Listener部分的问题。

  18. @megacreep,这是因为你可能把另外的程序在占用5672这个端口,看看qpidd有没有运行

  19. 谢谢楼主的诸多回复,给了我很大的帮助~

  20. 怎么在 centos 7.0 中配置安装呢

  21. ERROR : Error appeared during Puppet run: 192.168.10.60_prescript.pp
    Error: Could not connect to NetworkManager.
    You will find full trace in log /var/tmp/packstack/20140924-085821-vHgCCb/manifests/192.168.10.60_prescript.pp.log
    Please check log file /var/tmp/packstack/20140924-085821-vHgCCb/openstack-setup.log for more information

    Additional information:
    * A new answerfile was created in: /root/packstack-answers-20140924-085821.txt
    * Time synchronization installation was skipped. Please note that unsynchronized time on server instances might be problem for some OpenStack components.
    * Did not create a cinder volume group, one already existed
    * File /root/keystonerc_admin has been created on OpenStack client host 192.168.10.60. To use the command line tools you need to source the file.
    * To access the OpenStack Dashboard browse to http://192.168.10.60/dashboard .
    Please, find your login credentials stored in the keystonerc_admin in your home directory.
    * To use Nagios, browse to http://192.168.10.60/nagios username: nagiosadmin, password: b22d923fda254807

  22. 亲!这个错误什么问题导致的呢?
    [root@linux-node2 ~]# nova-compute –config-file=/etc/nova/nova.conf
    2015-01-01 18:54:02.048 3914 DEBUG nova.servicegroup.api [-] ServiceGroup driver defined as an instance of db __new__ /usr/lib/python2.6/site-packages/nova/servicegroup/api.py:65
    2015-01-01 18:54:02.267 3914 INFO nova.openstack.common.periodic_task [-] Skipping periodic task _periodic_update_dns because its interval is negative
    2015-01-01 18:54:02.416 3914 DEBUG stevedore.extension [-] found extension EntryPoint.parse(‘file = nova.image.download.file’) _load_plugins /usr/lib/python2.6/site-packages/stevedore/extension.py:156
    2015-01-01 18:54:02.422 3914 ERROR stevedore.extension [-] Could not load ‘file’: cannot import name util
    2015-01-01 18:54:02.423 3914 ERROR stevedore.extension [-] cannot import name util
    2015-01-01 18:54:02.423 3914 TRACE stevedore.extension Traceback (most recent call last):
    2015-01-01 18:54:02.423 3914 TRACE stevedore.extension File “/usr/lib/python2.6/site-packages/stevedore/extension.py”, line 162, in _load_plugins
    2015-01-01 18:54:02.423 3914 TRACE stevedore.extension verify_requirements,
    2015-01-01 18:54:02.423 3914 TRACE stevedore.extension File “/usr/lib/python2.6/site-packages/stevedore/extension.py”, line 178, in _load_one_plugin
    2015-01-01 18:54:02.423 3914 TRACE stevedore.extension plugin = ep.load(require=verify_requirements)
    2015-01-01 18:54:02.423 3914 TRACE stevedore.extension File “/usr/lib/python2.6/site-packages/pkg_resources.py”, line 1948, in load
    2015-01-01 18:54:02.423 3914 TRACE stevedore.extension entry = __import__(self.module_name, globals(),globals(), [‘__name__’])
    2015-01-01 18:54:02.423 3914 TRACE stevedore.extension File “/usr/lib/python2.6/site-packages/nova/image/download/file.py”, line 23, in
    2015-01-01 18:54:02.423 3914 TRACE stevedore.extension import nova.virt.libvirt.utils as lv_utils
    2015-01-01 18:54:02.423 3914 TRACE stevedore.extension File “/usr/lib/python2.6/site-packages/nova/virt/libvirt/__init__.py”, line 15, in
    2015-01-01 18:54:02.423 3914 TRACE stevedore.extension from nova.virt.libvirt import driver
    2015-01-01 18:54:02.423 3914 TRACE stevedore.extension File “/usr/lib/python2.6/site-packages/nova/virt/libvirt/driver.py”, line 59, in
    2015-01-01 18:54:02.423 3914 TRACE stevedore.extension from eventlet import util as eventlet_util
    2015-01-01 18:54:02.423 3914 TRACE stevedore.extension ImportError: cannot import name util
    2015-01-01 18:54:02.423 3914 TRACE stevedore.extension
    2015-01-01 18:54:02.428 3914 INFO nova.virt.driver [-] Loading compute driver ‘libvirt.LibvirtDriver’
    2015-01-01 18:54:02.445 3914 ERROR nova.virt.driver [-] Unable to load the virtualization driver
    2015-01-01 18:54:02.445 3914 TRACE nova.virt.driver Traceback (most recent call last):
    2015-01-01 18:54:02.445 3914 TRACE nova.virt.driver File “/usr/lib/python2.6/site-packages/nova/virt/driver.py”, line 1299, in load_compute_driver
    2015-01-01 18:54:02.445 3914 TRACE nova.virt.driver virtapi)
    2015-01-01 18:54:02.445 3914 TRACE nova.virt.driver File “/usr/lib/python2.6/site-packages/nova/openstack/common/importutils.py”, line 52, in import_object_ns
    2015-01-01 18:54:02.445 3914 TRACE nova.virt.driver return import_class(import_str)(*args, **kwargs)
    2015-01-01 18:54:02.445 3914 TRACE nova.virt.driver File “/usr/lib/python2.6/site-packages/nova/openstack/common/importutils.py”, line 33, in import_class
    2015-01-01 18:54:02.445 3914 TRACE nova.virt.driver traceback.format_exception(*sys.exc_info())))
    2015-01-01 18:54:02.445 3914 TRACE nova.virt.driver ImportError: Class LibvirtDriver cannot be found ([‘Traceback (most recent call last):\n’, ‘ File “/usr/lib/python2.6/site-packages/nova/openstack/common/importutils.py”, line 29, in import_class\n return getattr(sys.modules[mod_str], class_str)\n’, “AttributeError: ‘module’ object has no attribute ‘LibvirtDriver’\n”])
    2015-01-01 18:54:02.445 3914 TRACE nova.virt.driver
    [root@linux-node2 ~]#

发表评论