[openstack swift]SAIO

原文地址:http://swift.openstack.org/development_saio.html

openstack swift版本: 1.4.2-dev


SAIO - Swift All In One¶

安装开发用虚拟机¶

这篇文档介绍如何安装一系列虚拟机来模拟有4个结点的swift机群。* 获得 * Ubuntu 10.04 LTS (Lucid Lynx) * server 的镜像:

  • Ubuntu Server ISO: http://releases.ubuntu.com/lucid/ubuntu-10.04.2-server-amd64.iso (717 MB)
  • Ubuntu Live/Install: http://cdimage.ubuntu.com/releases/lucid/release/ubuntu-10.04.2-dvd-amd64.iso (4.2 GB)
  • Ubuntu Mirrors: https://launchpad.net/ubuntu/+cdmirrors
  • 由ubuntu镜像创建客户机(虚拟机)

其它linux版本的SAIO安装参照wiki:http://wiki.openstack.org/SAIOInstructions

安装依赖和核心代码¶

  • 需要root权限运行以下:
    1. apt-get install python-software-properties
    2. add-apt-repository ppa:swift-core/ppa
    3. apt-get update
    4. apt-get install curl gcc bzr memcached python-configobjpython-coverage python-dev python-nose python-setuptools python-simplejsonpython-xattr sqlite3 xfsprogs python-webob python-eventletpython-greenlet python-pastedeploy python-netifaces
    5. 安装其它你所需要的工具,例如: screen, ssh, vim, etc.
    6. 接下来选择分区创建的方式,选其一即可 使用一个新的partition(逻辑卷)作为存储分区 或者 在已有的分区上建立存储分区.

使用一个新的partition(逻辑卷)作为存储分区¶

如果swift数据放在一个独立的分区上,那么按如下步骤操作。之前,请确认虚拟机挂载了新的硬件设备。

  1. fdisk /dev/sdb (挂载新的逻辑卷,这里新设备为 /dev/sdb)

  2. mkfs.xfs -i size=1024 /dev/sdb1

  3. 编辑 /etc/fstab 并在尾行插入

    /dev/sdb1 /mnt/sdb1 xfs noatime,nodiratime,nobarrier,logbufs=8 0 0

  4. mkdir /mnt/sdb1

  5. mount /mnt/sdb1

  6. mkdir /mnt/sdb1/1 /mnt/sdb1/2 /mnt/sdb1/3 /mnt/sdb1/4

  7. chown <your-user-name>:<your-group-name> /mnt/sdb1/*

  8. mkdir /srv

  9. for x in {1..4}; do ln -s /mnt/sdb1/$x /srv/$x; done

  10. mkdir -p /etc/swift/object-server /etc/swift/container-server /etc/swift/account-server /srv/1/node/sdb1 /srv/2/node/sdb2 /srv/3/node/sdb3 /srv/4/node/sdb4 /var/run/swift

  11. chown -R <your-user-name>:<your-group-name> /etc/swift /srv/[1-4]/ /var/run/swiftMake sure to include the trailing slash after /srv/[1-4]/

  12. /etc/rc.local 尾行插入(注意在 exit 0 之前):

    mkdir /var/run/swift
    chown <your-user-name>:<your-group-name> /var/run/swift
  13. 然后,可以设置rsync守护进程了 设置rsync守护进程.

在已有的分区上建立存储分区¶

如果你只是想利用现有的逻辑分区,那么按照如下操作。

  1. mkdir /srv

  2. dd if=/dev/zero of=/srv/swift-disk bs=1024 count=0 seek=1000000

    (调整seek参数的值以分配你需要的分区大小,1000000为接近1G的空间)

  3. mkfs.xfs -i size=1024 /srv/swift-disk

  4. 编辑,并在 /etc/fstab 尾行插入

    /srv/swift-disk /mnt/sdb1 xfs loop,noatime,nodiratime,nobarrier,logbufs=8 0 0

  5. mkdir /mnt/sdb1

  6. mount /mnt/sdb1

  7. mkdir /mnt/sdb1/1 /mnt/sdb1/2 /mnt/sdb1/3 /mnt/sdb1/4

  8. chown <your-user-name>:<your-group-name> /mnt/sdb1/*

  9. for x in {1..4}; do ln -s /mnt/sdb1/$x /srv/$x; done

  10. mkdir -p /etc/swift/object-server /etc/swift/container-server /etc/swift/account-server /srv/1/node/sdb1 /srv/2/node/sdb2 /srv/3/node/sdb3 /srv/4/node/sdb4 /var/run/swift

  11. chown -R <your-user-name>:<your-group-name> /etc/swift /srv/[1-4]/ /var/run/swiftMake sure to include the trailing slash after /srv/[1-4]/

  12. 编辑并在 /etc/rc.local 尾行插入(注意在 exit 0 之前):

    mkdir /var/run/swift
    chown <your-user-name>:<your-group-name> /var/run/swift

设置rsync守护进程¶

  1. 创建配置文件 /etc/rsyncd.conf:

    uid = <Your user name>
    gid = <Your group name>
    
    log file = /var/log/rsyncd.log
    pid file = /var/run/rsyncd.pid
    address = 127.0.0.1
    
    [account6012]
    max connections = 25
    path = /srv/1/node/
    read only = false
    lock file = /var/lock/account6012.lock
    
    [account6022]
    max connections = 25
    path = /srv/2/node/
    read only = false
    lock file = /var/lock/account6022.lock
    
    [account6032]
    max connections = 25
    path = /srv/3/node/
    read only = false
    lock file = /var/lock/account6032.lock
    
    [account6042]
    max connections = 25
    path = /srv/4/node/
    read only = false
    lock file = /var/lock/account6042.lock
    
    
    [container6011]
    max connections = 25
    path = /srv/1/node/
    read only = false
    lock file = /var/lock/container6011.lock
    
    [container6021]
    max connections = 25
    path = /srv/2/node/
    read only = false
    lock file = /var/lock/container6021.lock
    
    [container6031]
    max connections = 25
    path = /srv/3/node/
    read only = false
    lock file = /var/lock/container6031.lock
    
    [container6041]
    max connections = 25
    path = /srv/4/node/
    read only = false
    lock file = /var/lock/container6041.lock
    
    
    [object6010]
    max connections = 25
    path = /srv/1/node/
    read only = false
    lock file = /var/lock/object6010.lock
    
    [object6020]
    max connections = 25
    path = /srv/2/node/
    read only = false
    lock file = /var/lock/object6020.lock
    
    [object6030]
    max connections = 25
    path = /srv/3/node/
    read only = false
    lock file = /var/lock/object6030.lock
    
    [object6040]
    max connections = 25
    path = /srv/4/node/
    read only = false
    lock file = /var/lock/object6040.lock
  2. 编辑 /etc/default/rsync ,更改相应配置属性

    RSYNC_ENABLE=true
    
    
  3. service rsync restart

可选: 按照个人需要设置 rsyslog ,生成特有的日志文件¶

  1. 创建 /etc/rsyslog.d/10-swift.conf:

    # 如果需要整合所有node的日志,请取消下行注释
    #local1,local2,local3,local4,local5.*   /var/log/swift/all.log
    
    # 如果需要proxy每小时的stats日志,请取消下行注释
    #$template HourlyProxyLog,"/var/log/swift/hourly/%$YEAR%%$MONTH%%$DAY%%$HOUR%"
    #local1.*;local1.!notice ?HourlyProxyLog
    
    local1.*;local1.!notice /var/log/swift/proxy.log
    local1.notice           /var/log/swift/proxy.error
    local1.*                ~
    
    local2.*;local2.!notice /var/log/swift/storage1.log
    local2.notice           /var/log/swift/storage1.error
    local2.*                ~
    
    local3.*;local3.!notice /var/log/swift/storage2.log
    local3.notice           /var/log/swift/storage2.error
    local3.*                ~
    
    local4.*;local4.!notice /var/log/swift/storage3.log
    local4.notice           /var/log/swift/storage3.error
    local4.*                ~
    
    local5.*;local5.!notice /var/log/swift/storage4.log
    local5.notice           /var/log/swift/storage4.error
    local5.*                ~
  2. 编辑 /etc/rsyslog.conf 并更改相应属性

    $PrivDropToGroup adm

  3. mkdir -p /var/log/swift/hourly

  4. chown -R syslog.adm /var/log/swift

  5. service rsyslog restart

获得swift源代码并配置测试环境¶

配置文件的示例如下,并含有注释

以下配置不需要root权限,通常使用的用户权限即可。bzr的配置不是必须的,无论你是否有launchpad的账号,都可以使用bzr branch 命令:

  1. mkdir ~/bin

  2. (可选) mkdir ~/.bazaar

  3. (可选) 创建 ~/.bazaar/bazaar.conf 并在尾行插入

    [DEFAULT]
            email = Your Name <your-email-address>
  4. (可选) 如果你需要使用lauchpad账户,获得源代码并做修改,则使用如下命令:bzr launchpad-login <launchpad_id>

  5. 创建swift代码仓库 bzr init-repo swift

  6. bzr同步出最新的代码,例如:cd ~/swift; bzr branch lp:swift trunk

  7. 以开发的方式安装swift,例如 :cd ~/swift/trunk; sudo python setup.py develop

  8. 编辑 ~/.bashrc 并在尾行插入:

    export SWIFT_TEST_CONFIG_FILE=/etc/swift/func_test.conf
    export PATH=${PATH}:~/bin
  9. . ~/.bashrc

配置各个结点(node)¶

配置文件的示例如下:

  1. 创建 /etc/swift/proxy-server.conf:

    [DEFAULT]
    bind_port = 8080
    user = <your-user-name>
    
    log_facility = LOG_LOCAL1
    
    [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
    user_admin_admin = admin .admin .reseller_admin
    user_test_tester = testing .admin
    user_test2_tester2 = testing2 .admin
    user_test_tester3 = testing3
    
    [filter:healthcheck]
    use = egg:swift#healthcheck
    
    [filter:cache]
    use = egg:swift#memcache
  2. 创建 /etc/swift/swift.conf:

    [swift-hash]
    
    # random unique string that can never change (DO NOT LOSE)
    
    swift_hash_path_suffix = changeme
    
  3. 创建 /etc/swift/account-server/1.conf:

    [DEFAULT]
    devices = /srv/1/node
    mount_check = false
    bind_port = 6012
    user = <your-user-name>
    log_facility = LOG_LOCAL2
    
    [pipeline:main]
    pipeline = account-server
    
    [app:account-server]
    use = egg:swift#account
    
    [account-replicator]
    vm_test_mode = yes
    
    [account-auditor]
    
    [account-reaper]
  4. 创建 /etc/swift/account-server/2.conf:

    [DEFAULT]
    devices = /srv/2/node
    mount_check = false
    bind_port = 6022
    user = <your-user-name>
    log_facility = LOG_LOCAL3
    
    [pipeline:main]
    pipeline = account-server
    
    [app:account-server]
    use = egg:swift#account
    
    [account-replicator]
    vm_test_mode = yes
    
    [account-auditor]
    
    [account-reaper]
  5. 创建 /etc/swift/account-server/3.conf:

    [DEFAULT]
    devices = /srv/3/node
    mount_check = false
    bind_port = 6032
    user = <your-user-name>
    log_facility = LOG_LOCAL4
    
    [pipeline:main]
    pipeline = account-server
    
    [app:account-server]
    use = egg:swift#account
    
    [account-replicator]
    vm_test_mode = yes
    
    [account-auditor]
    
    [account-reaper]
  6. 创建 /etc/swift/account-server/4.conf:

    [DEFAULT]
    devices = /srv/4/node
    mount_check = false
    bind_port = 6042
    user = <your-user-name>
    log_facility = LOG_LOCAL5
    
    [pipeline:main]
    pipeline = account-server
    
    [app:account-server]
    use = egg:swift#account
    
    [account-replicator]
    vm_test_mode = yes
    
    [account-auditor]
    
    [account-reaper]
  7. 创建 /etc/swift/container-server/1.conf:

    [DEFAULT]
    devices = /srv/1/node
    mount_check = false
    bind_port = 6011
    user = <your-user-name>
    
    log_facility = LOG_LOCAL2
    
    [pipeline:main]
    pipeline = container-server
    
    [app:container-server]
    use = egg:swift#container
    
    [container-replicator]
    vm_test_mode = yes
    
    [container-updater]
    
    [container-auditor]
  8. 创建 /etc/swift/container-server/2.conf:

    [DEFAULT]
    devices = /srv/2/node
    mount_check = false
    bind_port = 6021
    user = <your-user-name>
    log_facility = LOG_LOCAL3
    
    [pipeline:main]
    pipeline = container-server
    
    [app:container-server]
    use = egg:swift#container
    
    [container-replicator]
    vm_test_mode = yes
    
    [container-updater]
    
    [container-auditor]
  9. 创建 /etc/swift/container-server/3.conf:

    [DEFAULT]
    devices = /srv/3/node
    mount_check = false
    bind_port = 6031
    user = <your-user-name>
    log_facility = LOG_LOCAL4
    
    [pipeline:main]
    pipeline = container-server
    
    [app:container-server]
    use = egg:swift#container
    
    [container-replicator]
    vm_test_mode = yes
    
    [container-updater]
    
    [container-auditor]
  10. 创建 /etc/swift/container-server/4.conf:

    [DEFAULT]
    devices = /srv/4/node
    mount_check = false
    bind_port = 6041
    user = <your-user-name>
    log_facility = LOG_LOCAL5
    
    [pipeline:main]
    pipeline = container-server
    
    [app:container-server]
    use = egg:swift#container
    
    [container-replicator]
    vm_test_mode = yes
    
    [container-updater]
    
    [container-auditor]
  11. 创建 /etc/swift/object-server/1.conf:

    [DEFAULT]
    devices = /srv/1/node
    mount_check = false
    bind_port = 6010
    user = <your-user-name>
    log_facility = LOG_LOCAL2
    
    [pipeline:main]
    pipeline = object-server
    
    [app:object-server]
    use = egg:swift#object
    
    [object-replicator]
    vm_test_mode = yes
    
    [object-updater]
    
    [object-auditor]
  12. 创建 /etc/swift/object-server/2.conf:

    [DEFAULT]
    devices = /srv/2/node
    mount_check = false
    bind_port = 6020
    user = <your-user-name>
    
    log_facility = LOG_LOCAL3
    
    [pipeline:main]
    pipeline = object-server
    
    [app:object-server]
    use = egg:swift#object
    
    [object-replicator]
    vm_test_mode = yes
    
    [object-updater]
    
    [object-auditor]
  13. 创建 /etc/swift/object-server/3.conf:

    [DEFAULT]
    devices = /srv/3/node
    mount_check = false
    bind_port = 6030
    user = <your-user-name>
    log_facility = LOG_LOCAL4
    
    [pipeline:main]
    pipeline = object-server
    
    [app:object-server]
    use = egg:swift#object
    
    [object-replicator]
    vm_test_mode = yes
    
    [object-updater]
    
    [object-auditor]
  14. 创建 /etc/swift/object-server/4.conf:

    [DEFAULT]
    devices = /srv/4/node
    mount_check = false
    bind_port = 6040
    user = <your-user-name>
    log_facility = LOG_LOCAL5
    
    [pipeline:main]
    pipeline = object-server
    
    [app:object-server]
    use = egg:swift#object
    
    [object-replicator]
    vm_test_mode = yes
    
    [object-updater]
    
    [object-auditor]

配置脚本运行 Swift¶

  1. 创建 ~/bin/resetswift.

    如果选择了“在已有的分区上建立存储分区”,那么如下脚本中,`/dev/sdb1` 需替换成 /srv/swift-disk.

    如果没有选择“按照个人需要设置 rsyslog ,生成特有的日志文件”, 请注释掉 find /var/log/swift... 这一行:

    #!/bin/bash
    
    swift-init all stop
    find /var/log/swift -type f -exec rm -f {} /;
    sudo umount /mnt/sdb1
    sudo mkfs.xfs -f -i size=1024 /dev/sdb1
    sudo mount /mnt/sdb1
    sudo mkdir /mnt/sdb1/1 /mnt/sdb1/2 /mnt/sdb1/3 /mnt/sdb1/4
    sudo chown <your-user-name>:<your-group-name> /mnt/sdb1/*
    mkdir -p /srv/1/node/sdb1 /srv/2/node/sdb2 /srv/3/node/sdb3 /srv/4/node/sdb4
    sudo rm -f /var/log/debug /var/log/messages /var/log/rsyncd.log /var/log/syslog
    sudo service rsyslog restart
    sudo service memcached restart
  2. 创建 ~/bin/remakerings:

    #!/bin/bash
    
    cd /etc/swift
    
    rm -f *.builder *.ring.gz backups/*.builder backups/*.ring.gz
    
    swift-ring-builder object.builder create 18 3 1
    swift-ring-builder object.builder add z1-127.0.0.1:6010/sdb1 1
    swift-ring-builder object.builder add z2-127.0.0.1:6020/sdb2 1
    swift-ring-builder object.builder add z3-127.0.0.1:6030/sdb3 1
    swift-ring-builder object.builder add z4-127.0.0.1:6040/sdb4 1
    swift-ring-builder object.builder rebalance
    swift-ring-builder container.builder create 18 3 1
    swift-ring-builder container.builder add z1-127.0.0.1:6011/sdb1 1
    swift-ring-builder container.builder add z2-127.0.0.1:6021/sdb2 1
    swift-ring-builder container.builder add z3-127.0.0.1:6031/sdb3 1
    swift-ring-builder container.builder add z4-127.0.0.1:6041/sdb4 1
    swift-ring-builder container.builder rebalance
    swift-ring-builder account.builder create 18 3 1
    swift-ring-builder account.builder add z1-127.0.0.1:6012/sdb1 1
    swift-ring-builder account.builder add z2-127.0.0.1:6022/sdb2 1
    swift-ring-builder account.builder add z3-127.0.0.1:6032/sdb3 1
    swift-ring-builder account.builder add z4-127.0.0.1:6042/sdb4 1
    swift-ring-builder account.builder rebalance
  3. 创建 ~/bin/startmain:

    #!/bin/bash
    
    swift-init main start
  4. 创建 ~/bin/startrest:

    #!/bin/bash
    
    swift-init rest start
  5. chmod +x ~/bin/*

  6. remakerings

  7. cd ~/swift/trunk; ./.unittests

  8. startmain (警告 Unable to increase file descriptor limit.  Running as non-root? 是正常的)

  9. recreateaccounts

  10. 使用curl获得 X-Storage-UrlX-Auth-Token: curl -v -H 'X-Storage-User: test:tester' -H 'X-Storage-Pass: testing' http://127.0.0.1:8080/auth/v1.0

  11. 检测一下是否可以 GET 到 account: curl -v -H 'X-Auth-Token: <上条命令的X-Auth-Token返回结果>' <上条命令的X-Storage-Url返回结果>

  12. 检测一下 swift 命令是否工作正常: swift -A http://127.0.0.1:8080/auth/v1.0 -U test:tester -K testing stat

  13. cp ~/swift/trunk/test/functional/sample.conf /etc/swift/func_test.conf

  14. cd ~/swift/trunk; ./.functests (注意: 功能测试会删除先前配置的任何account信息!)

  15. cd ~/swift/trunk; ./.probetests (注意: probe 测试会重设你的swift环境,因为调用了 resetswift 。)

如果需要文档,请参照如下:

On Ubuntu:
  1. sudo apt-get install python-sphinx 安装 Sphinx
  2. python setup.py build_sphinx 构建文档
On MacOS:
  1. sudo easy_install -U sphinx 安装 Sphinx
  2. python setup.py build_sphinx 构建文档

调试相关¶

如果按照如上配置后出现了问题,swift仍然未按预期执行,或者测试失败、auth无法认证,之类总总,以下可能会帮助你发现和解决问题:

  1. 所有事情都记录在 /var/log/syslog, 因此出现问题首先应该查看这里,看看是否出现什么错误的提示(多数情况会是python的一些反馈)。
  2. 确保所有server 的服务都是开启的。基本上任何正常情况下 Proxy、 Account、 Container、Object server都应该是正常运行在后台的。
  3. 如果上述server没有开启,syslog中也没有任何错误被记录。那么最好手动启动一下服务,例如:swift-object-server /etc/swift/object-server/1.conf 将启动object server。如果在syslog中没有记录任何事情,那么在手动启动后应该会看到相应的反馈。

你可能感兴趣的:(object,File,user,ubuntu,Path,testing)