Swift 安装
1 Swift(Proxy+storage)
将swift 和keystone分离安装,4个zone用4块硬盘来替代
1.1 环境说明
机器名 eth0 说明
Cloudtest01 192.168.0.17/24 Keystone glance nova-api nova-volumes
Cloudtest03 192.168.0.21/24 Proxy+storage
1.2 系统ubuntu12.04
最小化安装,只需要安装ssh server就可以。
1.3 设置网络
编辑 /etc/network/interfaces
auto lo
iface lo inet loopback
# The primary network interface
auto eth0
iface eth0 inet static
address 192.168.0.21
netmask 255.255.255.0
gateway 192.168.0.1
dns-search
dns-nameservers 8.8.8.8
auto eth1
iface eth1 inet manual
up ifconfig eth1 up
查看当前网卡情况
root@cloudtest03:~# mii-tool
SIOCGMIIREG on eth0 failed: Input/output error
SIOCGMIIREG on eth0 failed: Input/output error
eth0: negotiated 100baseTx-FD flow-control, link ok
1.4 设置hostname
root@cloudtest03:~# hostname cloudtest03
root@cloudtest03:~# cat /etc/hosts
127.0.0.1 localhost
#127.0.1.1 cloudtest03
192.168.0.17 cloudtest01
192.168.0.20 cloudtest02
192.168.0.21 cloudtest03
root@cloudtest03:~# hostname -f
1.5 安装软件
root@cloudtest03:~# apt-get update 更新源
apt-get -y install swift swift-proxy swift-account swift-container \
swift-object xfsprogs curl python-pastedeploy python-keystone python-keystoneclient
1.6 分区
对四块硬盘进行分区,每块硬盘划分一块分区
fdisk /dev/sdc
fdisk /dev/sdd
fdisk /dev/sde
fdisk /dev/sdf
-i size=1024 /dev/sdc1
-i size=1024 /dev/sdd1
-i size=1024 /dev/sde1
-i size=1024 /dev/sdf1
mkdir /mnt/swift_backend
pushd /mnt/swift_backend
mkdir node1 node2 node3 node4
popd
修改/etc/fstab,末尾添加
/dev/sdc1 /mnt/swift_backend/node1 xfs noatime,nodiratime,nobarrier,logbufs=8 0 0
/dev/sdd1 /mnt/swift_backend/node2 xfs noatime,nodiratime,nobarrier,logbufs=8 0 0
/dev/sde1 /mnt/swift_backend/node3 xfs noatime,nodiratime,nobarrier,logbufs=8 0 0
/dev/sdf1 /mnt/swift_backend/node4 xfs noatime,nodiratime,nobarrier,logbufs=8 0 0
挂载磁盘
mount -a
mount –l 可以查看挂载磁盘情况
创建连接文件
chown /mnt/swift_backend/*
for i in {1..4}; do sudo ln -s /mnt/swift_backend/node$i /srv/node$i; done;
mkdir -p /etc/swift/account-server \
/etc/swift/container-server \
/etc/swift/object-server \
mkdir /run/swift
chown -L -R /etc/swift /srv/node[1-4]/ /run/swift
系统启动时启动Swift服务,需要把如下两行命令写入 /etc/里,位置在“exit 0;”之前:
sudo mkdir -p /var/cache/swift /var/cache/swift2 /var/cache/swift3 /var/cache/swift4
sudo chown swift:swift /var/cache/swift*
soudo mkdir -p /var/run/swift
sudo chown swift:swift /var/run/swift
1.7 配置rsync
sed -i 's/RSYNC_ENABLE=false/RSYNC_ENABLE=true/g' /etc/default/rsync
创建/etc/
# General stuff
uid = swift
gid = swift
log file = /var/log/
pid file = /run/
address = 127.0.0.1
# Account Server replication settings
[account6012]
max connections = 25
path = /srv/node1/
read only = false
lock file = /run/lock/
[account6022]
max connections = 25
path = /srv/node2/
read only = false
lock file = /run/lock/
[account6032]
max connections = 25
path = /srv/node3/
read only = false
lock file = /run/lock/
[account6042]
max connections = 25
path = /srv/node4/
read only = false
lock file = /run/lock/
# Container server replication settings
[container6011]
max connections = 25
path = /srv/node1/
read only = false
lock file = /run/lock/
[container6021]
max connections = 25
path = /srv/node2/
read only = false
lock file = /run/lock/
[container6031]
max connections = 25
path = /srv/node3/
read only = false
lock file = /run/lock/
[container6041]
max connections = 25
path = /srv/node4/
read only = false
lock file = /run/lock/
# Object Server replication settings
[object6010]
max connections = 25
path = /srv/node1/
read only = false
lock file = /run/lock/
[object6020]
max connections = 25
path = /srv/node2/
read only = false
lock file = /run/lock/
[object6030]
max connections = 25
path = /srv/node3/
read only = false
lock file = /run/lock/
[object6040]
max connections = 25
path = /srv/node4/
read only = false
lock file = /run/lock/
重启服务
service rsync restart
1.8 设置日志
创建 /etc//
# Uncomment the following to have a log containing all logs together
#local1,local2,local3,local4,local5.* /var/log/swift/
# Uncomment the following to have hourly proxy logs for stats processing
#$template HourlyProxyLog,"/var/log/swift/hourly/%$YEAR%%$MONTH%%$DAY%%$HOUR%"
#local1.*;local1.!notice ?HourlyProxyLog
local1.*;local1.!notice /var/log/swift/
/var/log/swift/
local1.* ~
local2.*;local2.!notice /var/log/swift/
/var/log/swift/
local2.* ~
local3.*;local3.!notice /var/log/swift/
/var/log/swift/
local3.* ~
local4.*;local4.!notice /var/log/swift/
/var/log/swift/
local4.* ~
local5.*;local5.!notice /var/log/swift/
/var/log/swift/
local5.* ~
编辑 /etc/
$PrivDropToGroup adm
创建文件并重启rsyslog服务
mkdir -p /var/log/swift/hourly
chown -R /var/log/swift
chmod -R g+w /var/log/swift
service rsyslog restart
1.9 配置proxy-server
[DEFAULT]
bind_port = 8080
user = swift
swift_dir = /etc/swift
[pipeline:main]
# Order of execution of modules defined below
pipeline = catch_errors healthcheck cache authtoken keystone proxy-server
[app:proxy-server]
use = egg:swift#proxy
allow_account_management = true
account_autocreate = true
set log_name = swift-proxy
set log_facility = LOG_LOCAL0
set log_level = INFO
set access_log_name = swift-proxy
set access_log_facility = SYSLOG
set access_log_level = INFO
set log_headers = True
account_autocreate = True
[filter:healthcheck]
use = egg:swift#healthcheck
[filter:catch_errors]
use = egg:swift#catch_errors
[filter:cache]
use = egg:swift#memcache
set log_name = cache
[filter:authtoken]
paste.filter_factory = .auth_token:filter_factory
auth_protocol = http
auth_host = 192.168.0.17
auth_port = 35357
auth_token = zhizheng
service_protocol = http
service_host = 192.168.0.17
service_port = 5000
admin_token = zhizheng
admin_tenant_name = service
admin_user = swift
admin_password = zhizheng
delay_auth_decision = 0
[filter:keystone]
paste.filter_factory = .swift_auth:filter_factory
operator_roles = admin, swiftoperator
is_admin = true
创建/etc/swift/
cat >/etc/swift/ <<EOF
[swift-hash]
# random unique string that can never change (DO NOT LOSE)
swift_hash_path_suffix = `od -t x8 -N 8 -A n </dev/random`
EOF
2.0 Account Server, Container Server, Object Server
创建/etc/swift/account-server/
cat > /etc/swift/account-server/ <<EOF
[DEFAULT]
devices = /srv/node1
mount_check = false
bind_port = 6012
user = swift
log_facility = LOG_LOCAL2
recon_cache_path = /var/cache/swift
[pipeline:main]
pipeline = account-server
[app:account-server]
use = egg:swift#account
[account-replicator]
vm_test_mode = yes
[account-auditor]
[account-reaper]
EOF
创建/etc/swift/container-server/
cat >/etc/swift/container-server/ <<EOF
[DEFAULT]
devices = /srv/node1
mount_check = false
bind_port = 6011
user = swift
log_facility = LOG_LOCAL2
recon_cache_path = /var/cache/swift
[pipeline:main]
pipeline = container-server
[app:container-server]
use = egg:swift#container
[container-replicator]
vm_test_mode = yes
[container-updater]
[container-auditor]
[container-sync]
EOF
创建/etc/swift/object-server/
cat > /etc/swift/object-server/ <<EOF
[DEFAULT]
devices = /srv/node1
mount_check = false
bind_port = 6010
user = swift
log_facility = LOG_LOCAL2
recon_cache_path = /var/cache/swift
[pipeline:main]
pipeline = object-server
[app:object-server]
use = egg:swift#object
[object-replicator]
vm_test_mode = yes
[object-updater]
[object-auditor]
EOF
创建/etc/swift/account-server/
cat > /etc/swift/account-server/ <<EOF
[DEFAULT]
devices = /srv/node2
mount_check = false
bind_port = 6022
user = swift
log_facility = LOG_LOCAL3
recon_cache_path = /var/cache/swift2
[pipeline:main]
pipeline = account-server
[app:account-server]
use = egg:swift#account
[account-replicator]
vm_test_mode = yes
[account-auditor]
[account-reaper]
EOF
创建/etc/swift/container-server/
cat >/etc/swift/container-server/ <<EOF
[DEFAULT]
devices = /srv/node2
mount_check = false
bind_port = 6021
user = swift
log_facility = LOG_LOCAL3
recon_cache_path = /var/cache/swift2
[pipeline:main]
pipeline = container-server
[app:container-server]
use = egg:swift#container
[container-replicator]
vm_test_mode = yes
[container-updater]
[container-auditor]
[container-sync]
EOF
创建/etc/swift/object-server/
cat > /etc/swift/object-server/ <<EOF
[DEFAULT]
devices = /srv/node2
mount_check = false
bind_port = 6020
user = swift
log_facility = LOG_LOCAL3
recon_cache_path = /var/cache/swift2
[pipeline:main]
pipeline = object-server
[app:object-server]
use = egg:swift#object
[object-replicator]
vm_test_mode = yes
[object-updater]
[object-auditor]
EOF
创建/etc/swift/account-server/
cat > /etc/swift/account-server/ <<EOF
[DEFAULT]
devices = /srv/node3
mount_check = false
bind_port = 6032
user = swift
log_facility = LOG_LOCAL4
recon_cache_path = /var/cache/swift3
[pipeline:main]
pipeline = account-server
[app:account-server]
use = egg:swift#account
[account-replicator]
vm_test_mode = yes
[account-auditor]
[account-reaper]
EOF
创建/etc/swift/container-server/
cat >/etc/swift/container-server/ <<EOF
[DEFAULT]
devices = /srv/node3
mount_check = false
bind_port = 6031
user = swift
log_facility = LOG_LOCAL4
recon_cache_path = /var/cache/swift3
[pipeline:main]
pipeline = container-server
[app:container-server]
use = egg:swift#container
[container-replicator]
vm_test_mode = yes
[container-updater]
[container-auditor]
[container-sync]
EOF
创建/etc/swift/object-server/
cat > /etc/swift/object-server/ <<EOF
[DEFAULT]
devices = /srv/node3
mount_check = false
bind_port = 6030
user = swift
log_facility = LOG_LOCAL4
recon_cache_path = /var/cache/swift3
[pipeline:main]
pipeline = object-server
[app:object-server]
use = egg:swift#object
[object-replicator]
vm_test_mode = yes
[object-updater]
[object-auditor]
EOF
创建/etc/swift/account-server/
cat > /etc/swift/account-server/ <<EOF
[DEFAULT]
devices = /srv/node4
mount_check = false
bind_port = 6042
user = swift
log_facility = LOG_LOCAL5
recon_cache_path = /var/cache/swift4
[pipeline:main]
pipeline = account-server
[app:account-server]
use = egg:swift#account
[account-replicator]
vm_test_mode = yes
[account-auditor]
[account-reaper]
EOF
创建/etc/swift/container-server/
cat >/etc/swift/container-server/ <<EOF
[DEFAULT]
devices = /srv/node4
mount_check = false
bind_port = 6041
user = swift
log_facility = LOG_LOCAL5
recon_cache_path = /var/cache/swift4
[pipeline:main]
pipeline = container-server
[app:container-server]
use = egg:swift#container
[container-replicator]
vm_test_mode = yes
[container-updater]
[container-auditor]
[container-sync]
EOF
创建/etc/swift/object-server/
cat > /etc/swift/object-server/ <<EOF
[DEFAULT]
devices = /srv/node4
mount_check = false
bind_port = 6040
user = swift
log_facility = LOG_LOCAL5
recon_cache_path = /var/cache/swift4
[pipeline:main]
pipeline = object-server
[app:object-server]
use = egg:swift#object
[object-replicator]
vm_test_mode = yes
[object-updater]
[object-auditor]
EOF
最后别忘了编辑 sync
cat <<EOF >>/etc/swift/
[container-sync]
EOF
2.1 确认目录更改权限
chown -R /etc/swift
chown -R /srv
chown -R /mnt/swift_backend/
2.2 ring server
pushd /etc/swift
swift-ring-builder create 18 3 1
swift-ring-builder create 18 3 1
swift-ring-builder create 18 3 1
swift-ring-builder add z1-192.168.0.21:6010/sdc 1
swift-ring-builder add z2-192.168.0.21:6020/sdd 1
swift-ring-builder add z3-192.168.0.21:6030/sde 1
swift-ring-builder add z4-192.168.0.21:6040/sdf 1
swift-ring-builder add z1-192.168.0.21:6011/sdc 1
swift-ring-builder add z2-192.168.0.21:6021/sdd 1
swift-ring-builder add z3-192.168.0.21:6031/sde 1
swift-ring-builder add z4-192.168.0.21:6041/sdf 1
swift-ring-builder add z1-192.168.0.21:6012/sdc 1
swift-ring-builder add z2-192.168.0.21:6022/sdd 1
swift-ring-builder add z3-192.168.0.21:6032/sde 1
swift-ring-builder add z4-192.168.0.21:6042/sdf 1
swift-ring-builder rebalance
swift-ring-builder rebalance
swift-ring-builder rebalance
2.3 启动服务
swift-init main start
swift-init rest start
2.4 启动proxy-server
swift-init proxy start
swift-init proxy restart
2.5 更改数据库的endpoint使其指向proxy-server地址
root@cloudtest01:/etc/apt# keystone endpoint-list
+----------------------------------+-----------+------------------------------------------------+------------------------------------------------+-------------------------------------------+
| id | region | publicurl | internalurl | adminurl |
+----------------------------------+-----------+------------------------------------------------+------------------------------------------------+-------------------------------------------+
| 2f73b7eff0844b6d8fea7b80d28696b4 | RegionOne | http://192.168.0.17:8776/v1/%(tenant_id)s | http://192.168.0.17:8776/v1/%(tenant_id)s | http://192.168.0.17:8776/v1/%(tenant_id)s |
| 69bf61249b384b75adc2b864a5f006e3 | RegionOne | http://192.168.0.17:9292/v1 | http://192.168.0.17:9292/v1 | http://192.168.0.17:9292/v1 |
| 8d34bbe8ffd84feabb0dba4ed522516d | RegionOne | http://192.168.0.17:8773/services/Cloud | http://192.168.0.17:8773/services/Cloud | http://192.168.0.17:8773/services/Admin |
| 98f0d799541c4ae9ac37176a473dbe30 | RegionOne | http://192.168.0.17:5000/v2.0 | http://192.168.0.17:5000/v2.0 | http://192.168.0.17:35357/v2.0 |
| b7b2384fdbc1488293c1d38c0e7465e1 | RegionOne | http://192.168.0.17:8774/v2/%(tenant_id)s | http://192.168.0.17:8774/v2/%(tenant_id)s | http://192.168.0.17:8774/v2/%(tenant_id)s |
| d7c721763cec4827aecfff71d75b1020 | RegionOne | http://192.168.0.17:8080/v1/AUTH_%(tenant_id)s | http://192.168.0.17:8080/v1/AUTH_%(tenant_id)s | http://192.168.0.17:8080/v1 |
+----------------------------------+-----------+------------------------------------------------+------------------------------------------------+-------------------------------------------+
Swift的endpoint目前指向的是192.168.0.17 控制节点自身,修改数据库将其指向192.168.0.21的proxy-server地址
root@cloudtest01:/etc/apt# keystone endpoint-list
+----------------------------------+-----------+------------------------------------------------+------------------------------------------------+-------------------------------------------+
| id | region | publicurl | internalurl | adminurl |
+----------------------------------+-----------+------------------------------------------------+------------------------------------------------+-------------------------------------------+
| 2f73b7eff0844b6d8fea7b80d28696b4 | RegionOne | http://192.168.0.17:8776/v1/%(tenant_id)s | http://192.168.0.17:8776/v1/%(tenant_id)s | http://192.168.0.17:8776/v1/%(tenant_id)s |
| 69bf61249b384b75adc2b864a5f006e3 | RegionOne | http://192.168.0.17:9292/v1 | http://192.168.0.17:9292/v1 | http://192.168.0.17:9292/v1 |
| 8d34bbe8ffd84feabb0dba4ed522516d | RegionOne | http://192.168.0.17:8773/services/Cloud | http://192.168.0.17:8773/services/Cloud | http://192.168.0.17:8773/services/Admin |
| 98f0d799541c4ae9ac37176a473dbe30 | RegionOne | http://192.168.0.17:5000/v2.0 | http://192.168.0.17:5000/v2.0 | http://192.168.0.17:35357/v2.0 |
| b7b2384fdbc1488293c1d38c0e7465e1 | RegionOne | http://192.168.0.17:8774/v2/%(tenant_id)s | http://192.168.0.17:8774/v2/%(tenant_id)s | http://192.168.0.17:8774/v2/%(tenant_id)s |
| d7c721763cec4827aecfff71d75b1020 | RegionOne | http://192.168.0.21:8080/v1/AUTH_%(tenant_id)s | http://192.168.0.21:8080/v1/AUTH_%(tenant_id)s | http://192.168.0.21:8080/v1 |
+----------------------------------+-----------+------------------------------------------------+------------------------------------------------+-------------------------------------------+
2.6 设置环境变量 /etc/profile 添加
export OS_TENANT_NAME=admin
export OS_USERNAME=admin
export OS_PASSWORD=zhizheng
export OS_AUTH_URL=http://192.168.0.17:5000/v2.0/
导出环境变量
export OS_TENANT_NAME=admin
export OS_USERNAME=admin
export OS_PASSWORD=zhizheng
export OS_AUTH_URL=http://192.168.0.17:5000/v2.0/
检查
root@cloudtest03:/var/log/swift# export |grep OS_
root@cloudtest03:/var/log/swift# export OS_TENANT_NAME=admin
root@cloudtest03:/var/log/swift# export OS_USERNAME=admin
root@cloudtest03:/var/log/swift# export OS_PASSWORD=zhizheng
root@cloudtest03:/var/log/swift# export OS_AUTH_URL=http://192.168.0.17:5000/v2.0/