经过近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"。
创建并配置好虚拟机后,直接在两台服务器上分别安装"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
如果没有在前面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
如果系统运行正常的话,则如上图显示类似,共有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
你会发现,Server2已经加入到云里了,因为Server2是计算节点,所以他上面只运行了一个compute服务。
好了,OpenStack的安装与部署至此就初步完成了,本文对官方文档中,几个错误和遗漏的地方,也专门用红字进行了标记,以便大家安装时出现类似的错误。不过安装部署完成,只是OpenStack万里长征第一步。后面我还会继续进行实例的生命周期管理,以及其他的一些功能试验。也会写一些文章,记录过程,也方便大家参考。