天高地厚

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

经过近5个小时的努力,以及高手的热心帮助下,终于完成了OpenStack的安装与部署。在安装与部署过程中,遇到几个问题,而且官方文档中,也有几处错误与遗漏之处。为了让以后的朋友们,在遇到类似问题时,少走弯路,特发此文,下面进入正题。

 

环境篇

  本方案是用VirtualBox虚拟两台服务器,在上面进行安装,其中一台做为主控服务器,安装glance,nova等主要功能,同时也充当一个计算节点node提供nova-compute服务,我们称之为Server1,另外一台做为计算服务器,只安装nova-compute服务,称为Server2。网络方面,本机位于局域网192.168.1.0中,通过192.168.1.1网关共享上网。
  先用VirtualBox生成两台服务器,分别命令为"OpenStack_Server1"和"OpenStack_Server2",配置选默认即可,操作系统选"Linux",版本选"Ubuntu (64bit)",内存建议选1G,硬盘建议32G。虚拟机创建后,还需要为每台服务器设置一下网络配置。首先,将网卡1"Adapter 1"的连接方式改为"Bridged Adapter"模式,接着再启动网卡2"Adapter 2",并将连接方式改为"Internal"模式。双网卡是为了更高效的传输数据,同时能够有效的分流内部控制数据,与外部网络数据。网卡1是用来连接外网的(在本例中将192.168.1.0当成外网),网卡2是用来连接内网的(本例中内网为 192.168.3.0)。因为内网只需要在各个虚拟服务器之间传输数据,所以将连接模式选为"Internal"。VirtualBox中双虚拟机安装部署OpenStack指南

  创建并配置好虚拟机后,直接在两台服务器上分别安装"ubuntu-11.10-server-amd64"版本。安装时统一指定登录用户名"localadmin",密码自定,设置eth0为主网卡,并且确保能够连接到互联网,在可选组件中,所以的组件都可以不选,最多只安装"Open SSH"即可。在安装Server1特别需要注意的是,官方建议不要用默认分区的办法,使用手动分区,并且为nova-volume服务专门创建一块LVM类型分区。

 

Server1

  本服务器,作为OpenStack的主控服务器,需要安装很多的组件,并且官方文档中也存在不少错误之处,我会一一为大家指出。

  在安装完成基本的Ubuntu操作系统后,更新组件到最新版本。运行如下命令:

  sudo apt-get update

  sudo apt-get upgrade

  安装bridge-utils:

  sudo apt-get install -y bridge-utils

  重启服务器,并登录系统。

 

网络设置

  修改/etc/network/interfaces文件如下:

  auto lo
  iface lo inet loopback
  auto eth0
  iface eth0 inet static
    address 192.168.1.102
    netmask 255.255.255.0
    broadcast 10.10.10.255
    gateway 192.168.1.1
    dns-nameservers 192.168.1.1
  auto eth1
  iface eth1 inet static
    address 192.168.3.1
    netmask 255.255.255.0
    network 192.168.3.0
    broadcast 192.168.3.255

  重启metwork

  sudo /etc/init.d/networking restart

NTP Server 设置

  NTP主要是为了在openstack系统内部各个服务器之间同步时间的一个服务。主控机跟网络时间服务器同步,其他机器跟主控机同步。安装命令如下:

  sudo apt-get install -y ntp

  安装后,修改配置文件/etc/ntp.conf如下:

  server ntp.ubuntu.com
  server 127.127.1.0
  fudge 127.127.1.0 stratum 10

  修改完成后,重启服务

  sudo /etc/init.d/ntp restart

数据库设置

  OpenStack支持3种数据库,Mysql,PostgreSql,SQLite,测试环境一般用SQLite,不过本文采用MySql方式。

  首先安装mysql

  sudo apt-get install -y mysql-server

  为mysql的root用户创建一个密码"mygreatsecret",此处与官方文档保持一致

  打开配置文件 /etc/mysql/my.cnf ,修改绑定地址,并添加一个参数如下:

  bind-address = 0.0.0.0

  skip-name-resolve

  skip-name-resolve参数非常重要,如果不添加的话,当使用ip地址连接mysql时,会导致验证时间较长,超过15秒,而这会导致nova-manage的某些操作报"ConnectTimeOut"错误。  官方遗漏

  安装python-mysqldb组件,命令如下

  sudo apt-get install -y python-mysqldb

  python-mysqldb这个组件是必须要安装的,否则启动glance服务会报错。  官方遗漏

  重启服务

  sudo restart mysql

Glance安装设置

  Glance用来管理运行实例所需要的操作系统镜像。安装命令如下:

  sudo apt-get install -y glance

  Glance默认使用SQLite做为数据库管理系统,如果用的是这种数据库,则不需要设置,因为本例中使用Mysql,所以需要做如下操作:  

  sudo mysql -uroot -pmygreatsecret -e 'CREATE DATABASE glance;'

  sudo mysql -uroot -pmygreatsecret -e 'CREATE USER glancedbadmin;'

  sudo mysql -uroot -pmygreatsecret -e "GRANT ALL PRIVILEGES ON glance.* TO 'glancedbadmin'@'%' ;"

  sudo mysql -uroot -pmygreatsecret -e "SET PASSWORD FOR 'glancedbadmin'@'%' =
 PASSWORD('glancesecret');"

  上面的操作,主要是创建了一个数据库glance,一个操作员glancedbadmin,对操作员授权及设置密码,操作完成后,还需要修改glance的配置文件 /etc/glance/glance-registry.conf 如下:

  sql_connection = mysql://glancedbadmin:glancesecret@192.168.1.102/glance

  修改完成后,重启服务

  sudo restart glance-registry

  如果服务启动不成功,很大可能是因为数据库连接没有设置正确,或者操作员没有创建或者没有授权,此时可以直接在命令行连接mysql测试一下操作员是否能正常登录。还有一种可能是没有安装python-sqldb组件,参见前面"数据库设置"部分。

Nova安装配置

  首先,安装所需组件:

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

  安装euca2ools组件包:

  sudo apt-get install -y euca2ools

  安装unzip:

  sudo apt-get install -y unzip

  设置数据库,以便nova使用,需要运行以下命令:

  sudo mysql -uroot -pmygreatsecret -e 'CREATE DATABASE nova;'

  sudo mysql -uroot -pmygreatsecret -e 'CREATE USER novadbadmin;'

  sudo mysql -uroot -pmygreatsecret -e "GRANT ALL PRIVILEGES ON nova.* TO 'novadbadmin'@'%' ;"

  sudo mysql -uroot -pmygreatsecret -e "SET PASSWORD FOR 'novadbadmin'@'%' = PASSWORD('novasecret');"

  上述命令主要是创建了一个数据库nova,一个操作员novadbadmin,对操作员授权及设置密码,操作完成后,还需要修改nova的配置文件 /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=192.168.1.102
  --rabbit_host=192.168.1.102
  --cc_host=192.168.1.102
  --nova_url=http://192.168.1.102:8774/v1.1/
  --fixed_range=192.168.0.0/16
  --network_size=8
  --routing_source_ip=192.168.1.102
  --sql_connection=mysql://novadbadmin:novasecret@192.168.1.102/nova
  --glance_api_servers=192.168.3.1:9292
  --image_service=nova.image.glance.GlanceImageService
  --iscsi_ip_prefix=192.168.
  --vlan_interface=br100

  --public_interface=eth0

  上面的红色代码需要注意,在官方文档中glance_api_servers地址是错误

  修改完成后,再安装iscsitarget,并设置为启用状态,并重启服务,命令如下:

  sudo apt-get -y install iscsitarget iscsitarget-dkms

  sudo sed -i 's/false/true/g' /etc/default/iscsitarget

  sudo service iscsitarget restart

  如果启动服务失败,可以尝试 sudo restart iscsitarget方式。

  创建物理分卷:

  sudo pvcreate /dev/sda5

  此处可能每个人的情况不同,一般都是 /dev/sda5 or /dev/sda6

  创建分卷组:

  sudo vgcreate nova-volumes /dev/sda5

  修改nova配置目录及文件权限和所有者:

  sudo chown -R root:nova /etc/nova
  sudo chmod 644 /etc/nova/nova.conf

  重启所有相关服务:

  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数据库结构:

  sudo nova-manage db sync

  分配私有网络IP池:

  sudo nova-manage network create private 192.168.4.0/24 1 256

VirtualBox中双虚拟机安装部署OpenStack指南

  如果没有在前面mysql配置文件中添加skip-name-resolve参数,这里就会报上图的错,这个错误害我浪费了不少时间,才找到原因。就是因为mysql连接时,不加参数,导致连接时间需要15秒以上,而nova-manage的连接超时时间是10秒,所以导致一直报错。

  分配公网IP池:

  sudo nova-manage floating create --ip_range=192.168.1.224/27

  创建nova管理用户及项目:

  sudo nova-manage user admin novaadmin

  sudo nova-manage project create proj novaadmin

  重启所有相关服务:

  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

  创建证书,并做相应配置:

  mkdir /home/localadmin/creds

  sudo nova-manage project zipfile proj novaadmin /home/localadmin/creds/novacreds.zip

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

  查看相关密钥:

  sudo nova-manage user exports novaadmin

  将输出的密钥与novarc文件中的密钥进行对比,如果不同,则修改novarc文件,并重新生成:

  export EC2_ACCESS_KEY=c043916c-9a0c-4f91-ad6c-4b30908b6c77
  export EC2_SECRET_KEY=d0ac688e-02f3-48f3-b758-96d886461ace

  是否等于 novarc文件中

  export EC2_ACCESS_KEY="c043916c-9a0c-4f91-ad6c-4b30908b6c77:proj"

  不同时,修改novarc并重新生成:

  source /home/localadmin/creds/novarc

  

  至此,Server1安装配置全部完成,你可以使用如下命令,查看是否运行正常:

  euca-describe-availability-zones verbose

VirtualBox中双虚拟机安装部署OpenStack指南

  如果系统运行正常的话,则如上图显示类似,共有4个功能模块(network,compute,scheduler,volume),运行在Server1上。

  Swift部分将在以后进行安装测试,并给大家分享,它并非OpenStack云计算的必要组件,所以本文不涉及。

 

Server2

  Server2只是用来做为计算节点的,所以安装时非常简单。

  在安装完成基本的Ubuntu操作系统后,更新组件到最新版本。运行如下命令:

  sudo apt-get update

  sudo apt-get upgrade

  安装bridge-utils:

  sudo apt-get install -y bridge-utils

  重启服务器,并登录系统。

网络设置

  修改/etc/network/interfaces文件如下:

  auto lo
  iface lo inet loopback
  auto eth0
  iface eth0 inet static
   address 192.168.1.103
   netmask 255.255.255.0
   broadcast 10.10.10.255
   gateway 192.168.1.1
   dns-nameservers 192.168.1.1
  auto eth1
  iface eth1 inet static
   address 192.168.3.2
   netmask 255.255.255.0
   network 192.168.3.0
   broadcast 192.168.3.255

  重启metwork

  sudo /etc/init.d/networking restart

NTP Client 设置

  安装命令如下:

  sudo apt-get install -y ntp

  Server2的NTP 是用来跟Server1同步的,设置上稍有不同,修改配置文件/etc/ntp.conf如下:

  server 192.168.1.102
  修改完成后,重启服务

  sudo /etc/init.d/ntp restart

Nova安装配置

  首先,安装所需组件:

  sudo apt-get install -y nova-common python-nova nova-compute vlan

  安装euca2ools组件包:

  sudo apt-get install -y euca2ools

  安装unzip:

  sudo apt-get install -y unzip

  修改nova的配置文件 /etc/nova/nova.conf 如下(和Server1上的文件基本类似):

  --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=192.168.1.102
  --rabbit_host=192.168.1.102
  --cc_host=192.168.1.102
  --network_size=8
  --routing_source_ip=192.168.1.102
  --sql_connection=mysql://novadbadmin:novasecret@192.168.1.102/nova
  --glance_api_servers=192.168.3.1:9292
  --image_service=nova.image.glance.GlanceImageService
  --iscsi_ip_prefix=192.168.
  --vlan_interface=br100

  重启相关服务:

  sudo service restart nova-compute

 

  至此Server2的配置也已经全部完成。此时我们再在Server1上检查一下openstack运行状态,输入命令

  euca-describe-availability-zones verbose

VirtualBox中双虚拟机安装部署OpenStack指南

  你会发现,Server2已经加入到云里了,因为Server2是计算节点,所以他上面只运行了一个compute服务。

 

  好了,OpenStack的安装与部署至此就初步完成了,本文对官方文档中,几个错误和遗漏的地方,也专门用红字进行了标记,以便大家安装时出现类似的错误。不过安装部署完成,只是OpenStack万里长征第一步。后面我还会继续进行实例的生命周期管理,以及其他的一些功能试验。也会写一些文章,记录过程,也方便大家参考。