[OpenStack Swift]install multi node
openstack swift版本:1.4.2-dev
多结点 Swift 安装 (Ubuntu)
先决条件
- Ubuntu Server 10.04 LTS 安装媒介
基本结构和一些术语
- node - 提供一种或多种 Swift 服务的主机
- Proxy node - 提供 Proxy 服务的node; 同时也提供 TempAuth 的服务
- Storage node - 提供 Account, Container, 和 Object services服务
- ring - Swift数据和物理设备之间的一系列映射
本文介绍一个由以下node组成的机群:
一个 Proxy node
- 运行 swift-proxy-server 进程, 会转送来自客户端的 request 到合适的
Storage nodes。 proxy server 也可以提供 WSGI 中间件形式的 TempAuth 服务
五个 Storage node
- 运行 swift-account-server, swift-container-server, 和swift-object-server 进程, 管理account、container数据和实际存储的object。
本文描述的每个 Storage node 都安排在 ring 中不同的 zone 里。推荐至少配置5个 zone. 一个 zone 是一组隔离的 node (各自隔离的服务器,网络,电源配置,甚至是地理位置)。ring 维护着每个副本( replica )存储在不同的 zone 上。关于 ring 和 zone 的更多信息请查看: The Rings.
为了增强可靠性,你可能会增加其他的 Proxy server,这里你会得到帮助 增加一个 Proxy Server.
网络配置的一些注意事项
本文提到了两个网络。“外部网络”用来连接 Proxy server, “内部存储网络”在机群外则是不可见的。内部网络用来node之间的互联。所有的Swift 服务,包括每个Storage node中的 rsync 守护进程,都时时监听STORAGE_LOCAL_NET,即内网中分配到的IP地址。
通用的 OS 配置
所有 node 安装 Ubuntu Server 10.04 LTS
安装 Swift 的先决条件:
apt-get install python-software-properties add-apt-repository ppa:swift-core/ppa apt-get update apt-get install swift openssh-server
创建 Swift 的工作目录:
mkdir -p /etc/swift chown -R swift:swift /etc/swift/
在第一个 node , 创建 /etc/swift/swift.conf:
cat >/etc/swift/swift.conf <<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
后续的 node : 拷贝上一步的swift.conf文件到相应目录,这个文件在所有的 node 上都必须相同:
scp firstnode.example.com:/etc/swift/swift.conf /etc/swift/
定义内部网络 IP 地址,之后的配置会遇到:
export STORAGE_LOCAL_NET_IP=10.1.2.3 export PROXY_LOCAL_NET_IP=10.1.2.4
配置 Proxy node
安装 swift-proxy 服务:
apt-get install swift-proxy memcached
创建SSL自签名证书 cert
cd /etc/swift openssl req -new -x509 -nodes -out cert.crt -keyout cert.key
配置 memcached ,监听默认的端口。推荐配置为内部的、非公用的IP网络地址。编辑 /etc/memcached.conf,并做配置,例如:
perl -pi -e "s/-l 127.0.0.1/-l $PROXY_LOCAL_NET_IP/" /etc/memcached.conf
重启 memcached server:
service memcached restart
创建 /etc/swift/proxy-server.conf:
cat >/etc/swift/proxy-server.conf <<EOF [DEFAULT] cert_file = /etc/swift/cert.crt key_file = /etc/swift/cert.key bind_port = 8080 workers = 8 user = swift [pipeline:main] pipeline = healthcheck cache tempauth proxy-server [app:proxy-server] use = egg:swift#proxy allow_account_management = true [filter:tempauth] use = egg:swift#tempauth default_swift_cluster = local#https://$PROXY_LOCAL_NET_IP:8080/v1 # Highly recommended to change this key to something else! super_admin_key = tempauth [filter:healthcheck] use = egg:swift#healthcheck [filter:cache] use = egg:swift#memcache memcache_servers = <PROXY_LOCAL_NET_IP>:11211 EOF
创建 account, container 和 object ring。swift-ring-builder 命令创建相应的.builder文件会有几个参数。18代表partition的数目会到2^18幂,这个数字取决于你希望一个ring中会有多少个partition。3代表每个object的副本数。最后一个参数1,代表一个partition至少在1小时之后才能被移动。:
cd /etc/swift swift-ring-builder account.builder create 18 3 1 swift-ring-builder container.builder create 18 3 1 swift-ring-builder object.builder create 18 3 1
ring 需要记录每个 Store Node /srv/node 中记录的存储设备(下例为sdb1):
export ZONE= # 为存储设备设定ZONE的编号 export STORAGE_LOCAL_NET_IP= # IP 地址 export WEIGHT=100 # 相对权重( weight) (更大或者更快的磁盘应有更大的权重) export DEVICE=sdb1 swift-ring-builder account.builder add z$ZONE-$STORAGE_LOCAL_NET_IP:6002/$DEVICE $WEIGHT swift-ring-builder container.builder add z$ZONE-$STORAGE_LOCAL_NET_IP:6001/$DEVICE $WEIGHT swift-ring-builder object.builder add z$ZONE-$STORAGE_LOCAL_NET_IP:6000/$DEVICE $WEIGHT
确认 ring 的内容是否正确:
swift-ring-builder account.builder swift-ring-builder container.builder swift-ring-builder object.builder
平衡(Rebalance) ring:
swift-ring-builder account.builder rebalance swift-ring-builder container.builder rebalance swift-ring-builder object.builder rebalance
拷贝 account.ring.gz, container.ring.gz, object.ring.gz 到其它 Proxy node 和 Storage node 的 /etc/swift 目录下。
确保所有的配置文件都属于 swift 用户:
chown -R swift:swift /etc/swift
开启 Proxy 服务: