[关闭]
@Baileys 2015-09-18T07:48:31.000000Z 字数 24066 阅读 884

周报 2015/09/18

科研训练


在网上找到了这篇搭建openstack的教程。目前尚在搭建中。

基于Linux的Openstack搭建

搭建的Server包含了所有的Nova服务:nova-computenova-apinova-volumenova-network以及GlanceSwiftKeystoneHorizon。这台服务器上需要双网卡

(一)安装底层OS

不必多想,请参照下述说明,记住相关参数,选择64位Ubuntu12.04版(已在电脑上安装好15.04版本),进行安装。

创建的第一个用户命名为“localadmin”
为eth0和eth1设定IP及其相关参数
在安装服务包中,仅选择“Openssh-server”作为预装项

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

  1. sudo apt-get update
  2. sudo apt-get upgrade

安装网桥工具bridge-utils

  1. sudo apt-get install bridge-utils

(二)配置网络

编辑/etc/network/interfaces文件,如下所示:

  1. auto lo
  2. iface lo inet loopback
  3. auto eth0
  4. iface eth0 inet static
  5. address 10.10.10.2
  6. netmask 255.255.255.0
  7. broadcast 10.10.10.255
  8. gateway 10.10.10.1
  9. dns-nameservers 10.10.8.3
  10. auto eth1
  11. iface eth1 inet static
  12. address 192.168.3.1
  13. netmask 255.255.255.0
  14. network 192.168.3.0
  15. broadcast 192.168.3.255

随后重新启动网络:

  1. sudo /etc/init.d/networking restart

(三)NTP服务器

安装NTP软件包。这个时间服务器将为所有节点提供支持。OpenStack所有组件的时间都必须同步,于是我们就在Server1上安装NTP服务并且让其他服务器或节点与之保持同步。

  1. sudo apt-get install ntp

打开文件/etc/ntp.conf增加以下三行内容,目的是让本服务器时间与外部服务器时间同步。如果不能访问外网,NTP服务器将使用本机硬件时钟作为第二选择。

  1. server ntp.ubuntu.com
  2. server 127.127.1.0
  3. fudge 127.127.1.0 stratum 10

然后重启NTP使配置生效:

  1. sudo service ntp restart

请确保服务器IP地址可以被DNS解析。如果不能,则在/etc/hosts文件中手工加入。

(四)数据库

MySQL

安装mysql-serverpython-mysqldb包:

  1. sudo apt-get install mysql-server python-mysqldb

为mysql创建root密码,在此使用“mygreatsecret”。随后编辑mysql配置文件/etc/mysql/my.cnf,将绑定地址从127.0.0.1改为0.0.0.0,如下所示:

  1. bind-address = 0.0.0.0

重启MySQL服务器让其开始监听所有端口:

  1. sudo restart mysql

创建数据库

我们将要为novaglancekeystone创建很多东西,各种数据库、表及用户。

创建名为“nova”的数据库:

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

新建一个用户,名为“novadbadmin”:

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

授予novadbadmin用户nova数据库全部权限:

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

novadbadmin创建密码(密码是novasecret,后文类似之处不多言,请详见命令):

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

Glance,还是重复刚才的步骤,首先创建一个名为glance的数据库:

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

然后为这个新建的数据库添加一个用户“glancedbadmin”:

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

接着,授予他本数据库的全部权限:

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

最后一步,为该用户分配密码:

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

keystone。刚才的大循环,至此开始演绎第三遍:

  1. sudo mysql -uroot -pmygreatsecret -e 'CREATE DATABASE keystone;'
  2. sudo mysql -uroot -pmygreatsecret -e 'CREATE USER keystonedbadmin;'
  3. sudo mysql -uroot -pmygreatsecret -e "GRANT ALL PRIVILEGES ON keystone.* TO 'keystonedbadmin'@'%';"
  4. sudo mysql -uroot -pmygreatsecret -e "SET PASSWORD FOR 'keystonedbadmin'@'%' = PASSWORD('keystonesecret')"

现在,MySQL部分的工作结束。

(五)Keystone

KeystoneOpenStack的认证服务。使用以下命令进行安装:

  1. sudo apt-get install keystone python-keystone python-keystoneclient

打开/etc/keystone/keystone.conf文件,将这一行:

  1. admin_token = ADMIN

改为:

  1. admin_token = admin

(本教程中我们将一直使用admin作为令牌)

本例中,我们使用MySQL来存储keystone配置,则将 /etc/keystone/keystone.conf中的这句配置:

  1. connection = sqlite:////var/lib/keystone/keystone.db

换成:

  1. connection = mysql://keystonedbadmin:keystonesecret@10.10.10.2/keystone

然后,重启Keystone

  1. sudo service keystone restart

接着,执行以下命令同步数据库:

  1. sudo keystone-manage db_sync

最后,有些环境变量是OpenStack运行所必须的:

  1. export SERVICE_ENDPOINT="http://localhost:35357/v2.0"
  2. export SERVICE_TOKEN=admin

当然为了避免下次系统重启后,还得将这些变量再次export,最稳妥的办法就是将其写入~/.bashrc中。

创建租间

使用以下命令创建两个租间adminservice

  1. keystone tenant-create --name admin
  2. keystone tenant-create --name service

创建用户

执行以下命令,创建四个用户adminnovaglanceswift

  1. keystone user-create --name admin --pass admin --email admin@foobar.com
  2. keystone user-create --name nova --pass nova --email nova@foobar.com
  3. keystone user-create --name glance --pass glance --email glance@foobar.com
  4. keystone user-create --name swift --pass swift --email swift@foobar.com

创建角色

使用命令创建两个角色,adminMember(译者注:注意是大写M):

  1. keystone role-create --name admin
  2. keystone role-create --name Member

查看租间、用户和角色
刚才建立的租间、用户和角色可以通过如下命令进行查看:
租间列表:

  1. keystone tenant-list
  2. +----------------------------------+--------------------+---------+
  3. | id | name | enabled |
  4. +----------------------------------+--------------------+---------+
  5. | 7f95ae9617cd496888bc412efdceabfd | admin | True |
  6. | c7970080576646c6959ee35970cf3199 | service | True |
  7. +----------------------------------+--------------------+---------+

用户列表:

  1. keystone user-list
  2. +----------------------------------+---------+-------------------+--------+
  3. | id | enabled | email | name |
  4. +----------------------------------+---------+-------------------+--------+
  5. | 1b986cca67e242f38cd6aa4bdec587ca | True | swift@foobar.com | swift |
  6. | 518b51ea133c4facadae42c328d6b77b | True | glance@foobar.com | glance |
  7. | b3de3aeec2544f0f90b9cbfe8b8b7acd | True | admin@foobar.com | admin |
  8. | ce8cd56ca8824f5d845ba6ed015e9494 | True | nova@foobar.com | nova |
  9. +----------------------------------+---------+-------------------+--------+

角色列表:

  1. keystone role-list
  2. +----------------------------------+----------------------+
  3. | id | name |
  4. +----------------------------------+----------------------+
  5. | 2bbe305ad531434991d4281aaaebb700 | admin |
  6. | d983800dd6d54ee3a1b1eb9f2ae3291f | Member |
  7. +----------------------------------+----------------------+

请大家格外注意id列中的值,虽然很长,但随后为用户绑定角色,继而把用户配入租间中时可全靠它们了。

为特定租间中的用户绑定角色

现在我们先为刚刚创建的用户绑定角色,通过如下命令格式可以将特定租间中的特定用户增加角色(译者注:仅是命令格式,随后才是真正执行的命令):

  1. keystone user-role-add --user $USER_ID --role $ROLE_ID --tenant_id $TENANT_ID

其中id字段可以通过keystone user-listkeystone role-listkeystone tenant-list命令获得。

下面开始为“admin”租间中的“admin”用户绑定“admin”角色:

  1. keystone user-role-add --user b3de3aeec2544f0f90b9cbfe8b8b7acd --role 2bbe305ad531434991d4281aaaebb700 --tenant_id 7f95ae9617cd496888bc412efdceabfd

接着执行如下命令,为“service”租间中的“nova”、“glance”、“swift”用户绑定“admin”角色:

  1. keystone user-role-add --user ce8cd56ca8824f5d845ba6ed015e9494 --role 2bbe305ad531434991d4281aaaebb700 --tenant_id c7970080576646c6959ee35970cf3199
  2. keystone user-role-add --user 518b51ea133c4facadae42c328d6b77b --role 2bbe305ad531434991d4281aaaebb700 --tenant_id c7970080576646c6959ee35970cf3199
  3. keystone user-role-add --user 1b986cca67e242f38cd6aa4bdec587ca --role 2bbe305ad531434991d4281aaaebb700 --tenant_id c7970080576646c6959ee35970cf3199

HorizonSwift只“Member”角色即可,所以相应地执行如下命令:

  1. keystone user-role-add --user b3de3aeec2544f0f90b9cbfe8b8b7acd --role d983800dd6d54ee3a1b1eb9f2ae3291f --tenant_id 7f95ae9617cd496888bc412efdceabfd

注意,在执行自己的安装时,请千万按照实际安装中的id进行设置,照抄本文id必将出错!

创建服务

至此,我们该创建授权用户可以享用的服务了,命令格式如下:

  1. keystone service-create --name service_name --type service_type --description 'Description of the service'

安装上述格式,创建nova-computenova-volumeglanceswiftkeystoneec2服务:

  1. keystone service-create --name nova --type compute --description 'OpenStack Compute Service'
  2. keystone service-create --name volume --type volume --description 'OpenStack Volume Service'
  3. keystone service-create --name glance --type image --description 'OpenStack Image Service'
  4. keystone service-create --name swift --type object-store --description 'OpenStack Storage Service'
  5. keystone service-create --name keystone --type identity --description 'OpenStack Identity Service'
  6. keystone service-create --name ec2 --type ec2 --description 'EC2 Service'

刚才创建的每个服务都拥有唯一的id,要查看服务id,使用如下命令即可:

  1. keystone service-list
  2. +----------------------------------+----------+--------------+----------------------------+
  3. | id | name | type | description |
  4. +----------------------------------+----------+--------------+----------------------------+
  5. | 1e93ee6c70f8468c88a5cb1b106753f3 | nova | compute | OpenStack Compute Service |
  6. | 28fd92ffe3824004996a3e04e059d875 | ec2 | ec2 | EC2 Service |
  7. | 7d4ec192dfa1456996f0f4c47415c7a7 | keystone | identity | OpenStack Identity Service |
  8. | 96f35e1112b143e59d5cd5d0e6a8b22d | swift | object-store | OpenStack Storage Service |
  9. | f38f4564ff7b4e43a52b2f5c1b75e5fa | volume | volume | OpenStack Volume Service |
  10. | fbafab6edcab467bb734380ce6be3561 | glance | image | OpenStack Image Service |
  11. +----------------------------------+----------+--------------+----------------------------+

这些id将被用于定义所属服务的入口(endpoint)。

创建入口

创建服务入口的命令格式是:

  1. keystone endpoint-create --region region_name --service_id service_id --publicurl public_url --adminurl admin_url --internalurl internal_url

使用如下命令创建nova-compute入口:

  1. 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入口:

  1. 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入口:

  1. 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入口:

  1. 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入口:

  1. 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入口:

  1. 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

  1. sudo apt-get install glance glance-api glance-client glance-common glance-
  2. registry python-glance

配置Glance服务
Glance默认使用SQLiteMySQLPostgreSQL也可以很好地与Glance工作。
打开 /etc/glance/glance-api-paste.ini文件并在末尾编辑如下内容:

  1. admin_tenant_name = %SERVICE_TENANT_NAME%
  2. admin_user = %SERVICE_USER%
  3. admin_password = %SERVICE_PASSWORD%

这些值需要用刚才我们安装中的实际值进行替换,admin_tenant_name应该是“service”,admin_user这里是“glance”、admin_password是“glance”。

编辑完这三行应该是如下的样子:

  1. admin_tenant_name = service
  2. admin_user = glance
  3. admin_password = glance

接着再打开 /etc/glance/glance-registry-paste.ini文件,也如上述操作一样在文件尾部进行同样的编辑。
然后,修改glance数据库连接为MySQL,编辑 /etc/glance/glance-registry.conf,找到“sql_connection =”这句作如下修改:

  1. sql_connection = mysql://glancedbadmin:glancesecret@10.10.10.2/glance

紧接着还是这份文件,在底部增加如下设置,目的是让glance使用keystone授权:

  1. [paste_deploy]
  2. flavor = keystone

打开 /etc/glance/glance-api.conf文件,在文件末尾增加如下配置:

  1. [paste_deploy]
  2. flavor = keystone

MySQL数据库中创建glance schema,进行同步:

  1. sudo glance-manage version_control 0
  2. sudo glance-manage db_sync

上述改动全部完成后,重启glance-apiglance-registry服务:

  1. sudo restart glance-api
  2. sudo restart glance-registry

设置如下环境变量,你也可以将其写入 ~/.bashrc中:

  1. export SERVICE_TOKEN=admin
  2. export OS_TENANT_NAME=admin
  3. export OS_USERNAME=admin
  4. export OS_PASSWORD=admin
  5. export OS_AUTH_URL="http://localhost:5000/v2.0/"
  6. export SERVICE_ENDPOINT=http://localhost:35357/v2.0

现在我们可以使用这个命令来测试glance是否正确安装:

  1. glance index

如果这条命令没有返回任何结果,则说明glance已经正确安装完毕,并与Keystone正常通信。若是稍微探究一下的话,上述命令其实有返回值,正确安装情况下的返回值是0,可以使用echo $?进行查看。

Glance正确配置且使用keystone作为授权机制后,我们便可以上传镜像到glance了,相关内容详见后文中的“镜像管理(Image Management)”。

(七)Nova

先使用如下命令安装nova及其相关组件:

  1. 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

  1. --dhcpbridge_flagfile=/etc/nova/nova.conf
  2. --dhcpbridge=/usr/bin/nova-dhcpbridge
  3. --logdir=/var/log/nova
  4. --state_path=/var/lib/nova
  5. --lock_path=/run/lock/nova
  6. --allow_admin_api=true
  7. --use_deprecated_auth=false
  8. --auth_strategy=keystone
  9. --scheduler_driver=nova.scheduler.simple.SimpleScheduler
  10. --s3_host=10.10.10.2
  11. --ec2_host=10.10.10.2
  12. --rabbit_host=10.10.10.2
  13. --cc_host=10.10.10.2
  14. --nova_url=http://10.10.10.2:8774/v1.1/
  15. --routing_source_ip=10.10.10.2
  16. --glance_api_servers=10.10.10.2:9292
  17. --image_service=nova.image.glance.GlanceImageService
  18. --iscsi_ip_prefix=192.168.4
  19. --sql_connection=mysql://novadbadmin:novasecret@10.10.10.2/nova
  20. --ec2_url=http://10.10.10.2:8773/services/Cloud
  21. --keystone_ec2_url=http://10.10.10.2:5000/v2.0/ec2tokens
  22. --api_paste_config=/etc/nova/api-paste.ini
  23. --libvirt_type=kvm
  24. --libvirt_use_virtio_for_bridges=true
  25. --start_guests_on_host_boot=true
  26. --resume_guests_state_on_host_boot=true
  27. # vnc specific configuration
  28. --novnc_enabled=true
  29. --novncproxy_base_url=http://10.10.10.2:60
  30. --vncserver_proxyclient_address=10.10.10.2
  31. --vncserver_listen=10.10.10.2
  32. # network specific settings
  33. --network_manager=nova.network.manager.FlatDHCPManager
  34. --public_interface=eth0
  35. --flat_interface=eth1
  36. --flat_network_bridge=br100
  37. --fixed_range=192.168.4.1/27
  38. --floating_range=10.10.10.2/27
  39. --network_size=32
  40. --flat_network_dhcp_start=192.168.4.33
  41. --flat_injected=False
  42. --force_dhcp_release
  43. --iscsi_helper=tgtadm
  44. --connection_type=libvirt
  45. --root_helper=sudo nova-rootwrap
  46. --verbose

创建一个物理卷:

  1. sudo pvcreate /dev/sda6

创建一个名为“nova-volumnes”的卷组:

  1. sudo vgcreate nova-volumes /dev/sda6

修改 /etc/nova文件夹的属主及 /etc/nova/nova.conf文件的访问权限:

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

进入 /etc/nova/api-paste.ini文件,找到末尾三行:

  1. admin_tenant_name = %SERVICE_TENANT_NAME%
  2. admin_user = %SERVICE_USER%
  3. admin_password = %SERVICE_PASSWORD%

用之前创建的名字进行替换(译者注:和Glance如出一辙,只是这次是nova),编辑完毕如下所示:

  1. admin_tenant_name = service
  2. admin_user = nova
  3. admin_password = nova

仍然在MySQL数据库进行同步:

  1. sudo nova-manage db sync

为实例提供IP池:

  1. 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

输出环境变量:

  1. export OS_TENANT_NAME=admin
  2. export OS_USERNAME=admin
  3. export OS_PASSWORD=admin
  4. export OS_AUTH_URL="http://localhost:5000/v2.0/"

重启nova服务:

  1. 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是否正确安装:

  1. sudo nova-manage service list
  2. Binary Host Zone Status State Updated_At
  3. nova-network server1 nova enabled :-) 2012-04-20 08:58:43
  4. nova-scheduler server1 nova enabled :-) 2012-04-20 08:58:44
  5. nova-volume server1 nova enabled :-) 2012-04-20 08:58:44
  6. nova-compute server1 nova enabled :-) 2012-04-20 08:58:45
  7. nova-cert server1 nova enabled :-) 2012-04-20 08:58:43

若所有组件都是微笑,说明nova已经正确安装完毕。

(八)OpenStack管理面板

执行下列命令安装管理面板:

  1. sudo apt-get install openstack-dashboard

重启Apache

  1. sudo service apache2 restart

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

(九)Swift

安装Swift

最重要的部分是swift的代理、账户、容器及对象服务器:

  1. sudo apt-get install swift swift-proxy swift-account swift-container swift-object

随后安装一些支持组件,xfsprogs(支持XFS文件系统)、python.pastedeploy(访问keystone)和curl(测试swift):

  1. sudo apt-get install xfsprogs curl python-pastedeploy

Swift存储端

有两种方法来创建或制备存储端,一种是采用现有的分区或卷作为存储设备,另一种是创建环回文件(Loopback file)并将当做存储设备。安装时,两种方式自选。

  1. sudo fdisk /dev/sdb
  2. Type n for new partition
  3. Type e for extended partion
  4. Choose appropriate partition number ( or go with the default )
  5. Choose first and last sectors to set the hard disk size (or go with defaults)
  6. Note that 83 is the partition type number for Linux
  7. Type w to write changes to the disk

上述命令将创建一个譬如 /dev/sdb3的分区,接着我们便将其格式化为XFS。记得格式化前要先使用命令“sudo fdisk -l”查看当前分区表,确定系统列出的分区含有你即将格式化的目标分区。最后,如果刚才xfsprogs成功安装的话,我们才能够使用以下命令:

  1. sudo mkfs.xfs -i size=1024 /dev/sdb3
  2. sudo tune2fs -l /dev/sdb3 |grep -i inode

创建一个该分区的挂载点,并命名为“swift_backend”:

  1. sudo mkdir /mnt/swift_backend

紧接着编辑 /etc/fstab文件写入如下内容以便系统启动时自动加载这个分区:

  1. /dev/sdb3 /mnt/swift_backend xfs noatime,nodiratime,nobarrier,logbufs=8 0 0
  1. sudo dd if=/dev/zero of=/srv/swift-disk bs=1024 count=0 seek=1000000
  2. sudo mkfs.xfs -i size=1024 /srv/swift-disk
  3. file /srv/swift-disk
  4. swift-disk1: SGI XFS filesystem data (blksz 4096, inosz 1024, v2 dirs)

创建挂载点:

  1. sudo mkdir /mnt/swift_backend

写入 /etc/fstab

  1. /srv/swift-disk /mnt/swift_backend xfs loop,noatime,nodiratime,nobarrier,logbufs=8 0 0
  1. sudo mount /mnt/swift_backend
  2. pushd /mnt/swift_backend
  3. sudo mkdir node1 node2 node3 node4
  4. popd
  5. sudo chown swift.swift /mnt/swift_backend/*
  6. for i in {1..4}; do sudo ln -s /mnt/swift_backend/node$i /srv/node$i; done;
  7. sudo mkdir -p /etc/swift/account-server /etc/swift/container-server /etc/
  8. swift/object-server /srv/node1/device /srv/node2/device /srv/node3/device /srv/node4/device
  9. sudo mkdir /run/swift
  10. sudo chown -L -R swift.swift /etc/swift /srv/node[1-4]/ /run/swift

为了在系统启动时启动Swift服务,需要把如下两行命令写入 /etc/rc.local里,位置在“exit 0;”之前:

  1. sudo mkdir /run/swift
  2. sudo chown swift.swift /run/swift

配置远程备份
Rsync用来维护对象副本,许多swift服务都使用它保持对象一致性及进行更新操作。所有存储节点都将享用此配置:

首先编辑 /etc/default/rsync文件:

  1. Set RSYNC_ENABLE=true

然后编辑 /etc/rsyncd.conf配置文件,如下所示:

  1. # General stuff
  2. uid = swift
  3. gid = swift
  4. log file = /var/log/rsyncd.log
  5. pid file = /run/rsyncd.pid
  6. address = 127.0.0.1
  7. # Account Server replication settings
  8. [account6012]
  9. max connections = 25
  10. path = /srv/node1/
  11. read only = false
  12. lock file = /run/lock/account6012.lock
  13. [account6022]
  14. max connections = 25
  15. path = /srv/node2/
  16. read only = false
  17. lock file = /run/lock/account6022.lock
  18. [account6032]
  19. max connections = 25
  20. path = /srv/node3/
  21. read only = false
  22. lock file = /run/lock/account6032.lock
  23. [account6042]
  24. max connections = 25
  25. path = /srv/node4/
  26. read only = false
  27. lock file = /run/lock/account6042.lock
  28. # Container server replication settings
  29. [container6011]
  30. max connections = 25
  31. path = /srv/node1/
  32. read only = false
  33. lock file = /run/lock/container6011.lock
  34. [container6021]
  35. max connections = 25
  36. path = /srv/node2/
  37. read only = false
  38. lock file = /run/lock/container6021.lock
  39. [container6031]
  40. max connections = 25
  41. path = /srv/node3/
  42. read only = false
  43. lock file = /run/lock/container6031.lock
  44. [container6041]
  45. max connections = 25
  46. path = /srv/node4/
  47. read only = false
  48. lock file = /run/lock/container6041.lock
  49. # Object Server replication settings
  50. [object6010]
  51. max connections = 25
  52. path = /srv/node1/
  53. read only = false
  54. lock file = /run/lock/object6010.lock
  55. [object6020]
  56. max connections = 25
  57. path = /srv/node2/
  58. read only = false
  59. lock file = /run/lock/object6020.lock
  60. [object6030]
  61. max connections = 25
  62. path = /srv/node3/
  63. read only = false
  64. lock file = /run/lock/object6030.lock
  65. [object6040]
  66. max connections = 25
  67. path = /srv/node4/
  68. read only = false
  69. lock file = /run/lock/object6040.lock

最后重新启动服务完成rsync配置:

  1. sudo service rsync restart

配置Swift组件
详细的配置选项参见http://swift.openstack.org/deployment_guide.html。如果安装了swift-doc包的话,则可以在/usr/share/doc/swift-doc/html目录下直接查看。Python使用paste.deploy管理配置。默认配置选项在[DEFAULT]段中,后面配置其它特殊项会覆盖默认段中的相关内容。格式如下:

  1. THE SYNTAX set option_name = value

以下是一份paste.deploy的配置样例,仅供参考:

  1. [DEFAULT]
  2. name1 = globalvalue
  3. name2 = globalvalue
  4. name3 = globalvalue
  5. set name4 = globalvalue
  6. [pipeline:main]
  7. pipeline = myapp
  8. [app:myapp]
  9. use = egg:mypkg#myapp
  10. name2 = localvalue
  11. set name3 = localvalue
  12. set name5 = localvalue
  13. name6 = localvalue

创建并编辑 /etc/swift/swift.conf文件,并写入如下配置:

  1. [swift-hash]
  2. # random unique string that can never change (DO NOT LOSE). I'm using 03c9f48da2229770.
  3. # od -t x8 -N 8 -A n < /dev/random
  4. # The above command can be used to generate random a string.
  5. swift_hash_path_suffix = 03c9f48da2229770

特别的,当建立更多的节点时,你需要记住随机串。不要照抄本例,请通过以下命令生成自己的随机字符串:

  1. od -t x8 -N 8 -A n < /dev/random

1. 配置Swift代理服务器

代理服务器是swift的门卫,它的职责是检测合法性。它将审查:一、请求是否伪造,二、请求使用资源的用户身份。具体操作由keystone之类的认证服务器来协助完成。
创建并编辑 /etc/swift/proxy-server.conf并增加如下内容:

  1. [DEFAULT]
  2. bind_port = 8080
  3. user = swift
  4. swift_dir = /etc/swift
  5. [pipeline:main]
  6. # Order of execution of modules defined below
  7. pipeline = catch_errors healthcheck cache authtoken keystone proxy-server
  8. [app:proxy-server]
  9. use = egg:swift#proxy
  10. allow_account_management = true
  11. account_autocreate = true
  12. set log_name = swift-proxy
  13. set log_facility = LOG_LOCAL0
  14. set log_level = INFO
  15. set access_log_name = swift-proxy
  16. set access_log_facility = SYSLOG
  17. set access_log_level = INFO
  18. set log_headers = True
  19. account_autocreate = True
  20. [filter:healthcheck]
  21. use = egg:swift#healthcheck
  22. [filter:catch_errors]
  23. use = egg:swift#catch_errors
  24. [filter:cache]
  25. use = egg:swift#memcache
  26. set log_name = cache
  27. [filter:authtoken]
  28. paste.filter_factory = keystone.middleware.auth_token:filter_factory
  29. auth_protocol = http
  30. auth_host = 127.0.0.1
  31. auth_port = 35357
  32. auth_token = admin
  33. service_protocol = http
  34. service_host = 127.0.0.1
  35. service_port = 5000
  36. admin_token = admin
  37. admin_tenant_name = service
  38. admin_user = swift
  39. admin_password = swift
  40. delay_auth_decision = 0
  41. [filter:keystone]
  42. paste.filter_factory = keystone.middleware.swift_auth:filter_factory
  43. operator_roles = admin, swiftoperator
  44. is_admin = true

注意:可以使用apt-get安装swift-doc软件包,安装后许多文档都收录在/usr/share/doc/swift-doc/html下,本配置样例也是如此。

2. 配置Swift账户服务器

默认swift容器服务配置文件为 /etc/swift/account-server.conf

  1. [DEFAULT]
  2. bind_ip = 0.0.0.0
  3. workers = 2
  4. [pipeline:main]
  5. pipeline = account-server
  6. [app:account-server]
  7. use = egg:swift#account
  8. [account-replicator]
  9. [account-auditor]
  10. [account-reaper]

所有的account server配置文件都在 /etc/swift/account-server目录中。与 /srv里的设备相对应,我们创建1.conf2.conf等等文件,并将它们放到/etc/swift/account-server/下。以下是/etc/swift/account-server/1.conf配置文件的内容:

  1. [DEFAULT]
  2. devices = /srv/node1
  3. mount_check = false
  4. bind_port = 6012
  5. user = swift
  6. log_facility = LOG_LOCAL2
  7. [pipeline:main]
  8. pipeline = account-server
  9. [app:account-server]
  10. use = egg:swift#account
  11. [account-replicator]
  12. vm_test_mode = no
  13. [account-auditor]
  14. [account-reaper]

对其它设备也是如此,比如/srv/node2/srv/node3/srv/node4等,我们分别创建2.conf3.conf4.conf与之对应。现在利用1.conf进行复制生成其余文件,并一一设置唯一的绑定端口及本地日志值:

  1. sudo cp /etc/swift/account-server/1.conf /etc/swift/account-server/2.conf
  2. sudo cp /etc/swift/account-server/1.conf /etc/swift/account-server/3.conf
  3. sudo cp /etc/swift/account-server/1.conf /etc/swift/account-server/4.conf
  4. sudo sed -i 's/6012/6022/g;s/LOCAL2/LOCAL3/g;s/node1/node2/g' /etc/swift/account-server/2.conf
  5. sudo sed -i 's/6012/6032/g;s/LOCAL2/LOCAL4/g;s/node1/node3/g' /etc/swift/account-server/3.conf
  6. sudo 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

  1. [DEFAULT]
  2. bind_ip = 0.0.0.0
  3. workers = 2
  4. [pipeline:main]
  5. pipeline = container-server
  6. [app:container-server]
  7. use = egg:swift#container
  8. [container-replicator]
  9. [container-updater]
  10. [container-auditor]
  11. [container-sync]

account-server类似,我们同样创建 /etc/swift/container-server/1.conf等等文件与 /srv设备匹配,这是1.conf文件内容:

  1. [DEFAULT]
  2. devices = /srv/node1
  3. mount_check = false
  4. bind_port = 6011
  5. user = swift
  6. log_facility = LOG_LOCAL2
  7. [pipeline:main]
  8. pipeline = container-server
  9. [app:container-server]
  10. use = egg:swift#container
  11. [container-replicator]
  12. vm_test_mode = no
  13. [container-updater]

接着利用1.conf继续创建2.conf3.conf4.conf。并修改端口(分别是602160316041)及本地日志值(LOG_LOCAL3LOG_LOCAL4LOG_LOCAL5)。

4. 配置Swift对象服务器

默认swift容器服务配置文件为 /etc/swift/object-server.conf

  1. [DEFAULT]
  2. bind_ip = 0.0.0.0
  3. workers = 2
  4. [pipeline:main]
  5. pipeline = object-server
  6. [app:object-server]
  7. use = egg:swift#object
  8. [object-replicator]
  9. [object-updater]
  10. [object-auditor]

account-servercontainer-server一样,我们同样创建 /etc/swift/object-server/1.conf等等文件与 /srv设备匹配,这是1.conf文件内容:

  1. [DEFAULT]
  2. devices = /srv/node1
  3. mount_check = false
  4. bind_port = 6010
  5. user = swift
  6. log_facility = LOG_LOCAL2
  7. [pipeline:main]
  8. pipeline = object-server
  9. [app:object-server]
  10. use = egg:swift#object
  11. [object-replicator]
  12. vm_test_mode = no
  13. [object-updater]
  14. [object-auditor]

继而利用1.conf继续创建2.conf3.conf4.conf。并修改端口(分别是602060306040)及本地日志值(LOG_LOCAL3LOG_LOCAL4LOG_LOCAL5)。

5. 配置Swift Ring服务器

Ringswift的一个极为重要的组件,它维护着对象的真实物理位置信息,对象的副本及多种设备。创建与对象服务、容器服务和账户服务相对应的ring-builder文件:

  1. pushd /etc/swift
  2. sudo swift-ring-builder object.builder create 18 3 1
  3. sudo swift-ring-builder container.builder create 18 3 1
  4. sudo swift-ring-builder account.builder create 18 3 1

注意:执行以上命令时需要在 /etc/swift目录下。
命令中的参数指定了分区、副本和小时的数量,用来限制分区多次移动。可以参考man页面中的swift-ring-builder获取更多信息。

现在添加区域以均衡ring服务。命令格式如下:

  1. swift-ring-builder add -:/

执行下列命令:

  1. sudo swift-ring-builder object.builder add z1-127.0.0.1:6010/device 1
  2. sudo swift-ring-builder object.builder add z2-127.0.0.1:6020/device 1
  3. sudo swift-ring-builder object.builder add z3-127.0.0.1:6030/device 1
  4. sudo swift-ring-builder object.builder add z4-127.0.0.1:6040/device 1
  5. sudo swift-ring-builder object.builder rebalance
  6. sudo swift-ring-builder container.builder add z1-127.0.0.1:6011/device 1
  7. sudo swift-ring-builder container.builder add z2-127.0.0.1:6021/device 1
  8. sudo swift-ring-builder container.builder add z3-127.0.0.1:6031/device 1
  9. sudo swift-ring-builder container.builder add z4-127.0.0.1:6041/device 1
  10. sudo swift-ring-builder container.builder rebalance
  11. sudo swift-ring-builder account.builder add z1-127.0.0.1:6012/device 1
  12. sudo swift-ring-builder account.builder add z2-127.0.0.1:6022/device 1
  13. sudo swift-ring-builder account.builder add z3-127.0.0.1:6032/device 1
  14. sudo swift-ring-builder account.builder add z4-127.0.0.1:6042/device 1
  15. sudo swift-ring-builder account.builder rebalance

启动Swift服务
使用以下命令启动swiftREST API

  1. sudo swift-init main start
  2. sudo swift-init rest start

测试Swift
可以通过Swift命令或Horizon提供的Web管理面板测试Swift是否正确运行。
首先,将 /etc/swift目录的属主设为swift.swift

  1. sudo chown -R swift.swift /etc/swift

执行以下命令查看是否能得到正确的account、容器数量和存储的对象信息:

  1. swift -v -V 2.0 -A http://127.0.0.1:5000/v2.0/ -U service:swift -K swift stat
  2. StorageURL: http://127.0.0.1:8080/v1/AUTH_c7970080576646c6959ee35970cf3199
  3. Auth Token: ba9df200a92d4a5088dcd6b7dcc19c0d
  4. Account: AUTH_c7970080576646c6959ee35970cf3199
  5. Containers: 1
  6. Objects: 1
  7. Bytes: 77
  8. Accept-Ranges: bytes
  9. X-Trans-Id: tx11c64e218f984749bc3ec37ea46280ee

这样,我们的Openstack Server就搭建好了

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注