wangxuesonger 2013-08-01
上一篇文章Openstack Hands on lab 1: keystone安装, 我介绍了如何通过git签出的代码来安装Keystone, 这次我会根据上一次安装的基础, 来继续从git中签出Swift的代码, 并安装在我的测试环境中。所以的设置的根据之前设计的试验环境来做改动的, 你可以根据自己的环境稍作改动。
相关阅读:
Swift是一个实现了高可用、分布式的基于对象/文件块的存储系统, 是Openstack框架对应Amazon S3的一种实现, 两者诸多类似, Swift甚至提供了兼容的API, 那么我们最终可以用Swift来打造一个低成本、高可用以及安全的文件存储的平台, 实现我们自己的Amazon S3。 Swift是由下列几个子系统组成:
每个子系统中又通过各自的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
由于我们准备了两台机器, 所以我们先给这两台机器安装必要的环境和软件。
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.
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里的内容需要每个节点都保持一样。
我把第一台机器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
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
创建一个/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
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页的精彩内容: