swift是openstack的存储项目。这里我用了2台机子
Swift | Host:swift1 ip:192.168.0.110 | Proxy-server, account-server, container-server, object-server |
Host:swift2 ip:192.168.0.111 | account-server, container-server, object-server |
sudo apt-get install –y keystone // 如果要和keystone做集成,swift需要使用到keystone里提供的swift_auth和auth_token的功能,不过只需在有proxy-server的服务器上装就可以了。
sudo apt-get install –y swift swift-proxy memcached swift-account swift-container swift-object
sudo groupadd swift
sudo useradd -g swift swift //为每台机器都创建swift用户
在/etc/swift下面创建一个swift.conf文件,每个节点都应该一样。内容如下:
[swift-hash]
swift_hash_path_suffix =123456789
openssl version //确定有没有openssl,如果出现版本就说明装了
配置memcached。Swift自己是没有cache机制的,所以会用到memcached,一个高性能的分布式内存对象缓存系统。proxy server需要用到memcache来作为token的临时存储, 所以需要安装和配置一下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文件配置swift的proxy-server
[DEFAULT]
bind_port = 8080
swift_dir = /etc/swift
workers = 1
user = swift
log_level = DEBUG
[pipeline:main]
pipeline = catch_errors healthcheck cache ratelimit authtoken keystone proxy-server
[app:proxy-server]
account_autocreate = true
use = egg:swift#proxy
[filter:healthcheck]
use = egg:swift#healthcheck
[filter:cache]
use = egg:swift#memcache
[filter:ratelimit]
use = egg:swift#ratelimit
[filter:domain_remap]
use = egg:swift#domain_remap
[filter:catch_errors]
use = egg:swift#catch_errors
#[filter:proxy-logging]
#use = egg:swift#proxy_logging
[filter:keystone]
paste.filter_factory = keystone.middleware.swift_auth:filter_factory
operator_roles = admin,swiftoperator
[filter:authtoken]
paste.filter_factory = keystone.middleware.auth_token:filter_factory
auth_host = 192.168.0.106
auth_port = 35357
auth_protocol = http
auth_uri = http://192.168.0.106:5000/
admin_tenant_name = adminTenant
admin_user = admin
admin_password = openstack
admin_token=ADMIN
delay_auth_decision = 1
配置映射信息(Ring)。ring决定数据在集群中的位置。帐号数据库、容器数据库和单个对象的环都有独立的环管理,这段配置一定要在/etc/swift/目录下完成。
创建account、container、object的ring信息
cd /etc/swift
sudo swift-ring-builder account.builder create 18 1 1
sudo swift-ring-builder container.builder create 18 1 1
sudo swift-ring-builder object.builder create 18 1 1
创建好后,会在/etc/swift下出现account.builder、contaier.builder和object.builder三个builder文件,同时还会有个backups目录,该目录下也会有三个相应的builder文件。
为存储节点添加物理映射信息
sudo swift-ring-builder account.builder add z1-192.168.0.110:6002/sdb1 100
sudo swift-ring-builder container.builder add z1-192.168. 0.110:6001/sdb1 100
sudo swift-ring-builder object.builder add z1-192.168. 0.110:6000/sdb1 100
sudo swift-ring-builder account.builder add z2-192.168. 0.111:6002/sdb1 100
sudo swift-ring-builder container.builder add z2-192.168. 0.111:6001/sdb1 100
sudo swift-ring-builder object.builder add z2-192.168. 0.111:6000/sdb1 100
生成最终的Ring
sudo swift-ring-builder account.builder rebalance
sudo swift-ring-builder container.builder rebalance
sudo swift-ring-builder object.builder rebalance
当创建好了Ring文件, 可以通过下面的命令来验证刚才添加的内容是否正确。
swift-ring-builder account.builder
swift-ring-builder container.builder
swift-ring-builder object.builder
我们的存储节点在/dev/sdb/上,先对这块盘进行分区并格式化为xfs格式, 然后挂载在/srv/node/sdb1这个目录上。Swift的设计是可以使用最普通的文件系统,只要支持扩展属性就可以。一些文件系统,像ext3默认的xattrs属性是关闭着的,Openstack项目组推荐xfs。
sudo apt-get install xfsprogs //安装xfs文件系统
sudo fdisk /dev/sdb //#然后一次选择 n, p, 1, 默认, 默认, w
sudo mkfs.xfs -i size=1024 /dev/sdb1
sudo –s //切换到root
echo "/dev/sdb1 /srv/node/sdb1 xfsnoatime,nodiratime,nobarrier,logbufs=8 0 0" >> /etc/fstab
exit
sudo mkdir -p /srv/node/sdb1
sudo mount /srv/node/sdb1
sudo chown -R swift:swift /srv/node
在/etc下创建rsyncd.conf文件uid = swift
gid = swift
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
address = 192.168.0.110
[account]
max connections = 2
path = /srv/node/
read only = false
lock file = /var/lock/account.lock
[container]
max connections = 2
path = /srv/node/
read only = false
lock file = /var/lock/container.lock
[object]
max connections = 2
path = /srv/node/
read only = false
lock file = /var/lock/object.lock
sudo sed -i 's/RSYNC_ENABLE=false/RSYNC_ENABLE=true/g'/etc/default/rsync //设置rsync开机启动
sudo service rsync start //启动rsync
配置account-server.conf
sudo vi /etc/swift/account-server.conf
[DEFAULT]
bind_port = 6002
#workers = 2
user = swift
swift_dir = /etc/swift
devices = /srv/node
mount_check = false
log_facility = LOG_LOCAL2
[pipeline:main]
pipeline = recon account-server
[app:account-server]
use = egg:swift#account
[filter:recon]
use = egg:swift#recon
[account-replicator]
vm_test_mode = yes
[account-auditor]
[account-reaper]
配置/etc/swift/container-server.conf
[DEFAULT]
bind_port = 6001
user = swift
swift_dir = /etc/swift
devices = /srv/node
mount_check = false
log_facility = LOG_LOCAL2
[pipeline:main]
pipeline = recon container-server
[app:container-server]
use = egg:swift#container
[filter:recon]
use = egg:swift#recon
[container-replicator]
vm_test_mode = yes
[container-updater]
[container-auditor]
[container-sync]
配置/etc/swift/object-server.conf
[DEFAULT]
bind_port = 6000
user = swift
swift_dir = /etc/swift
devices = /srv/node
mount_check = false
log_facility = LOG_LOCAL2
[pipeline:main]
pipeline = recon object-server
[app:object-server]
use = egg:swift#object
[filter:recon]
use = egg:swift#recon
[object-replicator]
vm_test_mode = yes
[object-updater]
[object-auditor]
(每个存储节点都是这么配置,只需改动/etc/rsyncd.conf的存储节点ip)
2、第二个存储节点配置(swift2)
存储节点无需安装proxy-server和memcached。
sudo apt-get install –y openssh-server
sudo apt-get install –y swift-accountswift-container swift-object
sudo groupadd swift
sudo useradd -g swift swift //为每台机器都创建swift用户
在/etc/swift下面创建一个swift.conf文件,每个节点都应该一样。内容如下:[swift-hash]
swift_hash_path_suffix =123456789
将存储磁盘格式成xfs格式
sudo apt-get install xfsprogs //安装xfs文件系统
sudo fdisk /dev/sdb //#然后一次选择 n, p, 1, 默认, 默认, w
sudo mkfs.xfs -i size=1024 /dev/sdb1
sudo –s //切换到root
echo "/dev/sdb1 /srv/node/sdb1 xfsnoatime,nodiratime,nobarrier,logbufs=8 0 0" >> /etc/fstab
exit
sudo mkdir -p /srv/node/sdb1
sudo mount /srv/node/sdb1
sudo chown -R swift:swift /srv/node
然后将第一个存储节点的/etc/swift目录下的swift.conf、account-server.conf、container-server.conf、object-server.conf、account.ring.gz、container.ring.gz、object.ring.gz这些文件都copy到该节点的/etc/swift目录下, 如果文件夹不存在, 可以创建一下 mkdir /etc/swift。
创建/etc/rsyncd.conf文件。将adress的值改成该存储节点的ip。uid = swift
gid = swift
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
address = 192.168.0.111
[account]
max connections = 2
path = /srv/node/
read only = false
lock file = /var/lock/account.lock
[container]
max connections = 2
path = /srv/node/
read only = false
lock file = /var/lock/container.lock
[object]
max connections = 2
path = /srv/node/
read only = false
lock file = /var/lock/object.lock
sudo sed -i's/RSYNC_ENABLE=false/RSYNC_ENABLE=true/g' /etc/default/rsync //设置rsync开机启动
sudo service rsync start //启动rsync
启动swift2节点的服务sudo swift-init object-server start
sudo swift-init object-replicator start
sudo swift-init object-updater start
sudo swift-init object-auditor start
sudo swift-init container-server start
sudo swift-init container-replicator start
sudo swift-init container-updater start
sudo swift-init container-auditor start
sudo swift-init account-server start
sudo swift-init account-replicator start
sudo swift-init account-auditor start
启动swift1节点服务:
sudo swift-init all start
启动后,用ps命令可以看到所有服务的进程。3、使用swift
1)注册swift服务到keystone上
Ø 创建一个object-store服务
keystone service-create --name=Swift --type=object-store --description="Swift Object Store Service"
得到swift服务的id。
Ø 创建服务的endpoint
(IP地址是proxy-server所在服务器地址)
keystone endpoint-create --service_id = <swift-service-id> --region RegionOne --publicurlhttp://192.168.0.110:8080/v1/AUTH_72a95ab302cc42d59e6f414769dcfec7 --adminurlhttp://192.168.0.110:8080 --internalurlhttp://192.168.0.110:8080/v1/AUTH_72a95ab302cc42d59e6f414769dcfec7
2)使用swift
Ø swift -V 2 -A http://192.168.74.130:5000/v2.0 -UadminTenant:admin -K openstack stat //在swift主控点使用该命令,看一下文件的统计结果