Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1820466
  • 博文数量: 473
  • 博客积分: 13997
  • 博客等级: 上将
  • 技术积分: 5953
  • 用 户 组: 普通用户
  • 注册时间: 2010-01-22 11:52
文章分类

全部博文(473)

文章存档

2014年(8)

2013年(38)

2012年(95)

2011年(181)

2010年(151)

分类: LINUX

2012-11-09 14:39:04

原文地址:

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 <
  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 <: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这里得注意中间这个3它表示存储对象在swift中的拷贝数,这个值得少于等于你的zone数,否则在后面rebalance的时候会报list index out of range错,在产品环境中推荐的值是3。创建完ring后会生成对应的builder文件,这些文件很重要,应当实时备份。
  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 服务:

    swift-init proxy start
配置 Storage node
  1. 安装配置 Storage node 相关:

    apt-get install swift-account swift-container swift-object xfsprogs
  2. 对 Storage node 的每一个存储设备, 安装 XFS 逻辑卷 (下例中为 /dev/sdb ):

    fdisk /dev/sdb (挂载了单独的一个物理卷,或磁盘) mkfs.xfs -i size=1024 /dev/sdb1 echo "/dev/sdb1 /srv/node/sdb1 xfs noatime,nodiratime,nobarrier,logbufs=8 0 0" >> /etc/fstab mkdir -p /srv/node/sdb1 mount /srv/node/sdb1 chown -R swift:swift /srv/node
  3. 创建 /etc/rsyncd.conf:

    cat >/etc/rsyncd.conf <
  4. 修改 /etc/default/rsync 中的 RSYNC_ENABLE= 属性

    perl -pi -e 's/RSYNC_ENABLE=false/RSYNC_ENABLE=true/' /etc/default/rsync
  5. 开启 rsync 守护进程:

    service rsync start
  6. 创建 /etc/swift/account-server.conf:

    cat >/etc/swift/account-server.conf <
  7. 创建 /etc/swift/container-server.conf:

    cat >/etc/swift/container-server.conf <
  8. 创建 /etc/swift/object-server.conf:

    cat >/etc/swift/object-server.conf <
  9. 开启 storage 服务. 下面的命令会开启所有具有相关配置文件的服务(比如proxy-server.conf,auth-server.conf存在,会开启proxy 和auth服务), 并可能因为部分配置文件不存在而抛出警告:

    swift-init all start

如 果你希望一次只启动一个服务,按照如下格式手动启动服务即可。有一点需要注意,您遇到问题的server 在用swift-init启动时,可能把标准输出、错误重定向到了 /dev/null。 如果您遇到什么问题,停止相应 server 的服务,并手动启动它可能是更好的选择。所有的 server 都可以通过 “swift-$SERVER-$SERVICE /etc/swift/$SERVER-config” 的格式启动。其中 $SERVER 可以是 object, continer, 或者 account, $SERVICE 可以是 server,replicator, updater, 或者 auditor。:

swift-init object-server start swift-init object-replicator start swift-init object-updater start swift-init object-auditor start swift-init container-server start swift-init container-replicator start swift-init container-updater start swift-init container-auditor start swift-init account-server start swift-init account-replicator start swift-init account-auditor start
创建 Swift 管理员 account 并作测试

在 Proxy node 运行如下命令

  1. 获得 X-Storage-Url 和 X-Auth-Token:

    curl -k -v -H 'X-Storage-User: system:root' -H 'X-Storage-Pass: testpass'
  2. 检测是否可以使用 HEAD 命令查询 account 状态:

    curl -k -v -H 'X-Auth-Token: '
  3. 检测 swift 命令是否工作正常 (输出应为 zero containers, zero objects, 和 zero bytes):

    swift -A -U system:root -K testpass stat
  4. 使用 swift 命令上载 ‘bigfile[1-2].tgz’两个文件到’myfiles’的 container

    swift -A -U system:root -K testpass upload myfiles bigfile1.tgz swift -A -U system:root -K testpass upload myfiles bigfile2.tgz
  5. 使用 swift 命令下载 container ‘myfiles’中的所有文件

    swift -A -U system:root -K testpass download myfiles
  6. 使用 swift 保存ring的.builder 构建文件到container ‘builders’. 这些构建文件很重要,不要丢失!:

    swift -A -U system:root -K testpass upload builders /etc/swift/*.builder
  7. 使用 swift 命令列表特定用户的 container

    swift -A -U system:root -K testpass list
  8. 使用 swift 命令列表container ‘builders’中的 object

    swift -A -U system:root -K testpass list builders
  9. 使用 swift 命令下载container ‘builders’中的object

    swift -A -U system:root -K testpass download builders
增加一个 Proxy Server

从系统可靠性的角度,我们更希望有多个proxy server。这一小节介绍如何在已有一个proxy server 的基础上增加另一个 Proxy Server。

一 旦有超过两个proxy server,我们可能期望增加负载均衡的机制,这往往意为着存储结构的变化(增加了一层负载均衡设备)。我们可以选择不同的负载均衡策略。 比如循环dns(round robin dns)算法,或者在多个proxy server之前使用负载均衡的中间件 (比如 pound) , 把指向 storage url 的请求转嫁给负载均衡器。

参考 配置 Proxy node 中的初始安装, 之后按如下步骤操作。

  1. 所 有的Proxy server中,更新/etc/swift/proxy-server.conf的memcache server配置。如果有多个memcache server,用以下的格式进行分隔: IP:port ,例如在每个Proxy server 的配置文件中: 10.1.2.3:11211,10.1.2.4:11211 ,说明是以10.1.2.3、10.1.2.4作为共享的缓存:

    [filter:cache] use = egg:swift#memcache memcache_servers = $PROXY_LOCAL_NET_IP:11211
  2. 改变/etc/swift/proxy-server.conf中storage url的指向,使所有请求指向负载均衡设备的url,而不是初始设置时的那台Proxy server。

    [filter:tempauth] use = egg:swift#tempauth user_system_root = testpass .admin http[s]://:/v1/AUTH_system
  3. 之后,拷贝所有ring 的信息到所有node中,包括新加入的proxy node, 确保ring 的内容包括了所有的storage node。

  4. 同步(?)所有的结点之后, 确保管理员( admin)可以访问 /etc/swift 目录,并且确保所有ring的.gz文件所有者都是正确的。

故障检测的便签

如果遇到什么问题,查看 var/log/syslog 中日志信息是非常必要的。

在 Rackspace,我们会查看/var/log/kern.log找到磁盘故障的一些线索。

在 中会有更多的调试技巧。

阅读(2116) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~