OpenStack Hands on lab 2: Swift安装并使用Keystone做身份验证

wangxuesonger 2013-08-01

上一篇文章Openstack Hands on lab 1: keystone安装, 我介绍了如何通过git签出的代码来安装Keystone, 这次我会根据上一次安装的基础, 来继续从git中签出Swift的代码, 并安装在我的测试环境中。所以的设置的根据之前设计的试验环境来做改动的, 你可以根据自己的环境稍作改动。

相关阅读:

Swift介绍

Swift是一个实现了高可用、分布式的基于对象/文件块的存储系统, 是Openstack框架对应Amazon S3的一种实现, 两者诸多类似, Swift甚至提供了兼容的API, 那么我们最终可以用Swift来打造一个低成本、高可用以及安全的文件存储的平台, 实现我们自己的Amazon S3。 Swift是由下列几个子系统组成:

  • Proxy Server
  • Ring
  • Account Server
  • Object Server
  • Container Server

每个子系统中又通过各自的Replication、Updater和Auditor来实现各自的文件同步、更新和校验功能。 这些子系统通过paste来提供Web REST api向客户端提供服务, 所以我们可以很方便的通过API来进行身份验证, 上传或下载文件。 由于我这次试验是为了了解一下Openstack的轮廓, 所以如果以后有空, 我会单独写一篇博客来介绍Swift里更细节的功能以及它们的用途。

准备环境

我这次是准备了两台虚机来安装Swift, 来试验Swift的分布式存储的功能, 所以每个虚机都分配了两个vdisk, 一个用来做系统盘, 一个用来做文件存储盘,在实际使用的环境中, 你还可以在一个节点上部署多个磁盘。 甚至部署更多个节点。

os: Ubuntu server 11.10
hostname: os-objectstore-01
ip address:10.172.7.83
netmask:255.255.255.0
gateway:10.172.7.1
role: proxy-server account-server object-server container-server

os: ubuntu server 11.10
hostname: os-objectstore-02
ip address:10.172.7.84
netmask:255.255.255.0
gateway:10.172.7.1
role: account-server object-server container-server

安装Swift

由于我们准备了两台机器, 所以我们先给这两台机器安装必要的环境和软件。

sudo apt-get install build-essential git python-dev python-setuptools python-pip libxml2-dev libxslt-dev

由于swift现在不需要使用数据库, 我们无需在这台机器上安装Mysql, 接下来, 从git里签出代码

cd ~ 
git clone git://github.com/openstack/swift.git#第二台机器无需安装keystone, 可以省略这部
git clone git://github.com/openstack/keystone.git

huh? 为什么要签出keystone的代码? 嗯, 我们后面会使用到keystone里提供的swift\_auth和auth\_token的功能, 在swift的代码中并没有提供, 为了与时俱进, 我们还需要安装一下keystone. 这样才能和keystone做集成。如果想省事的话, 第二台机器作为存储节点, 无需proxy-server, 所以也不用安装keystone.

安装到python dist package中

cd ~/swift 
sudo pip install -r tools/pip-requires
sudo python setup.py install

#注意, 第二台机器无需这个过程
cd ~/keystone
sudo pip install -r tools/pip-requires
sudo python setup.py install

为每台机器都创建swift用户

sudo groupadd swift
sudo useradd -g swift swift

创建swift的配置文件目录

sudo mkdir /etc/swift

#在/etc/swift下面创建一个swift.conf文件, 内容如下[swift-hash]
swift_hash_path_suffix =9ce957bfb8fbf7eb

刚才创建的swift.conf里的内容需要每个节点都保持一样。

配置Proxy Server节点

我把第一台机器os-objectstore-01作为proxy server节点。 先确保你的系统是否有openssl

openssl version

如果结果显示了版本号的话, 就没有问题, 如果没有的话你需要安装一下。 sudo apt-get install openssl

配置证书

proxy server可以是通过https提供api也可以通过http来提供, 不过这里我们使用https的加密链路。

cd /etc/swift
sudo openssl req -new-x509 -nodes -out cert.crt -keyout cert.key

配置memcached

proxy server需要用到memcache来作为token的临时存储, 所以需要安装和配置一下memcached.

sudo apt-get install memcached
sudo sed -i 's/127.0.0.1/0.0.0.0/g'/etc/memcached.conf
sudo service memcached restart

proxy-server的配置文件

创建一个/etc/swift/proxy-server.conf的配置文件

sudo vi /etc/swift/proxy-server.conf

我这里的配置文件的内容如下, 你可以作为参考, 也可以根据你自己的试验情况稍作修改。你可能需要修改的是keystone的ip地址和端口, 所以你需要修改 auth\_port, auth\_host, service\_host, service\_port等信息。

#proxy-server.conf[DEFAULT]
bind_ip =0.0.0.0
bind_port =8080
swift_dir =/etc/swift
workers =1
user = swift
cert_file =/etc/swift/cert.crt
key_file =/etc/swift/cert.key
log_name = swift
log_facility = LOG_LOCAL0
log_level = DEBUG

[pipeline:main]
pipeline = catch_errors healthcheck cache ratelimit authtoken keystone proxy-server

[app:proxy-server]use= egg:swift#proxy
account_autocreate =true
log_level = DEBUG

[filter:authtoken]
paste.filter_factory = keystone.middleware.auth_token:filter_factory
#the host must point to your keystone server
auth_host =10.172.7.81
auth_port =35357
auth_protocol=http
service_host =10.172.7.81
service_port =5000
admin_token = ADMIN
admin_user = admin
admin_password = openstack
admin_tenant_name = adminTenant

[filter:keystone]
paste.filter_factory = keystone.middleware.swift_auth:filter_factory
operator_roles = adminRole, swiftoperator
is_admin =true
reseller_prefix=AUTH

[filter:healthcheck]use= egg:swift#healthcheck[filter:cache]use= egg:swift#memcache
memcache_servers =127.0.0.1:11211[filter:ratelimit]use= egg:swift#ratelimit[filter:domain_remap]use= egg:swift#domain_remap[filter:catch_errors]use= egg:swift#catch_errors

配置节点信息(Ring)

cd /etc/swift
sudo swift-ring-builder account.builder create 1811
sudo swift-ring-builder container.builder create 1811
sudo swift-ring-builder object.builder create 1811

注意, 我们创建的3个ring的文件, 后面的数字很重要, 这里的18表示分区将被处理为2 ^ 18th, 第二个数字1表示我们有两个zone, 所以这里根据你的zone的数量来定义, 如果和你的实际情况有差异, 你可能会在启动服务的时候报错。 第三个数字1表示限制分区数据的转移的时间, 这里为一小时。

sudo swift-ring-builder account.builder add z1-10.172.7.83:6002/sdb1 100
sudo swift-ring-builder account.builder add z2-10.172.7.84:6002/sdb1 100

sudo swift-ring-builder container.builder add z1-10.172.7.83:6001/sdb1 100
sudo swift-ring-builder container.builder add z2-10.172.7.84:6001/sdb1 100

sudo swift-ring-builder object.builder add z1-10.172.7.83:6000/sdb1 100
sudo swift-ring-builder object.builder add z2-10.172.7.84:6000/sdb1 100

当创建好了Ring文件, 你可以通过下面的命令来验证刚才添加的内容是否正确。

swift-ring-builder account.builder
swift-ring-builder container.builder
swift-ring-builder object.builder

如果都没有问题, 我们就生成最终的Ring

sudo swift-ring-builder account.builder rebalance
sudo swift-ring-builder container.builder rebalance
sudo swift-ring-builder object.builder rebalance

稍微等待一会, 这三个文件就创建好了, 记住刚才所以的操作都是在/etc/swift的目录下进行的。

接下来还有第2页的精彩内容

相关推荐