设为首页 收藏本站
查看: 863|回复: 0

[经验分享] OpenStack Swift集群部署流程与简单使用

[复制链接]

尚未签到

发表于 2015-4-11 13:40:38 | 显示全部楼层 |阅读模式
  之前介绍了《OpenStack Swift All In One安装部署流程与简单使用》,那么接下来就说一说Swift集群部署吧。
1. 简介

    本文档详细描述了使用两台PC部署一个小型Swift集群的过程,并给出一些简单的使用实例。本文档假定如下前提条件:

  • 使用Ubuntu操作系统。
  • 每台机器都运行Swift的所有服务,既是Proxy Server,又是Storage Server,用户可以向任何一台机器发起存储服务请求。
  • 采用Swift自带的TempAuth作为用户的身份与权限认证。
  • 所有机器构成memcached集群来提供Token缓存服务。
  • 所有操作均在root用户下进行,并使用root作为Swift的用户和组。
  • 所有机器都运行在局域网中。
  • 使用回环设备和XFS文件系统作为Swift底层存储。
    阅读本文档前,可以先阅读文档《Swift All In One安装部署流程》,学习Swift单机部署的相关知识。
  2. 安装部署
  2.1 准备环境
  
PC 1

PC 2

  机器类型:
  PC物理机
  PC物理机
  操作系统:
  Ubuntu-12.04-desktop-64位
  Ubuntu-12.04-desktop-64位
  用户类型:
  root
  root
  数据库:
  sqlite3
  sqlite3
  IP地址:
  192.168.3.52(局域网)
  192.168.3.53(局域网)
  Proxy Server
  是
  是
  Storage Server
  是
  是
  Auth
  TempAuth
  TempAuth
  Token缓存:
  memcached
  memcached
  2.2 版本说明
    本文档基于:

  • 官方文档:Swift 1.7.7-dev documentation -> Instructions for a Multiple Server Swift Installation (Ubuntu)
  • Swift版本:1.7.6
  • python-swiftclient版本:1.2.0
    请确保安装的Swift版本与本文档中的版本相同。如有问题,请参考官网的更新文档。
  2.3 安装软件环境
  首先,PC1PC2安装Swift所需的软件环境(确保你的机器可以访问互联网),例如,sqlite3作为本地数据库,memcached作为Token缓存。Ubuntu-12.04已自带rsync工具,因此不用另行安装。
  # apt-get install python-software-properties
  # add-apt-repository ppa:swift-core/release
  # apt-get update
  # apt-get install curl gcc git-core memcached python-coverage python-dev python-nose python-setuptools python-simplejson python-xattr sqlite3 xfsprogs python-eventlet python-greenlet python-pastedeploy python-netifaces python-pip
  # pip install mock
2.4 安装Swift
    在PC1PC2执行以下操作,安装Swift服务:
    1. 在主目录(root用户)下创建swift目录。然后在该下创建bin目录,用于存放我们手动创建的Swift相关脚本文件。
  # mkdir ~/swift
  # mkdir –p ~/swift/bin
    2. 进入~/swift目录,然后从git上获取Swift和python-swiftclient源代码,下载到本地。当然也可以使用以前下载的1.7.6版本的Swift代码和1.2.0版本的python-swiftclient代码,将代码目录放至~/swift目录下即可。
  # cd ~/swift
  # git clone https://github.com/openstack/swift.git
  # git clone https://github.com/openstack/python-swiftclient.git
    3. 然后使用上述代码以开发的方式安装Swift和python-swiftclient(假设Swift的代码目录为~/swift/swift_1.7.6,python-swiftclient的代码目录为~/swift/python-swiftclient_1.2.0)。最终,两者都会被安装到python的dist-packages中。
  # cd ~/swift/swift_1.7.6
  # python setup.py develop
  # cd ~/swift/python-swiftclient_1.2.0
  # python setup.py develop
    4. 安装过程中,会自动检查其所需的依赖项,并自动进行下载安装。文件~/swift/swift_1.7.6/tools/pip-requires中(内容如下所示)记录了Swift所需的依赖项,setup.py就是根据该文件来检查依赖项的。
  eventlet>=0.9.15
  greenlet>=0.3.1
  netifaces>=0.6
  pastedeploy>=1.3.3
  simplejson>=2.0.9
  xattr>=0.4
  python-swiftclient
    5. 类似的,文件~/swift/python-swiftclient_1.2.0/tools/pip-requires中(内容如下所示)记录了python-swiftclient所需的依赖项。
  simplejson
    6. 修改~/.bashrc文件,在文件尾部添加如下内容:(该文件包含当前用户Bash Shell的环境变量信息,用以标明Swift测试配置文件路径和启动程序路径)

  export SWIFT_TEST_CONFIG_FILE=/etc/swift/test.conf
  export PATH=${PATH}:~/swift/bin
    7. 然后执行如下命令,以使修改生效。一旦生效,终生有效哦亲!。

  # . ~/.bashrc
    8. 创建/var/run/swift目录,并修改其权限。该目录是Swift运行时所需的,用于存放各个服务进程的pid文件等内容。

  # mkdir -p /var/run/swift
  # chown root:root /var/run/swift
    9. /var/run/swift目录在操作系统关闭后会消失,因此需要在操作系统再次启动时进行创建。我们可以编辑/etc/rc.local文件,在exit 0 之前添加如下内容来实现该目录的自动创建。
  mkdir -p /var/run/swift
  chown root:root /var/run/swift
2.5 配置Storage Server
2.5.1 配置存储空间
    Swift能够运行在任何支持扩展属性的现代文件系统之上,Swift官方推荐用户使用XFS文件系统。经过官方的验证,认为XFS文件系统能为Swift的用例提供最佳的性能,并且通过了完整的稳定性测试。
    对于任何一台PC,我们可以选择使用一个分区作为存储(Using a partition for storage),也可以使用一个回环设备作为存储(Using a loopback device for storage)。由于实验环境所限,本文档使用回环设备作为存储。若希望使用独立分区作为存储,请参考官方文档。我们需要在每一台PC上创建回环设备,作为每一个Swift节点的数据存储空间。PC1PC2执行以下操作:
    1. 选择一个位置创建存储文件夹。
  # mkdir /srv
    2. 在存储文件夹中创建XFS格式的回环设备,即/srv/swift-disk文件。

  • 第一条命令:if=/dev/zero表示空输入,即自动填充0;of=/srv/swift-disk表示输出到指定文件;bs=1024表示同时设置读入/输出的块大小(字节),即每次读入/输出1024字节的数据块;count=0表示拷贝0个块,块大小由bs指定;seek=50000000从输出文件开头跳过50000000个块后再开始复制。第一条命令的结果是创建了一个50000000*1024字节大小的文件(约50GB,未自动填充0),为创建回环设备做准备。
  • 第二条命令:.xfs表示创建的是XFS格式的回环设备;-i size=1024,当数据小于1024KB时,写入inode中,当数据大于1024KB时,写入block中,默认值为256KB;还可以考虑设置-l size=128m,可显著提升XFS文件系统删除文件、拷贝文件等操作的速度,但需要大内存的支持,默认值的是10m。第二条命令的结果是在上述文件的基础上创建了XFS回环设备。
  # dd if=/dev/zero of=/srv/swift-disk bs=1024 count=0 seek=50000000
  # mkfs.xfs -f -i size=1024 /srv/swift-disk
    3. 编辑/etc/fstab文件,在文件末尾添加如下内容:
  /srv/swift-disk /srv/node/sdb1 xfs loop,noatime,nodiratime,nobarrier,logbufs=8 0 0
    4. 创建回环设备挂载点文件夹,并执行挂载。
  # mkdir -p /srv/node/sdb1
  # mount /srv/node/sdb1
    5. 改变挂载点文件夹的权限。
  # chown -R root:root /srv/node
2.5.2 配置Swift
    在PC1PC2创建Swift的配置文件目录。

  # mkdir -p /etc/swift
  # chown -R root:root /etc/swift/
    在PC1中创建配置文件/etc/swift/swift.conf,编辑其内容(如下所示),然后复制到PC2中的/etc/swift目录下。该文件记录了Swift使用的哈希后缀,用于一致性哈希计算。集群中的每个节点都必须保存该文件,并且完全相同。

  [swift-hash]
  # random unique string that can never change (DO NOT LOSE)
  swift_hash_path_suffix = jtangfs
2.5.3 配置rsync
    rsync是类Unix系统下的数据镜像备份工具。Swift对象副本的复制更新是基于推送模式的。对象的复制更新使用rsync将文件同步到对等节点,Account和Container的复制更新则通过HTTP或rsync来推送数据库文件上丢失的记录。PC1PC2创建rsync的配置文件/etc/rsyncd.conf,添加如下内容:(下面以PC1为例,其中的addressPC1rsync服务端监听的IP地址,等待客户端推送复制更新,这里同样推荐设置为内网地址)
  uid = root
  gid = root
  log file = /var/log/rsyncd.log
  pid file = /var/run/rsyncd.pid
  address = 192.168.3.52
  
  [account]
  max connections = 2
  path = /srv/node/
  read only = false
  lock file = /var/lock/account.lock
  
  [container]
  max connections = 2
  path = /srv/node/
  read only = false
  lock file = /var/lock/container.lock
  
  [object]
  max connections = 2
  path = /srv/node/
  read only = false
  lock file = /var/lock/object.lock
    为了使rsync能够开机启动,需要PC1PC2编辑配置文件/etc/default/rsync,将参数RSYNC_ENABLE设置为true,然后启动rsync服务。
  # perl -pi -e 's/RSYNC_ENABLE=false/RSYNC_ENABLE=true/' /etc/default/rsync
  # service rsync restart
2.5.4 配置存储服务(account, container, object)
    在PC1PC2执行以下操作,以完成每个节点上的account、container和object存储服务的配置。下面以PC1上的操作为例。
    1. 配置account存储服务,创建配置文件/etc/swift/account-server.conf,并添加以下内容:(其中,devices参数表示Parent directory of where devices are mounted,默认值为/srv/node;log_facility表示日志标签,与独立日志的配置有关)
  [DEFAULT]
  devices = /srv/node
  mount_check = false
  bind_ip = 192.168.3.52
  bind_port = 6002
  workers = 4
  user = root
  log_facility = LOG_LOCAL4
  
  [pipeline:main]
  pipeline = account-server
  
  [app:account-server]
  use = egg:swift#account
  
  [account-replicator]
  
  [account-auditor]
  
  [account-reaper]
    2. 配置container存储服务,创建配置文件/etc/swift/container-server.conf,并添加以下内容:
  [DEFAULT]
  devices = /srv/node
  mount_check = false
  bind_ip = 192.168.3.52
  bind_port = 6001
  workers = 4
  user = root
  log_facility = LOG_LOCAL3
  
  [pipeline:main]
  pipeline = container-server
  
  [app:container-server]
  use = egg:swift#container
  
  [container-replicator]
  
  [container-updater]
  
  [container-auditor]
  
  [container-sync]
    3. 配置object存储服务,创建配置文件/etc/swift/object-server.conf,并添加以下内容:
  [DEFAULT]
  devices = /srv/node
  mount_check = false
  bind_ip = 192.168.3.52
  bind_port = 6000
  workers = 4
  user = root
  log_facility = LOG_LOCAL2
  
  [pipeline:main]
  pipeline = object-server
  
  [app:object-server]
  use = egg:swift#object
  
  [object-replicator]
  
  [object-updater]
  
  [object-auditor]
2.5.5 配置独立日志(可选)
    Swift默认将日志信息输出到文件/var/log/syslog中。如果要按照个人需求设置rsyslog,生成特有的Swift日志文件,则需要PC1PC2执行以下操作,完成独立日志的配置。
    1. 创建日志配置文件/etc/rsyslog.d/10-swift.conf,编辑内容如下:(增加account、container、object的日志配置信息)
  # Uncomment the following to have a log containing all logs together
  #local1,local2,local3,local4,local5.*   /var/log/swift/all.log
  
  # 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
  
  local2.*;local2.!notice /var/log/swift/object.log
  local2.notice           /var/log/swift/ object.error
  local2.*                ~
  
  local3.*;local3.!notice /var/log/swift/container.log
  local3.notice           /var/log/swift/ container.error
  local3.*                ~
  
  local4.*;local4.!notice /var/log/swift/account.log
  local4.notice           /var/log/swift/ account.error
  local4.*                ~
    2. 编辑文件/etc/rsyslog.conf,更改参数$PrivDropToGroup为adm。
  $PrivDropToGroup adm
    3. 创建/var/log/swift目录,用于存放独立日志。此外,上面的10-swift.conf 文件中设置了输出Swift Proxy Server每小时的stats日志信息,于是也要创建/var/log/swift/hourly目录。
  # mkdir -p /var/log/swift/hourly
    4. 更改Swift独立日志目录的权限。
  # chown -R syslog.adm /var/log/swift
  # chmod -R g+w /var/log/swift
    5. 重启rsyslog服务
  # service rsyslog restart
2.6 配置Proxy Server
2.6.1 配置memcached
    Proxy Server使用memcached来缓存用户的Token。我们可根据具体需求修改memcached配置文件/etc/memcached.conf。例如,考虑到安全因素,只允许memcached在局域网内被访问,则应将其监听的IP地址修改为局域网IP地址(默认为127.0.0.1,内外网通吃)。推荐配置为内部的、非公网的IP地址。PC1上的修改为192.168.3.52PC2上的修改为192.168.3.53,并在完成后重启memcached服务。下面以PC1上执行的命令为例:
  # perl -pi -e "s/-l 127.0.0.1/-l 192.168.3.52/" /etc/memcached.conf
  # service memcached restart
2.6.2 配置Swift
    由于每一台PC都运行Swift的所有服务,既作为Proxy Server,又作为Storage Server,上面在配置Storage Server时已经完成了Swift的配置,此处可省略。但是,如果Proxy Server和Storage Server是分离的,那么就需要将上面的swift.conf文件复制到Proxy Server中的/etc/swift目录下。
  2.6.3 配置proxy-server
    在PC1PC2创建proxy-server配置文件/etc/swift/proxy-server.conf,添加以下内容:
  [DEFAULT]
  bind_port = 8080
  user = root
  workers = 8
  log_facility = LOG_LOCAL1
  
  [pipeline:main]
  pipeline = healthcheck cache tempauth proxy-logging proxy-server
  
  [app:proxy-server]
  use = egg:swift#proxy
  allow_account_management = true
  account_autocreate = 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
  reseller_prefix = AUTH
  # account和token的命名前缀,注意此处不可以加“_”。
  # 例如X-Storage-Url为http://192.168.3.52:8080/v1/AUTH_test
  # 例如X-Auth-Token为AUTH_tk440e9bd9a9cb46d6be07a5b6a585f7d1
  token_life = 86400
  # token的有效期,单位:秒。
  
  [filter:healthcheck]
  use = egg:swift#healthcheck
  
  [filter:cache]
  use = egg:swift#memcache
  memcache_servers = 192.168.3.52:11211,192.168.3.53:11211
  
  [filter:proxy-logging]
  use = egg:swift#proxy_logging
    配置参数中:memcache_servers指定memcached地址,可配置为集群,以“,”分隔;workers为工作线程数,推荐配置为CPU核心数的2-4倍;“user_admin_admin = admin .admin .reseller_admin”中,user_为前缀,第一个“admin”为账户名,第二个“admin”为用户名,第三个“admin为”密码,“.admin”为角色信息,“.reseller_admin”表示超级管理员角色(可操作任何账户)。
    “user_admin_admin = admin .admin .reseller_admin”后面还可以增加一项,显示地指定Swift为该用户提供的存储服务入口(PC1为admin用户提供的默认值是http://192.168.3.52:8080/v1/AUTH_admin)。admin用户通过认证后,Swift会把Token和该返回给用户,此后admin用户可以使用该访问Swift来请求存储服务。特别值得说明的是,如果在Proxy Server前面增加了负载均衡器(如nginx),那么该应该指向负载均衡器,使得用户在通过认证后,向负载均衡器发起存储请求,再由负载均衡器将请求均衡地分发给Proxy Server集群。此时的形如http://:/v1/AUTH_admin。
    Swift同时支持http和https协议,本文档中我们使用http协议,若想使用https协议,则需要进行ssl的配置,具体操作请查看参考链接中的内容。
  2.6.4 配置独立日志(可选)
    上文中已经做了说明,此处可用于设置Proxy Server的独立日志,需要PC1PC2执行以下操作,完成其配置。
    1. 编辑日志配置文件/etc/rsyslog.d/10-swift.conf,增加proxy的日志配置信息:
  # Uncomment the following to have a log containing all logs together
  #local1,local2,local3,local4,local5.*   /var/log/swift/all.log
  
  # 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/proxy.log
  local1.notice           /var/log/swift/ proxy.error
  local1.*                ~
  
  local2.*;local2.!notice /var/log/swift/object.log
  local2.notice           /var/log/swift/ object.error
  local2.*                ~
  
  local3.*;local3.!notice /var/log/swift/container.log
  local3.notice           /var/log/swift/ container.error
  local3.*                ~
  
  local4.*;local4.!notice /var/log/swift/account.log
  local4.notice           /var/log/swift/ account.error
  local4.*                ~
    2. 重启rsyslog服务
  # service rsyslog restart
2.6.5 创建Ring
  Ring共有三种,分别为Account Ring、Container Ring、Object Ring。Ring需要在整个集群中保持完全相同,因此需要在某一台PC上创建Ring文件,然后复制到其他PC上。我们将在PC1上进行Ring的创建,然后复制到PC2
        首先,使用如下命令创建三个Ring。其中,18表示Ring的分区数为218;2表示对象副本数为2;1表示分区数据的迁移时间为1小时(这个解释有待证实)。
  # cd /etc/swift
  # swift-ring-builder account.builder create 18 2 1
  # swift-ring-builder container.builder create 18 2 1
  # swift-ring-builder object.builder create 18 2 1
    然后向三个Ring中添加存储设备。其中z1和z2表示zone1和zone2;sdb1为Swift使用的存储空间,即上文挂在的回环设备;100代表设备的权重。
  # cd /etc/swift
  # swift-ring-builder account.builder add z1-192.168.3.52:6002/sdb1 100
  # swift-ring-builder container.builder add z1-192.168.3.52:6001/sdb1 100
  # swift-ring-builder object.builder add z1-192.168.3.52:6000/sdb1 100
  
  # swift-ring-builder account.builder add z2-192.168.3.53:6002/sdb1 100
  # swift-ring-builder container.builder add z2-192.168.3.53:6001/sdb1 100
  # swift-ring-builder object.builder add z2-192.168.3.53:6000/sdb1 100
    Ring文件创建完毕后,可以通过以下命令来查看刚才添加的信息,以验证是否输入正确。若发现错误,以Account Ring为例,可以使用swift-ring-builder account.builder的删除方法删除已添加的设备,然后重新添加。
  # cd /etc/swift
  # swift-ring-builder account.builder
  # swift-ring-builder container.builder
  # swift-ring-builder object.builder
    完成设备的添加后,我们还需要创建Ring的最后一步,即平衡环。这个过程需要消耗一些时间。成功之后,会在当前目录生成account.ring.gz、container.ring.gz和object.ring.gz三个文件,这三个文件就是所有节点(包括Proxy Server和Storage Server)要用到的Ring文件。我们需要将这三个文件拷贝到PC2中的/etc/swift目录下
  # cd /etc/swift
  # swift-ring-builder account.builder rebalance
  # swift-ring-builder container.builder rebalance
  # swift-ring-builder object.builder rebalance
    由于我们统一采用root用户部署,所以要确保所有节点上的/etc/swift目录都属于root用户。
  # chown -R root:root /etc/swift
2.7 创建Swift执行脚本
  为便于操作,我们可以PC1PC2创建以下Swift脚本。
    1. 创建~/swift/bin/remakerings脚本文件,添加以下内容,即可一键完成Ring的重新创建,当然具体内容需要根据实际环境进行修改。
  #!/bin/bash
  
  cd /etc/swift
  
  rm -f *.builder *.ring.gz backups/*.builder backups/*.ring.gz
  
  swift-ring-builder account.builder create 18 2 1
  swift-ring-builder container.builder create 18 2 1
  swift-ring-builder object.builder create 18 2 1
  
  swift-ring-builder account.builder add z1-192.168.3.52:6002/sdb1 100
  swift-ring-builder container.builder add z1-192.168.3.52:6001/sdb1 100
  swift-ring-builder object.builder add z1-192.168.3.52:6000/sdb1 100
  
  swift-ring-builder account.builder add z2-192.168.3.53:6002/sdb1 100
  swift-ring-builder container.builder add z2-192.168.3.53:6001/sdb1 100
  swift-ring-builder object.builder add z2-192.168.3.53:6000/sdb1 100
  
  swift-ring-builder account.builder rebalance
  swift-ring-builder container.builder rebalance
  swift-ring-builder object.builder rebalance
    2. 创建~/swift/bin/resetswift脚本文件,添加以下内容,即可一键清空Swift的对象数据和日志,完成重置。注意:如果使用的是独立分区存储,则需要另行处理,例如将/srv/swift-disk替换为/dev/sdb1等;如果没有使用rsyslog作为独立日志,则需要去掉“find /var/log/swift... ”和“sudo service rsyslog restart”这两行。
  #!/bin/bash
  
  swift-init all stop
  find /var/log/swift -type f -exec rm -f {} \;
  sudo umount /srv/node/sdb1
  sudo mkfs.xfs -f -i size=1024 /srv/swift-disk
  sudo mount /srv/node/sdb1
  sudo chown root:root /srv/node/sdb1
  sudo rm -f /var/log/debug /var/log/messages /var/log/rsyncd.log /var/log/syslog
  sudo service rsyslog restart
  sudo service rsync restart
  sudo service memcached restart
    3. 创建~/swift/bin/startmain脚本文件,添加以下内容,即可一键启动Swift的基本服务,包括proxy-server、account-server、container-server和object-server。
  #!/bin/bash
  
  swift-init main start
    4. 创建~/swift/bin/stopmain脚本文件,添加以下内容,即可一键关闭Swift的基本服务,包括proxy-server、account-server、container-server和object-server。
  #!/bin/bash
  
  swift-init main stop
    5. 创建~/swift/bin/startall脚本文件,添加以下内容,即可一键启动Swift的所有服务,包括proxy-server、account-server、account-replicator 、account-auditor、container-server、container-replicator、container-updater、container-auditor、object-server、object-replicator、object-updater、object-auditor。
  #!/bin/bash
  
  swift-init proxy start
  swift-init account-server start
  swift-init account-replicator start
  swift-init account-auditor start
  swift-init container-server start
  swift-init container-replicator start
  swift-init container-updater start
  swift-init container-auditor start
  swift-init object-server start
  swift-init object-replicator start
  swift-init object-updater start
  swift-init object-auditor start
    6. 创建~/swift/bin/stopall脚本文件,添加以下内容,即可一键关闭Swift的所有服务,包括proxy-server、account-server、account-replicator 、account-auditor、container-server、container-replicator、container-updater、container-auditor、object-server、object-replicator、object-updater、object-auditor。
  #!/bin/bash
  
  swift-init proxy stop
  swift-init account-server stop
  swift-init account-replicator stop
  swift-init account-auditor stop
  swift-init container-server stop
  swift-init container-replicator stop
  swift-init container-updater stop
  swift-init container-auditor stop
  swift-init object-server stop
  swift-init object-replicator stop
  swift-init object-updater stop
  swift-init object-auditor stop
    7. 完成脚本创建后,需要更改脚本权限,使之能够执行。
  # chmod +x ~/swift/bin/*
2.8 启动与关闭Swift服务
    由于我们是以开发的方式安装Swift的,所以能够执行功能单元测试。若提示“Unable to read test config /etc/swift/test.conf – file not found”,可不必理会,或手动将配置文件~/swift/swift_1.7.6/test/sample.conf复制过去。
  # cd ~/swift/swift_1.7.6
  # ./.unittests
    我们需要PC1PC2启动Proxy Server和Storage Server的服务。为了便于操作,我们直接使用上文中创建的脚本文件(在~/swift/bin目录下)运行Swift。可以使用~/swift/bin/startmain脚本文件启动Swift的基本服务;或使用~/swift/bin/startall脚本文件键启动Swift的所有服务。若提示“Unable to increase file descriptor limit.  Running as non-root?”警告为正常现象,不必理会。
  # startmain
  或
  # startall
    同样的,我们可以使用~/swift/bin/stopmain脚本文件关闭Swift的基本服务;使用~/swift/bin/stopall脚本文件键关闭Swift的所有服务。
  # stopmain
  或
  # stopall
2.9 查看Swift帮助信息
    完成安装部署后,可以使用swift --help命令查看Swift帮助信息。
  # swift --help
  Usage: swift  [options] [args]
  
  Commands:
    stat [container] [object]
      Displays information for the account, container, or object depending on the
      args given (if any).
    list [options] [container]
      Lists the containers for the account or the objects for a container. -p or
      --prefix is an option that will only list items beginning with that prefix.
      -d or --delimiter is option (for container listings only) that will roll up
      items with the given delimiter (see Cloud Files general documentation for
      what this means).
    upload [options] container file_or_directory [file_or_directory] [...]
      Uploads to the given container the files and directories specified by the
      remaining args. -c or --changed is an option that will only upload files
      that have changed since the last upload. -S  or --segment-size
      and --leave-segments are options as well (see --help for more).
    post [options] [container] [object]
      Updates meta information for the account, container, or object depending on
      the args given. If the container is not found, it will be created
      automatically; but this is not true for accounts and objects. Containers
      also allow the -r (or --read-acl) and -w (or --write-acl) options. The -m
      or --meta option is allowed on all and used to define the user meta data
      items to set in the form Name:Value. This option can be repeated. Example:
      post -m Color:Blue -m Size:Large
    download --all OR download container [options] [object] [object] ...
      Downloads everything in the account (with --all), or everything in a
      container, or a list of objects depending on the args given. For a single
      object download, you may use the -o [--output]  option to
      redirect the output to a specific file or if "-" then just redirect to
      stdout.
    delete [options] --all OR delete container [options] [object] [object] ...
      Deletes everything in the account (with --all), or everything in a
      container, or a list of objects depending on the args given. Segments of
      manifest objects will be deleted as well, unless you specify the
      --leave-segments option.
  
  Example:
    swift -A https://auth.api.rackspacecloud.com/v1.0 -U user -K key stat
  
  Options:
    --version             show program's version number and exit
    -h, --help            show this help message and exit
    -s, --snet            Use SERVICENET internal network
    -v, --verbose         Print more info
    -q, --quiet           Suppress status output
    -A AUTH, --auth=AUTH  URL for obtaining an auth token
    -V AUTH_VERSION, --auth-version=AUTH_VERSION
                          Specify a version for authentication. Defaults to 1.0.
    -U USER, --user=USER  User name for obtaining an auth token.
    -K KEY, --key=KEY     Key for obtaining an auth token.
    --os-username=
                          Openstack username. Defaults to env[OS_USERNAME].
    --os-password=
                          Openstack password. Defaults to env[OS_PASSWORD].
    --os-tenant-id=
                          OpenStack tenant ID. Defaults to env[OS_TENANT_ID]
    --os-tenant-name=
                          Openstack tenant name. Defaults to
                          env[OS_TENANT_NAME].
    --os-auth-url=
                          Openstack auth URL. Defaults to env[OS_AUTH_URL].
    --os-auth-token=
                          Openstack token. Defaults to env[OS_AUTH_TOKEN]
    --os-storage-url=
                          Openstack storage URL. Defaults to env[OS_STORAGE_URL]
    --os-region-name=
                          Openstack region name. Defaults to env[OS_REGION_NAME]
    --os-service-type=
                          Openstack Service type. Defaults to
                          env[OS_SERVICE_TYPE]
    --os-endpoint-type=
                          Openstack Endpoint type. Defaults to
                          env[OS_ENDPOINT_TYPE]
    --insecure            Allow swiftclient to access insecure keystone server.
                          The keystone's certificate will not be verified.
3. 使用实例
  启动PC1和PC2上的Swift服务后,我们交替地在PC1和PC2上执行操作,并随机使用两者提供的storage-url,如果用户验证和存储服务全部正确,则表明Swift集群部署成功。
3.1 用curl测试
    我们先使用curl测试几个简单的命令。
    1. 在PC1上访问192.168.3.52,进行tester用户验证,获取Token和storage-url。
  # curl -k -v -H 'X-Storage-User: test:tester' -H 'X-Storage-Pass: testing' http://192.168.3.52:8080/auth/v1.0
  * About to connect() to 192.168.3.52 port 8080 (#0)
  *   Trying 192.168.3.52... connected
  > GET /auth/v1.0 HTTP/1.1
  > User-Agent: curl/7.22.0 (x86_64-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 librtmp/2.3
  > Host: 192.168.3.52:8080
  > Accept: */*
  > X-Storage-User: test:tester
  > X-Storage-Pass: testing
  >
  < HTTP/1.1 200 OK
  < X-Storage-Url: http://192.168.3.52:8080/v1/AUTH_test
  < X-Auth-Token: AUTH_tk440e9bd9a9cb46d6be07a5b6a585f7d1
  < Content-Type: text/html; charset=UTF-8
  < X-Storage-Token: AUTH_tk440e9bd9a9cb46d6be07a5b6a585f7d1
  < Content-Length: 0
  < Date: Wed, 20 Mar 2013 06:13:15 GMT
  <
  * Connection #0 to host 192.168.3.52 left intact
  * Closing connection #0
    2. 在PC1上访问192.168.3.52,查看test账户的状态信息。
  # curl -k -v -H 'X-Auth-Token: AUTH_tk440e9bd9a9cb46d6be07a5b6a585f7d1' http://192.168.3.52:8080/v1/AUTH_test
  * About to connect() to 192.168.3.52 port 8080 (#0)
  *   Trying 192.168.3.52... connected
  > GET /v1/AUTH_test HTTP/1.1
  > User-Agent: curl/7.22.0 (x86_64-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 librtmp/2.3
  > Host: 192.168.3.52:8080
  > Accept: */*
  > X-Auth-Token: AUTH_tk440e9bd9a9cb46d6be07a5b6a585f7d1
  >
  < HTTP/1.1 204 No Content
  < Content-Length: 0
  < Accept-Ranges: bytes
  < X-Timestamp: 1363760036.52552
  < X-Account-Bytes-Used: 0
  < X-Account-Container-Count: 0
  < Content-Type: text/html; charset=UTF-8
  < X-Account-Object-Count: 0
  < Date: Wed, 20 Mar 2013 06:13:56 GMT
  <
  * Connection #0 to host 192.168.3.52 left intact
  * Closing connection #0
    3. 在PC1上访问192.168.3.53,查看test账户的状态信息。
  # curl -k -v -H 'X-Auth-Token: AUTH_tk440e9bd9a9cb46d6be07a5b6a585f7d1' http://192.168.3.53:8080/v1/AUTH_test
  * About to connect() to 192.168.3.53 port 8080 (#0)
  *   Trying 192.168.3.53... connected
  > GET /v1/AUTH_test HTTP/1.1
  > User-Agent: curl/7.22.0 (x86_64-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 librtmp/2.3
  > Host: 192.168.3.53:8080
  > Accept: */*
  > X-Auth-Token: AUTH_tk440e9bd9a9cb46d6be07a5b6a585f7d1
  >
  < HTTP/1.1 204 No Content
  < Content-Length: 0
  < Accept-Ranges: bytes
  < X-Timestamp: 1363760036.52552
  < X-Account-Bytes-Used: 0
  < X-Account-Container-Count: 0
  < Content-Type: text/html; charset=UTF-8
  < X-Account-Object-Count: 0
  < Date: Wed, 20 Mar 2013 06:15:19 GMT
  <
  * Connection #0 to host 192.168.3.53 left intact
  * Closing connection #0
    4. 在PC2上访问192.168.3.52,查看test账户的状态信息。
  # curl -k -v -H 'X-Auth-Token: AUTH_tk440e9bd9a9cb46d6be07a5b6a585f7d1' http://192.168.3.52:8080/v1/AUTH_test
  * About to connect() to 192.168.3.52 port 8080 (#0)
  *   Trying 192.168.3.52... connected
  > GET /v1/AUTH_test HTTP/1.1
  > User-Agent: curl/7.22.0 (x86_64-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 librtmp/2.3
  > Host: 192.168.3.52:8080
  > Accept: */*
  > X-Auth-Token: AUTH_tk440e9bd9a9cb46d6be07a5b6a585f7d1
  >
  < HTTP/1.1 204 No Content
  < Content-Length: 0
  < Accept-Ranges: bytes
  < X-Timestamp: 1363760036.52552
  < X-Account-Bytes-Used: 0
  < X-Account-Container-Count: 0
  < Content-Type: text/html; charset=UTF-8
  < X-Account-Object-Count: 0
  < Date: Wed, 20 Mar 2013 06:17:01 GMT
  <
  * Connection #0 to host 192.168.3.52 left intact
  * Closing connection #0
     上述测试一切正常,表明curl测试通过。
  3.2 用Swift客户端测试
    接着,我们使用Swift客户端进行测试。
    1. 在PC1上访问192.168.3.53,查看test账户的状态信息。
  # swift -A http://192.168.3.53:8080/auth/v1.0 -U test:tester -K testing stat
     Account: AUTH_test
  Containers: 0
     Objects: 0
       Bytes: 0
  Accept-Ranges: bytes
  X-Timestamp: 1363760036.52552
  Content-Type: text/plain; charset=utf-8
  
    2. 在PC1上访问192.168.3.52,在test账户下创建名为myfiles的container。
  # swift -A http://192.168.3.52:8080/auth/v1.0 -U test:tester -K testing post myfiles
  
  
    3. 在PC1上访问192.168.3.53,显示test账户下的container列表。
  # swift -A http://192.168.3.53:8080/auth/v1.0 -U test:tester -K testing list
  myfiles
  
    4. 在PC2上访问192.168.3.52,显示test账户下的container列表。
  # swift -A http://192.168.3.52:8080/auth/v1.0 -U test:tester -K testing list
  myfiles
  
    5. 在PC2上访问192.168.3.53,在刚才创建的container下上传文件。上传完成后,Swift服务端会以完整路径作为文件名。
  # swift -A http://192.168.3.53:8080/auth/v1.0 -U test:tester -K testing upload myfiles ~/file
  root/file
  
    6. 在PC1上访问192.168.3.52,显示刚才创建的container下的文件列表。
  # swift -A http://192.168.3.52:8080/auth/v1.0 -U test:tester -K testing list myfiles
  root/file
  
    7. 在PC1上访问192.168.3.52,下载刚才上传的文件。给定的文件名必须是其完整路径,例如上传的文件为~/file,服务端记录的文件名为root/file,于是下载时也要给文件名root/file,而不能是file。最终,文件会被下载到~/root目录下,成为~/root/file。可以使用额外的命令参数来决定下载位置,详情参考swift --help。
  # swift -A http://192.168.3.52:8080/auth/v1.0 -U test:tester -K testing download myfiles root/file
  root/file [headers 0.041s, total 0.065s, 0.000s MB/s]
     上述测试一切正常,表明Swift客户端测试通过。
  4. 参考链接
4.1 官方连接

  • Instructions for a Multiple Server Swift Installation (Ubuntu)
      http://docs.openstack.org/developer/swift/howto_installmultinode.html

  • SAIO - Swift All In One
      http://docs.openstack.org/developer/swift/development_saio.html

  • Swift 1.8.0-dev documentation -> Deployment Guide
      http://docs.openstack.org/developer/swift/deployment_guide.html
4.2 非官方链接

  • OpenStack Hands on lab 2: Swift安装并使用Keystone做身份验证
      http://liangbo.me/index.php/2012/03/29/openstack-hands-on-lab-2-swift-installation-with-keystone/

  • OpenStack Swift Install Multi Node
      http://blog.iyunv.com/zzcase/article/details/6578520

  • Swift部署和动态扩展
      http://www.kissthink.com/archive/4175.html

  • Swift简介(实为深入讲解)
      http://www.iyunv.com/Bob-FD/archive/2012/07/25/2608413.html

  • 在Ubuntu上安装OpenStack Swift组件
      http://blog.iyunv.com/zoushidexing/article/details/7860226

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-55993-1-1.html 上篇帖子: 探索 OpenStack 之(11):cinder-api Service 启动过程分析 以及 WSGI / Paste deploy / Router 等介绍 下篇帖子: Openstack中的LoadBalancer(负载均衡)功能使用实例
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表