最具影响力的数字化技术在线社区

乔帮主 发表于 2014-8-4 14:39:03

[官版翻译ing]OpenStack云计算快速入门之二:OpenStack安装与配置

OpenStack云计算----快速入门(2)
    该教程基于Ubuntu12.04版,它将帮助读者建立起一份OpenStack最小化安装。

第二部分 OpenStack安装与配置

一、引言

本章内容讲解如何在3台物理机上搭建最小化云平台,这3台机器分为称为Server1、Server2和Client1,之后的各章也是如此。Server1承载着Nova、Glance、Swift、Keystone及Horizon(OpenStack的Web UI)服务。Server2只用来运行实例管理的nova运算工作站。由于OpenStack组件采用分布式结构,其中的任何一部分或几个部分都可以安装在任意服务器上。
Client1并不是安装所必须的,在本例中,它仅用来制作打包镜像,并使用它访问Horizon在Web上管理OpenStack设施。于是就避免了使用服务器来完成镜像打包等诸如此类的任务了,而且在制作桌面系统镜像时如果包含视窗界面的话,我们也只能相应地使用有GUI的电脑来完成,故而最好还是别在服务器上玩火了吧。建议Client1支持虚拟化技术,以便在制作完镜像打包时可以运行KVM。
http://blog.chinaunix.net/attachment/201207/6/22414998_134155782614bA.png
    OpenStack安装需要设定主机名、IP地址等,按你实际的环境进行配置。下表是译者安装的网络参数清单:http://blog.chinaunix.net/attachment/201207/6/22414998_1341558294QI5p.png
    以下是教程中网络设置参数,本教程均采用这些参数,但在实际安装中请参照上表进行设置。
http://blog.chinaunix.net/attachment/201207/8/22414998_13417358040Oso.png


二、Server1

    正如上表所示,Server1包含了所有的Nova服务:nova-compute、nova-api、nova-volume、nova-network以及Glance、Swift、Keystone和Horizon。这台服务器上需要双网卡。
(一)安装底层OS

不必多想,请参照下述说明,记住相关参数,选择64位Ubuntu12.04版,进行安装。l 创建的第一个用户命名为“localadmin”l 为eth0和eth1设定IP及其相关参数    l 在安装服务包中,仅选择“Openssh-server”作为预装项

因为Server1上也将安装nova-volume软件,而nova-volume需要一块专用分区,所以在安装Ubuntu Server时请选择手动分区,并另行创建一块合适大小的分区。从本章起,教程都将以/dev/sda6作为这块分区。你可以根据自己分区的实际情况进行修改。此外,请使用fdisk工具将该分区需要格式化为LVM(8e)格式,这一操作在安装中或刚安装完毕格式化均可。进一步,如果你还计划在这台服务器上再新建一个分区配给Swift的话,那么就新建一块分区并参照本章后文“安装Swift”一节相关内容进行安装。


待12.04的UbuntuOS安装完毕后 ,使用下列命令更新系统:    sudo apt-get update    sudo apt-get upgrade
安装网桥工具bridge-utils:sudo apt-get install bridge-utils
(二)配置网络

编辑/etc/network/interfaces文件,如下所示:
auto loiface lo inet loopbackauto eth0iface eth0 inet staticaddress 10.10.10.2netmask 255.255.255.0broadcast 10.10.10.255gateway 10.10.10.1dns-nameservers 10.10.8.3auto eth1iface eth1 inet staticaddress 192.168.3.1netmask 255.255.255.0network 192.168.3.0broadcast 192.168.3.255

随后重新启动网络:sudo /etc/init.d/networking restart
(三)NTP服务器
安装NTP软件包。这个时间服务器将为所有节点提供支持。OpenStack所有组件的时间都必须同步,于是我们就在Server1上安装NTP服务并且让其他服务器或节点与之保持同步。    sudo apt-get install ntp译者注:NTP(Network Time Protocol),是用来使计算机时间同步化的一种协议,它可以使计算机对其服务器或时钟源(如石英钟,GPS等等)做同步化,它可以提供高精准度的时间校正(LAN上与标准间差小于1毫秒,WAN上几十毫秒),且可介由加密确认的方式来防止恶毒的协议攻击。[来源:百度百科
打开文件/etc/ntp.conf增加以下三行内容,目的是让本服务器时间与外部服务器时间同步。如果不能访问外网,NTP服务器将使用本机硬件时钟作为第二选择。
server ntp.ubuntu.com server 127.127.1.0 fudge 127.127.1.0 stratum 10

然后重启NTP使配置生效:sudo service ntp restart请确保服务器IP地址可以被DNS解析。如果不能,则在/etc/hosts文件中手工加入。
(四)数据库

我们有很多选择:MySQL、PostgreSQL或者SQLite等都能很好地对Nova和Glance提供数据支持。究竟选哪个,自己定吧。本例中采用MySQL。
MySQL安装mysql-server和python-mysqldb包:sudo apt-get install mysql-server python-mysqldb
为mysql创建root密码,在此使用“mygreatsecret”。随后编辑mysql配置文件/etc/mysql/my.cnf,将绑定地址从127.0.0.1改为0.0.0.0,如下所示:bind-address = 0.0.0.0
重启MySQL服务器让其开始监听所有端口:sudo restart mysql
创建数据库我们将要为nova、glance和keystone创建很多东东,各种数据库、表及用户。话音未落,这就开始了:
创建名为“nova”的数据库:sudo mysql -uroot -pmygreatsecret -e 'CREATE DATABASE nova;'
新建一个用户,名为“novadbadmin”:sudo mysql -uroot -pmygreatsecret -e 'CREATE USER novadbadmin;'
授予novadbadmin用户nova数据库全部权限:sudo mysql -uroot -pmygreatsecret -e "GRANT ALL PRIVILEGES ON nova.* TO 'novadbadmin'@'%';"
为novadbadmin同志创建密码(译者注:密码是novasecret,后文类似之处不多言,请详见命令):sudo mysql -uroot -pmygreatsecret -e "SET PASSWORD FOR 'novadbadmin'@'%' = PASSWORD('novasecret');"
Glance登场,还是重复刚才的道道,首先创建一个名为glance的数据库:sudo mysql -uroot -pmygreatsecret -e 'CREATE DATABASE glance;'
然后为这个新建的数据库添加一个用户“glancedbadmin”: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');"
很烦的,keystone出场了。刚才的大循环,至此开始演绎第三遍:sudo mysql -uroot -pmygreatsecret -e 'CREATE DATABASE keystone;'sudo mysql -uroot -pmygreatsecret -e 'CREATE USER keystonedbadmin;'sudo mysql -uroot -pmygreatsecret -e "GRANT ALL PRIVILEGES ON keystone.* TO 'keystonedbadmin'@'%';"sudo mysql -uroot -pmygreatsecret -e "SET PASSWORD FOR 'keystonedbadmin'@'%' = PASSWORD('keystonesecret')"现在,MySQL部分的工作结束。
(五)Keystone

Keystone是OpenStack的认证服务。使用以下命令进行安装:sudo apt-get install keystone python-keystone python-keystoneclient
打开/etc/keystone/keystone.conf文件,将这一行:admin_token = ADMIN改为:admin_token = admin(本教程中我们将一直使用admin作为令牌)
本例中,我们使用MySQL来存储keystone配置,则将 /etc/keystone/keystone.conf中的这句配置:connection = sqlite:////var/lib/keystone/keystone.db换成:connection = mysql://keystonedbadmin:keystonesecret@10.10.10.2/keystone
然后,重启Keystone:sudo service keystone restart
接着,执行以下命令同步数据库:sudo keystone-manage db_sync
最后,有些环境变量是OpenStack运行所必须的:export SERVICE_ENDPOINT="http://localhost:35357/v2.0"export SERVICE_TOKEN=admin当然为了避免下次系统重启后,还得将这些变量再次export,最稳妥的办法就是将其写入~/.bashrc中。
创建租间使用以下命令创建两个租间,admin和service:keystone tenant-create --name adminkeystone tenant-create --name service
创建用户执行以下命令,创建四个用户admin、nova、glance及swift:keystone user-create --name admin --pass admin --email admin@foobar.com keystone user-create --name nova --pass nova   --email nova@foobar.comkeystone user-create --name glance --pass glance   --email glance@foobar.comkeystone user-create --name swift --pass swift   --email swift@foobar.com
创建角色使用命令创建两个角色,admin和Member(译者注:注意是大写M):keystone role-create --name adminkeystone role-create --name Member
查看租间、用户和角色刚才建立的租间、用户和角色可以通过如下命令进行查看:租间列表:keystone tenant-list+----------------------------------+--------------------+---------+|                id                |      name      | enabled |+----------------------------------+--------------------+---------+| 7f95ae9617cd496888bc412efdceabfd | admin            | True    || c7970080576646c6959ee35970cf3199 | service            | True    |+----------------------------------+--------------------+---------+用户列表:keystone user-list+----------------------------------+---------+-------------------+--------+|                id                | enabled |       email       |name|+----------------------------------+---------+-------------------+--------+| 1b986cca67e242f38cd6aa4bdec587ca | True    | swift@foobar.com| swift|| 518b51ea133c4facadae42c328d6b77b | True    | glance@foobar.com | glance || b3de3aeec2544f0f90b9cbfe8b8b7acd | True    | admin@foobar.com| admin|| ce8cd56ca8824f5d845ba6ed015e9494 | True    | nova@foobar.com   | nova   |+----------------------------------+---------+-------------------+--------+角色列表:keystone role-list+----------------------------------+----------------------+|                id                |         name         |+----------------------------------+----------------------+| 2bbe305ad531434991d4281aaaebb700 | admin                || d983800dd6d54ee3a1b1eb9f2ae3291f | Member               |+----------------------------------+----------------------+请大家格外注意id列中的值,虽然很长,但随后为用户绑定角色,继而把用户配入租间中时可全靠它们了。
为特定租间中的用户绑定角色现在我们先为刚刚创建的用户绑定角色,通过如下命令格式可以将特定租间中的特定用户增加角色(译者注:仅是命令格式,随后才是真正执行的命令):keystone user-role-add --user $USER_ID --role $ROLE_ID --tenant_id $TENANT_ID其中id字段可以通过keystone user-list,keystone role-list和keystone tenant-list命令获得。
下面开始为“admin”租间中的“admin”用户绑定“admin”角色:keystone user-role-add --user b3de3aeec2544f0f90b9cbfe8b8b7acd --role 2bbe305ad531434991d4281aaaebb700 --tenant_id 7f95ae9617cd496888bc412efdceabfd
接着执行如下命令,为“service”租间中的“nova”、“glance”、“swift”用户绑定“admin”角色:keystone user-role-add --user ce8cd56ca8824f5d845ba6ed015e9494 --role 2bbe305ad531434991d4281aaaebb700 --tenant_id c7970080576646c6959ee35970cf3199keystone user-role-add --user 518b51ea133c4facadae42c328d6b77b --role 2bbe305ad531434991d4281aaaebb700 --tenant_id c7970080576646c6959ee35970cf3199keystone user-role-add --user 1b986cca67e242f38cd6aa4bdec587ca --role 2bbe305ad531434991d4281aaaebb700 --tenant_id c7970080576646c6959ee35970cf3199
Horizon和Swift只“Member”角色即可,所以相应地执行如下命令:keystone user-role-add --user b3de3aeec2544f0f90b9cbfe8b8b7acd --role d983800dd6d54ee3a1b1eb9f2ae3291f --tenant_id 7f95ae9617cd496888bc412efdceabfd注意,在执行自己的安装时,请千万按照实际安装中的id进行设置,照抄本文id必将出错!
创建服务至此,我们该创建授权用户可以享用的服务了,命令格式如下:keystone service-create --name service_name --type service_type --description 'Description of the service'
安装上述格式,创建nova-compute、nova-volume、glance、swift、keystone及ec2服务:keystone service-create --name nova --type compute --description 'OpenStack Compute Service'keystone service-create --name volume --type volume --description 'OpenStack Volume Service'keystone service-create --name glance --type image --description 'OpenStack Image Service'keystone service-create --name swift --type object-store --description 'OpenStack Storage Service'keystone service-create --name keystone --type identity --description 'OpenStack Identity Service'keystone service-create --name ec2 --type ec2 --description 'EC2 Service'
刚才创建的每个服务都拥有唯一的id,要查看服务id,使用如下命令即可:keystone service-list+----------------------------------+----------+--------------+----------------------------+|                id                |   name   |   type   |      description         |+----------------------------------+----------+--------------+----------------------------+| 1e93ee6c70f8468c88a5cb1b106753f3 | nova   | compute      | OpenStack Compute Service|| 28fd92ffe3824004996a3e04e059d875 | ec2      | ec2          | EC2 Service                || 7d4ec192dfa1456996f0f4c47415c7a7 | keystone | identity   | OpenStack Identity Service || 96f35e1112b143e59d5cd5d0e6a8b22d | swift    | object-store | OpenStack Storage Service|| f38f4564ff7b4e43a52b2f5c1b75e5fa | volume   | volume       | OpenStack Volume Service   || fbafab6edcab467bb734380ce6be3561 | glance   | image      | OpenStack Image Service    |+----------------------------------+----------+--------------+----------------------------+这些id将被用于定义所属服务的入口(endpoint)。
创建入口创建服务入口的命令格式是:keystone endpoint-create --region region_name --service_id service_id --publicurl public_url --adminurl admin_url--internalurl internal_url
使用如下命令创建nova-compute入口:keystone endpoint-create --region myregion --service_id 1e93ee6c70f8468c88a5cb1b106753f3 --publicurl 'http://10.10.10.2:8774/v2/$(tenant_id)s' --adminurl 'http://10.10.10.2:8774/v2/$(tenant_id)s' --internalurl 'http://10.10.10.2:8774/v2/$(tenant_id)s'使用如下命令创建nova-volume入口:keystone endpoint-create --region myregion --service_id f38f4564ff7b4e43a52b2f5c1b75e5fa --publicurl 'http://10.10.10.2:8776/v1/$(tenant_id)s' --adminurl 'http://10.10.10.2:8776/v1/$(tenant_id)s' --internalurl 'http://10.10.10.2:8776/v1/$(tenant_id)s'使用如下命令创建glance入口:keystone endpoint-create --region myregion --service_id fbafab6edcab467bb734380ce6be3561 --publicurl 'http://10.10.10.2:9292/v1' --adminurl 'http://10.10.10.2:9292/v1' --internalurl 'http://10.10.10.2:9292/v1'
使用如下命令创建swift入口:keystone endpoint-create --region myregion --service_id 96f35e1112b143e59d5cd5d0e6a8b22d --publicurl 'http://10.10.10.2:8080/v1/AUTH_$(tenant_id)s' --adminurl 'http://10.10.10.2:8080/v1' --internalurl 'http://10.10.10.2:8080/v1/AUTH_$(tenant_id)s'使用如下命令创建keystone入口:keystone endpoint-create --region myregion --service_id 7d4ec192dfa1456996f0f4c47415c7a7 --publicurl http://10.10.10.2:5000/v2.0 --adminurl http://10.10.10.2:35357/v2.0 --internalurl http://10.10.10.2:5000/v2.0使用如下命令创建ec2入口:keystone endpoint-create --region myregion --service_id 28fd92ffe3824004996a3e04e059d875 --publicurl http://10.10.10.2:8773/services/Cloud --adminurl http://10.10.10.2:8773/services/Admin --internalurl http://10.10.10.2:8773/services/Cloud

(六)Glance

使用以下命令安装glance:
sudo apt-get install glance glance-api glance-client glance-common glance-registry python-glance

配置Glance服务Glance默认使用SQLite,MySQL或PostgreSQL也可以很好地与Glance工作。打开 /etc/glance/glance-api-paste.ini文件并在末尾编辑如下内容:admin_tenant_name = %SERVICE_TENANT_NAME%admin_user = %SERVICE_USER%admin_password = %SERVICE_PASSWORD%这些值需要用刚才我们安装中的实际值进行替换,admin_tenant_name应该是“service”,admin_user这里是“glance”、admin_password是“glance”。
编辑完这三行应该是如下的样子:admin_tenant_name = serviceadmin_user = glanceadmin_password = glance
接着再打开 /etc/glance/glance-registry-paste.ini文件,也如上述操作一样在文件尾部进行同样的编辑。


然后,修改glance数据库连接为MySQL,编辑 /etc/glance/glance-registry.conf,找到“sql_connection =”这句作如下修改:sql_connection = mysql://glancedbadmin:glancesecret@10.10.10.2/glance紧接着还是这份文件,在底部增加如下设置,目的是让glance使用keystone授权:flavor = keystone
打开 /etc/glance/glance-api.conf文件,在文件末尾增加如下配置:flavor = keystone
在MySQL数据库中创建glance schema,进行同步:sudo glance-manage version_control 0sudo glance-manage db_sync
上述改动全部完成后,重启glance-api和glance-registry服务:sudo restart glance-apisudo restart glance-registry
设置如下环境变量,你也可以将其写入 ~/.bashrc中:export SERVICE_TOKEN=adminexport OS_TENANT_NAME=adminexport OS_USERNAME=adminexport OS_PASSWORD=adminexport OS_AUTH_URL="http://localhost:5000/v2.0/"export SERVICE_ENDPOINT=http://localhost:35357/v2.0
现在我们可以使用这个命令来测试glance是否正确安装:glance index如果这条命令没有返回任何结果,则说明glance已经正确安装完毕,并与Keystone正常通信。若是稍微探究一下的话,上述命令其实有返回值,正确安装情况下的返回值是0,可以使用echo $?进行查看。
在Glance正确配置且使用keystone作为授权机制后,我们便可以上传镜像到glance了,相关内容详见后文中的“镜像管理(Image Management)”。


(七)Nova

先使用如下命令安装nova及其相关组件:sudo apt-get install nova-api nova-cert nova-compute nova-compute-kvm nova-doc nova-network nova-objectstore nova-scheduler nova-volume rabbitmq-server novnc nova-consoleauth
配置Nova以如下配置为例,编辑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=/run/lock/nova--allow_admin_api=true--use_deprecated_auth=false--auth_strategy=keystone--scheduler_driver=nova.scheduler.simple.SimpleScheduler--s3_host=10.10.10.2--ec2_host=10.10.10.2--rabbit_host=10.10.10.2--cc_host=10.10.10.2--nova_url=http://10.10.10.2:8774/v1.1/--routing_source_ip=10.10.10.2--glance_api_servers=10.10.10.2:9292--image_service=nova.image.glance.GlanceImageService--iscsi_ip_prefix=192.168.4--sql_connection=mysql://novadbadmin:novasecret@10.10.10.2/nova--ec2_url=http://10.10.10.2:8773/services/Cloud--keystone_ec2_url=http://10.10.10.2:5000/v2.0/ec2tokens--api_paste_config=/etc/nova/api-paste.ini--libvirt_type=kvm--libvirt_use_virtio_for_bridges=true--start_guests_on_host_boot=true--resume_guests_state_on_host_boot=true# vnc specific configuration--novnc_enabled=true--novncproxy_base_url=http://10.10.10.2:60--vncserver_proxyclient_address=10.10.10.2--vncserver_listen=10.10.10.2# network specific settings--network_manager=nova.network.manager.FlatDHCPManager--public_interface=eth0--flat_interface=eth1--flat_network_bridge=br100--fixed_range=192.168.4.1/27--floating_range=10.10.10.2/27--network_size=32--flat_network_dhcp_start=192.168.4.33--flat_injected=False--force_dhcp_release--iscsi_helper=tgtadm--connection_type=libvirt--root_helper=sudo nova-rootwrap--verbose
创建一个物理卷:sudo pvcreate /dev/sda6
创建一个名为“nova-volumnes”的卷组:sudo vgcreate nova-volumes /dev/sda6
修改 /etc/nova文件夹的属主及 /etc/nova/nova.conf文件的访问权限:sudo chown -R nova:nova /etc/novasudo chmod 644 /etc/nova/nova.conf

进入 /etc/nova/api-paste.ini文件,找到末尾三行:admin_tenant_name = %SERVICE_TENANT_NAME%admin_user = %SERVICE_USER%admin_password = %SERVICE_PASSWORD%
用之前创建的名字进行替换(译者注:和Glance如出一辙,只是这次是nova),编辑完毕如下所示:admin_tenant_name = serviceadmin_user = novaadmin_password = nova
仍然在MySQL数据库进行同步:sudo nova-manage db sync
为实例提供IP池:sudo nova-manage network create private --fixed_range_v4=192.168.4.32/27 --num_networks=1 --bridge=br100 --bridge_interface=eth1 --network_size=32
输出环境变量:export OS_TENANT_NAME=adminexport OS_USERNAME=adminexport OS_PASSWORD=adminexport OS_AUTH_URL="http://localhost:5000/v2.0/"
重启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 nova-consoleauth;
执行下列命令测试nova是否正确安装:sudo nova-manage service listBinary         Host          Zone         Status   State    Updated_Atnova-network   server1       nova         enabled    :-)   2012-04-20 08:58:43nova-scheduler   server1       nova         enabled    :-)   2012-04-20 08:58:44nova-volume      server1       nova         enabled    :-)   2012-04-20 08:58:44nova-compute   server1       nova         enabled    :-)   2012-04-20 08:58:45nova-cert      server1       nova         enabled    :-)   2012-04-20 08:58:43
若所有组件都是微笑,说明nova已经正确安装完毕。

(八)OpenStack管理面板

执行下列命令安装管理面板:sudo apt-get install openstack-dashboard
重启Apache:sudo service apache2 restart
好消息,现在打开浏览器输入server1的IP地址,就可以看到OpenStack的管理面板登陆界面了。默认用户名和密码都是“admin”。在管理面板中,可以进行创建密匙对,创建、编辑安全群组,新建实例,添加卷等操作。具体内容详见后文“OpenStack Dashboard”章节。

(九)Swift
安装Swift最重要的部分是swift的代理、账户、容器及对象服务器:sudo apt-get install swift swift-proxy swift-account swift-container swift-object
随后安装一些支持组件,xfsprogs(支持XFS文件系统)、python.pastedeploy(访问keystone)和curl(测试swift):sudo apt-get install xfsprogs curl python-pastedeploy
Swift存储端有两种方法来创建或制备存储端,一种是采用现有的分区或卷作为存储设备,另一种是创建环回文件(Loopback file)并将当做存储设备。安装时,两种方式自选。
    1. 分区作为存储设备如果在安装OS时为Swift预留了一个分区,你就可以直接使用它。如果该分区没有使用过或仍是空闲空间(比如 /dev/sdb3),就应该把它格式化为xfs文件系统,接着编辑 /etc/fstab中该分区的挂载点(注意:请根据实际情况选择你自定的设备,本教程假定手头未使用也没分区的空闲空间在 /dev/sdb上):sudo fdisk /dev/sdb    Type n for new partition    Type e for extended partion    Choose appropriate partition number ( or go with the default )    Choose first and last sectors to set the hard disk size (or go with defaults)    Note that 83 is the partition type number for Linux    Type w to write changes to the disk
上述命令将创建一个譬如 /dev/sdb3的分区,接着我们便将其格式化为XFS。记得格式化前要先使用命令“sudo fdisk -l”查看当前分区表,确定系统列出的分区含有你即将格式化的目标分区。最后,如果刚才xfsprogs成功安装的话,我们才能够使用以下命令:sudo mkfs.xfs -i size=1024 /dev/sdb3sudo tune2fs -l /dev/sdb3 |grep -i inode
创建一个该分区的挂载点,并命名为“swift_backend”:sudo mkdir /mnt/swift_backend
紧接着编辑 /etc/fstab文件写入如下内容以便系统启动时自动加载这个分区:
/dev/sdb3 /mnt/swift_backend xfs noatime,nodiratime,nobarrier,logbufs=8 0 0

2. 环回文件作为存储设备创建一个空文件作为Swift存储的环回设备,在这里我们使用disk copy命令创建它并命名为swift-disk,还将为其分配1G的磁盘空间。如果空间不够,可以通过改变seek值来增加空间。随后格式化为XFS:sudo dd if=/dev/zero of=/srv/swift-disk bs=1024 count=0 seek=1000000sudo mkfs.xfs -i size=1024 /srv/swift-diskfile /srv/swift-diskswift-disk1: SGI XFS filesystem data (blksz 4096, inosz 1024, v2 dirs)
创建挂载点:sudo mkdir /mnt/swift_backend
写入 /etc/fstab:
/srv/swift-disk /mnt/swift_backend xfs loop,noatime,nodiratime,nobarrier,logbufs=8 0 0

    3. 使用存储挂载存储分区前,需要创建一些设备节点并设置其属主和主群为“Swift”:sudo mount /mnt/swift_backendpushd /mnt/swift_backendsudo mkdir node1 node2 node3 node4popdsudo chown swift.swift /mnt/swift_backend/*for i in {1..4}; do sudo ln -s /mnt/swift_backend/node$i /srv/node$i; done;sudo mkdir -p /etc/swift/account-server /etc/swift/container-server /etc/swift/object-server /srv/node1/device /srv/node2/device /srv/node3/device /srv/node4/devicesudo mkdir /run/swiftsudo chown -L -R swift.swift /etc/swift /srv/node/ /run/swift
为了在系统启动时启动Swift服务,需要把如下两行命令写入 /etc/rc.local里,位置在“exit 0;”之前:sudo mkdir /run/swiftsudo chown swift.swift /run/swift

配置远程备份Rsync用来维护对象副本,许多swift服务都使用它保持对象一致性及进行更新操作。所有存储节点都将享用此配置:
首先编辑 /etc/default/rsync文件:Set RSYNC_ENABLE=true
然后编辑 /etc/rsyncd.conf配置文件,如下所示:# General stuffuid = swiftgid = swiftlog file = /var/log/rsyncd.logpid file = /run/rsyncd.pidaddress = 127.0.0.1
# Account Server replication settingsmax connections = 25path = /srv/node1/read only = falselock file = /run/lock/account6012.lock
max connections = 25path = /srv/node2/read only = falselock file = /run/lock/account6022.lock
max connections = 25path = /srv/node3/read only = falselock file = /run/lock/account6032.lock
max connections = 25path = /srv/node4/read only = falselock file = /run/lock/account6042.lock
# Container server replication settingsmax connections = 25path = /srv/node1/read only = falselock file = /run/lock/container6011.lock
max connections = 25path = /srv/node2/read only = falselock file = /run/lock/container6021.lock
max connections = 25path = /srv/node3/read only = falselock file = /run/lock/container6031.lock
max connections = 25path = /srv/node4/read only = falselock file = /run/lock/container6041.lock
# Object Server replication settingsmax connections = 25path = /srv/node1/read only = falselock file = /run/lock/object6010.lock
max connections = 25path = /srv/node2/read only = falselock file = /run/lock/object6020.lock
max connections = 25path = /srv/node3/read only = falselock file = /run/lock/object6030.lock
max connections = 25path = /srv/node4/read only = falselock file = /run/lock/object6040.lock
最后重新启动服务完成rsync配置:sudo service rsync restart

配置Swift组件详细的配置选项参见http://swift.openstack.org/deployment_guide.html。如果安装了swift-doc包的话,则可以在/usr/share/doc/swift-doc/html目录下直接查看。Python使用paste.deploy管理配置。默认配置选项在段中,后面配置其它特殊项会覆盖默认段中的相关内容。格式如下:THE SYNTAX set option_name = value
以下是一份paste.deploy的配置样例,仅供参考:name1 = globalvaluename2 = globalvaluename3 = globalvalueset name4 = globalvalue
pipeline = myapp
use = egg:mypkg#myappname2 = localvalueset name3 = localvalueset name5 = localvaluename6 = localvalue
创建并编辑 /etc/swift/swift.conf文件,并写入如下配置:# random unique string that can never change (DO NOT LOSE). I'm using 03c9f48da2229770. # od -t x8 -N 8 -A n < /dev/random# The above command can be used to generate random a string.swift_hash_path_suffix = 03c9f48da2229770
特别的,当建立更多的节点时,你需要记住随机串。不要照抄本例,请通过以下命令生成自己的随机字符串:od -t x8 -N 8 -A n < /dev/random

1. 配置Swift代理服务器代理服务器是swift的门卫,它的职责是检测合法性。它将审查:一、请求是否伪造,二、请求使用资源的用户身份。具体操作由keystone之类的认证服务器来协助完成。
创建并编辑 /etc/swift/proxy-server.conf并增加如下内容:bind_port = 8080user = swiftswift_dir = /etc/swift
# Order of execution of modules defined belowpipeline = catch_errors healthcheck cache authtoken keystone proxy-server
use = egg:swift#proxyallow_account_management = trueaccount_autocreate = trueset log_name = swift-proxyset log_facility = LOG_LOCAL0set log_level = INFOset access_log_name = swift-proxyset access_log_facility = SYSLOGset access_log_level = INFOset log_headers = Trueaccount_autocreate = True
use = egg:swift#healthcheck
use = egg:swift#catch_errors
use = egg:swift#memcacheset log_name = cache
paste.filter_factory = keystone.middleware.auth_token:filter_factoryauth_protocol = httpauth_host = 127.0.0.1auth_port = 35357auth_token = adminservice_protocol = httpservice_host = 127.0.0.1service_port = 5000admin_token = adminadmin_tenant_name = serviceadmin_user = swiftadmin_password = swiftdelay_auth_decision = 0
paste.filter_factory = keystone.middleware.swift_auth:filter_factoryoperator_roles = admin, swiftoperatoris_admin = true注意:可以使用apt-get安装swift-doc软件包,安装后许多文档都收录在/usr/share/doc/swift-doc/html下,本配置样例也是如此。

2. 配置Swift账户服务器默认swift容器服务配置文件为 /etc/swift/account-server.conf:bind_ip = 0.0.0.0workers = 2
pipeline = account-server
use = egg:swift#account



所有的account server配置文件都在 /etc/swift/account-server目录中。与 /srv里的设备相对应,我们创建1.conf、2.conf等等文件,并将它们放到/etc/swift/account-server/下。以下是/etc/swift/account-server/1.conf配置文件的内容:devices = /srv/node1mount_check = falsebind_port = 6012user = swiftlog_facility = LOG_LOCAL2
pipeline = account-server
use = egg:swift#account
vm_test_mode = no


对其它设备也是如此,比如/srv/node2、/srv/node3、/srv/node4等,我们分别创建2.conf,3.conf和4.conf与之对应。现在利用1.conf进行复制生成其余文件,并一一设置唯一的绑定端口及本地日志值:sudo cp /etc/swift/account-server/1.conf /etc/swift/account-server/2.confsudo cp /etc/swift/account-server/1.conf /etc/swift/account-server/3.confsudo cp /etc/swift/account-server/1.conf /etc/swift/account-server/4.confsudo sed -i 's/6012/6022/g;s/LOCAL2/LOCAL3/g;s/node1/node2/g' /etc/swift/account-server/2.confsudo sed -i 's/6012/6032/g;s/LOCAL2/LOCAL4/g;s/node1/node3/g' /etc/swift/account-server/3.confsudo sed -i 's/6012/6042/g;s/LOCAL2/LOCAL5/g;s/node1/node4/g' /etc/swift/account-server/4.conf

3. 配置Swift容器服务器默认swift容器服务配置文件为 /etc/swift/container-server.conf:bind_ip = 0.0.0.0workers = 2
pipeline = container-server
use = egg:swift#container




与account-server类似,我们同样创建 /etc/swift/container-server/1.conf等等文件与 /srv设备匹配,这是1.conf文件内容:devices = /srv/node1mount_check = falsebind_port = 6011user = swiftlog_facility = LOG_LOCAL2
pipeline = container-server
use = egg:swift#container
vm_test_mode = no

接着利用1.conf继续创建2.conf、3.conf和4.conf。并修改端口(分别是6021、6031和6041)及本地日志值(LOG_LOCAL3、LOG_LOCAL4和 LOG_LOCAL5)。

4. 配置Swift对象服务器默认swift容器服务配置文件为 /etc/swift/object-server.conf:bind_ip = 0.0.0.0workers = 2
pipeline = object-server
use = egg:swift#object



与account-server和container-server一样,我们同样创建 /etc/swift/object-server/1.conf等等文件与 /srv设备匹配,这是1.conf文件内容:devices = /srv/node1mount_check = falsebind_port = 6010user = swiftlog_facility = LOG_LOCAL2
pipeline = object-server
use = egg:swift#object
vm_test_mode = no


继而利用1.conf继续创建2.conf、3.conf和4.conf。并修改端口(分别是6020、6030和6040)及本地日志值(LOG_LOCAL3、LOG_LOCAL4和 LOG_LOCAL5)。

5. 配置Swift Ring服务器Ring是swift的一个极为重要的组件,它维护着对象的真实物理位置信息,对象的副本及多种设备。创建与对象服务、容器服务和账户服务相对应的ring-builder文件:pushd /etc/swiftsudo swift-ring-builder object.builder create 18 3 1sudo swift-ring-builder container.builder create 18 3 1sudo swift-ring-builder account.builder create 18 3 1注意:执行以上命令时需要在 /etc/swift目录下。命令中的参数指定了分区、副本和小时的数量,用来限制分区多次移动。可以参考man页面中的swift-ring-builder获取更多信息。
现在添加区域以均衡ring服务。命令格式如下:swift-ring-builder <builder_file> add <zone>-<ip_address>:<port>/<device><weight>
执行下列命令:sudo swift-ring-builder object.builder add z1-127.0.0.1:6010/device 1sudo swift-ring-builder object.builder add z2-127.0.0.1:6020/device 1sudo swift-ring-builder object.builder add z3-127.0.0.1:6030/device 1sudo swift-ring-builder object.builder add z4-127.0.0.1:6040/device 1sudo swift-ring-builder object.builder rebalancesudo swift-ring-builder container.builder add z1-127.0.0.1:6011/device 1sudo swift-ring-builder container.builder add z2-127.0.0.1:6021/device 1sudo swift-ring-builder container.builder add z3-127.0.0.1:6031/device 1sudo swift-ring-builder container.builder add z4-127.0.0.1:6041/device 1sudo swift-ring-builder container.builder rebalancesudo swift-ring-builder account.builder add z1-127.0.0.1:6012/device 1sudo swift-ring-builder account.builder add z2-127.0.0.1:6022/device 1sudo swift-ring-builder account.builder add z3-127.0.0.1:6032/device 1sudo swift-ring-builder account.builder add z4-127.0.0.1:6042/device 1sudo swift-ring-builder account.builder rebalance
启动Swift服务使用以下命令启动swift和REST API:sudo swift-init main startsudo swift-init rest start
测试Swift可以通过Swift命令或Horizon提供的Web管理面板测试Swift是否正确运行。首先,将 /etc/swift目录的属主设为swift.swift:sudo chown -R swift.swift /etc/swift
执行以下命令查看是否能得到正确的account、容器数量和存储的对象信息:swift -v -V 2.0 -A http://127.0.0.1:5000/v2.0/ -U service:swift -K swift statStorageURL: http://127.0.0.1:8080/v1/AUTH_c7970080576646c6959ee35970cf3199Auth Token: ba9df200a92d4a5088dcd6b7dcc19c0d   Account: AUTH_c7970080576646c6959ee35970cf3199Containers: 1   Objects: 1   Bytes: 77Accept-Ranges: bytesX-Trans-Id: tx11c64e218f984749bc3ec37ea46280ee

至此,Server1终于安装完毕!



三、Server2

Server2仅运行nova的运算服务。
(一)安装底层OS
安装64位Ubuntu12.04服务器。
(二)配置网络
安装网桥软件:sudo apt-get install bridge-utils
编辑 /etc/network/interfaces文件,如下所示:auto loiface lo inet loopbackauto eth0iface eth0 inet staticaddress 10.10.10.3netmask 255.255.255.0broadcast 10.10.10.255gateway 10.10.10.1dns-nameservers 10.10.8.3auto eth1iface eth1 inet staticaddress 192.168.3.2netmask 255.255.255.0network 192.168.3.0broadcast 192.168.3.255
重启网络:sudo /etc/init.d/networking restart
(三)NTP客户端
安装NTP软件包:sudo apt-get install ntp
编辑 /etc/ntp.conf文件,增加如下内容以同步至server1:server 10.10.10.2
重启NTP服务使配置生效:sudo service ntp restart

(四)Nova组件(仅nova-compute)
安装Nova及其依赖包:sudo apt-get install nova-compute
如下所示,编辑 /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=/run/lock/nova--allow_admin_api=true--use_deprecated_auth=false--auth_strategy=keystone--scheduler_driver=nova.scheduler.simple.SimpleScheduler--s3_host=10.10.10.2--ec2_host=10.10.10.2--rabbit_host=10.10.10.2--cc_host=10.10.10.2--nova_url=http://10.10.10.2:8774/v1.1/--routing_source_ip=10.10.10.2--glance_api_servers=10.10.10.2:9292--image_service=nova.image.glance.GlanceImageService--iscsi_ip_prefix=192.168.4--sql_connection=mysql://novadbadmin:novasecret@10.10.10.2/nova--ec2_url=http://10.10.10.2:8773/services/Cloud--keystone_ec2_url=http://10.10.10.2:5000/v2.0/ec2tokens--api_paste_config=/etc/nova/api-paste.ini--libvirt_type=kvm--libvirt_use_virtio_for_bridges=true--start_guests_on_host_boot=true--resume_guests_state_on_host_boot=true# vnc specific configuration--novnc_enabled=true--novncproxy_base_url=http://10.10.10.2:6080/vnc_auto.html--vncserver_proxyclient_address=10.10.10.2--vncserver_listen=10.10.10.2# network specific settings--network_manager=nova.network.manager.FlatDHCPManager--public_interface=eth0--flat_interface=eth1--flat_network_bridge=br100--fixed_range=192.168.4.1/27--floating_range=10.10.10.2/27--network_size=32--flat_network_dhcp_start=192.168.4.33--flat_injected=False--force_dhcp_release--iscsi_helper=tgtadm--connection_type=libvirt--root_helper=sudo nova-rootwrap--verbose
重新启动Server2上的nova-compute服务:sudo service restart nova-compute
利用如下命令测试云中第二个运算节点(即Server2)是否正常运行:sudo nova-manage service listBinary         Host          Zone         Status   State   Updated_Atnova-network   server1       nova         enabled    :-)   2012-04-20 08:58:43nova-scheduler   server1       nova         enabled    :-)   2012-04-20 08:58:44nova-volume      server1       nova         enabled    :-)   2012-04-20 08:58:44nova-compute   server1       nova         enabled    :-)   2012-04-20 08:58:45nova-cert      server1       nova         enabled    :-)   2012-04-20 08:58:43nova-compute   server2       nova         enabled    :-)   2012-04-21 10:22:27如果看到类似结果,则说明安装已经成功可以使用。

至此,Server2安装完毕!

三、Client1
(一)安装OS
安装64位Ubuntu12.04桌面版。
(二)配置网络
如下所示,编辑 /etc/nova/nova.conf文件:auto lo iface lo inet loopbackauto eth0 iface eth0 inet static address 10.10.10.4 netmask 255.255.255.0 broadcast 10.10.10.255 gateway 10.10.10.1 dns-nameservers 10.10.8.3
(三)NTP客户端
安装NTP软件包:sudo apt-get install -y ntp
编辑 /etc/ntp.conf文件,增加如下内容以同步至server1:server 10.10.10.2
重启NTP服务使配置生效:sudo service ntp restart
(四)客户端工具如前所述,Ubuntu12.04桌面版用来制作镜像,同样它也可以使用nvoa、glance和swift命令行工具管理云。使用下列命令安装我们需要的命令行工具:sudo apt-get install python-novaclient glance-client swift
接着安装qemu-kvm:sudo apt-get install qemu-kvm
输入环境变量,并将其添加进 ~/.bashrc脚本中:export SERVICE_TOKEN=adminexport OS_TENANT_NAME=adminexport OS_USERNAME=adminexport OS_PASSWORD=adminexport OS_AUTH_URL="http://10.10.10.2:5000/v2.0/"export SERVICE_ENDPOINT=http://10.10.10.2:35357/v2.0
运行nova和glance命令查看是否与OpenStack正常连接:nova list+--------------------------------------+------------+--------+----------------------+|                  ID                  |    Name    | Status |      Networks      |+--------------------------------------+------------+--------+----------------------+| 25ee9230-6bb5-4eca-8808-e6b4e0348362 | myinstance | ACTIVE | private=192.168.4.35 || c939cb2c-e662-46e5-bc31-453007442cf9 | myinstance1| ACTIVE | private=192.168.4.36 |+--------------------------------------+------------+--------+----------------------+glance indexID                                 Name          Disk   Container Size                                                   Format   Format------------------------------------ ------------------------------ ----------------65b9f8e1-cde8-40e7-93e3-0866becfb9d4 windows       qcow2    ovf       7580745728f147e666-990c-47e2-9caa-a5a21470cc4e debian      qcow2    ovf       932904960f3a8e689-02ed-460f-a587-dc868576228f opensuse      qcow2    ovf       1072300032aa362fd9-7c28-480b-845c-85a5c38ccd86 centoscli   qcow2    ovf       161153024049f0ec2b-26dd-4644-adcc-2ce047e281c5 ubuntuimage   qcow2    ovf       1471807488
(五)管理面板
打开浏览器输入Server1的IP地址,如:http://10.10.10.2,便进入管理面板的登陆页面。使用用户名“admin”和密码“admin”进行登陆来管理您刚建好的OpenStack吧。

现在,全部安装结束。

页: [1]
查看完整版本: [官版翻译ing]OpenStack云计算快速入门之二:OpenStack安装与配置