[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 配置

  1. 所有 node 安装 Ubuntu Server 10.04 LTS

  2. 安装 Swift 的先决条件:

    apt-get install python-software-properties
    add-apt-repository ppa:swift-core/ppa
    apt-get update
    apt-get install swift openssh-server
  3. 创建 Swift 的工作目录:

    mkdir -p /etc/swift
    chown -R swift:swift /etc/swift/
  4. 在第一个 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
  5. 后续的 node : 拷贝上一步的swift.conf文件到相应目录,这个文件在所有的 node 上都必须相同:

    scp firstnode.example.com:/etc/swift/swift.conf /etc/swift/
  6. 定义内部网络 IP 地址,之后的配置会遇到:

    export STORAGE_LOCAL_NET_IP=10.1.2.3
    export PROXY_LOCAL_NET_IP=10.1.2.4

配置 Proxy node

  1. 安装 swift-proxy 服务:

    apt-get install swift-proxy memcached
  2. 创建SSL自签名证书 cert

    cd /etc/swift
    openssl req -new -x509 -nodes -out cert.crt -keyout cert.key
  1. 配置 memcached ,监听默认的端口。推荐配置为内部的、非公用的IP网络地址。编辑 /etc/memcached.conf,并做配置,例如:

    perl -pi -e "s/-l 127.0.0.1/-l $PROXY_LOCAL_NET_IP/" /etc/memcached.conf
  2. 重启 memcached server:

    service memcached restart
  3. 创建 /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
  4. 创建 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
  5. 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
  6. 确认 ring 的内容是否正确:

    swift-ring-builder account.builder
    swift-ring-builder container.builder
    swift-ring-builder object.builder
  7. 平衡(Rebalance) ring:

    swift-ring-builder account.builder rebalance
    swift-ring-builder container.builder rebalance
    swift-ring-builder object.builder rebalance
  8. 拷贝 account.ring.gz, container.ring.gz, object.ring.gz 到其它 Proxy node 和 Storage node 的 /etc/swift 目录下。

  9. 确保所有的配置文件都属于 swift 用户:

    chown -R swift:swift /etc/swift
  10. 开启 Proxy 服务:

相关推荐