OpenStack Swift组件安装

今天终于有时间把最近安装Swift的过程整理一下,安装参考了一些资料,这篇博客主要是结合自己的实际把整个过程再回顾一遍,一是坚持写技术文档,二是希望对新手有点帮助。

如需转载还望注明出处:

http://blog.csdn.net/mirale/article/details/22049219


1.swift概述

swift是openstack项目的重要组成部分,即分布式文件系统,它采用对象存储(object  storage)的方式,每个文件都是一个对象,在swift里存储多份(默认3份)。swift包括2个组成部分,一个是代理服务(proxy),一个是存储服务(storage)。代理服务理解swift内部存储的拓扑逻辑,即一个具体文件位于哪个存储节点的哪个区上。它同时是一个web服务器,通过http或https对外提供REST API服务。客户端只与proxy服务打交道。

存储服务是负责文件存储的服务,由3个组件组成:account-server、container-server、object-server。其中object-server负责具体的文件存储,container-server包含到每个object的索引,account-server包含到每个container 的索引。所谓container可以理解为通常意义上的目录。这3者的关系图如下: 

            

swift的存储集群由多个zone构成,所谓zone是指物理上独立的资源,比如一台服务器、一个机架、一个机房,都可以成为一个zone。我们这里采用每台服务器作为一个zone。在swift集群里至少要有5个zone。swift具体的存储单元叫做分区(partition),分区实际上是文件系统里的子目录,每个分区都包含独立的account、container、object服务。数据复制是基于分区的。swift有3个至关重要的rings文件,里面保存了系统的zone、node、device、partitaion信息,在系统上线之初,要手工创建这3个文件。

如下是Swift架构图:

                 

2.安装环境

本测试安装环境的服务器共3台,其中1台作为代理节点,2台作为存储节点。swift默认安装要求要有5个zone,这里受实验条件限制只有2个,但是最后通过测试验证swift部署正常。操作系统为64位的Ubuntu 12.04,目前Swift官方网站上的部署环境为 Ubuntu Server 10.04,但是应该可以在大多数的Linux发行版系统上部署成功。这3台服务器的情况如下:

IP地址存储设备运行服务配置文件服务端口
192.168.1.53proxyproxy-server.conf8080
192.168.1.54/dev/sda5account container objectaccount-server.conf,container-server.conf,object-server.conf6002 6001               6000
192.168.1.55 同上同上同上同上
对于Storage服务器,要有独立于系统盘的磁盘分区,并且使用XFS文件系统。这一点在给服务器安装系统时就应该做好规划,可以专门分割一个槽(我这就专门分割出/dev/sda5),格式化为XFS文件系统,并挂载在/srv目录下,实际上存储服务器需要的存储目录为/srv/node/sda5,这里先挂在/srv目录上,后面进入系统后再修改挂载目录就很方便了。

3.安装步骤

   3.1在所有服务器上都执行

       3.1.1 更新系统:apt-get update
       3.1.2 安装系统组件:apt-get install curl gcc memcached rsync sqlite3 xfsprogs git-core python-setuptools
    3.1.3 安装python组件:apt-get install python-coverage python-dev python-nose python-simplejson python-xattr python-eventlet python-greenlet python-pastedeploy python-netifaces python-pip python-dnspython python-mock
    3.1.4 安装swift

      建立安装用户swift:adduser swift

      将swift添加到sudo组方便使用sudo:usermod -a -G sudo swift

      切换到swift用户:su - swift      (此时已经在swift的家目录下)

      下载swift: git clone https://github.com/openstack/swift.git

           安装swift:cd ~/swift;python setup.py install;cd - 

           注意运行上面最后一步时有可能会出现错误,从错误提示中发现要求pip>=1.4,原来我的python包安装程序pip版本只有1.0,所以通过pip来指定安装不低于1.4版本的pip:sudo pip install "pip>=1.4",更新之后再执行上面最后一步就OK了。

        3.1.5 创建配置文件目录:mkdir  /etc/swift;chown -R swift:swift /etc/swift
        3.1.6 创建swift运行目录:mkdir  /var/run/swift;chown swift:swift /var/run/swift    因为/var/run/swift在系统重启后会消失,将这两句加入到/etc/rc.local中exit 0之前,在每次开机时自动完成/var/run/swift目录的创建工作。

   3.2 只在proxy上执行

      3.2.1 在/etc/swift下建立swift.conf文件

            cat>/etc/swift/swift.conf<<EOF

            [swift-hash]

            #random unique strings that can never change (DO NOT LOSE)

            swift_hash_path_prefix=`od -t x8 -N 8 -A n</dev/random`

            swift_hash_path_suffix=`od -t x8 -N 8 -A n</dev/random`

            EOF

            然后将生成的/etc/swift/swift.conf拷贝到每一个storage节点的/etc/swift目录。请注意这个文件至关重要,因为swift的一次性哈希算法,就使用这里的随机字符串作为种子。对于已经在运行的swift集群,该文件不能再次变更。

      3.2.2 在proxy上启动memcached服务,默认配置文件里的Linsten地址要改一下,可被其他服务器访问到。

            perl -pi -e"s/-l 127.0.0.1/-l 192.168.1.53/" /etc/memcached.conf

            重启memcached服务:service memcached restart

      3.2.3 创建proxy-server.conf配置文件:
             proxy-server配置文件模板参考:http://docs.openstack.org/havana/config-reference/content/proxy-server-conf.html

             cat>/etc/swift/proxy-server.conf<<EOF

             [DEFAULT]

             bind_port=8080

             workers=8

             user=swift

         

             [pipeline:main]

             pipeline=healthcheck proxy-logging cache tempauth proxy-logging proxy-server

          

             [app:proxy-server]

             use=egg:swift#proxy

             allow_account_management=true

             account_autocreate=true


             [filter:proxy-logging]

             use=egg:swift#proxy_logging


             [filter:tempauth]

             use=egg:swift#tempauth

             user_system_root=testpass .admin http://192.168.1.54:8080/v1/AUTH-system


             [filter:healthcheck]

             use=egg:swift#healthcheck


             [filter:cache]

             use=egg:swift#memcache

             memcache_servers=192.168.1.54:11211

             EOF

             这里可以指定proxy使用https,但是在产品环境里,不要配置proxy使用SSL,可以在proxy前端的负载均衡器(例如nginx)那里进行SSL终结。workers参数表示工作进程数,推荐配置是跟CPU核心数保持一致。

      3.2.4 创建rings:

              cd /etc/swift

              swift-ring-builder account.builder create 8 2 1

              swift-ring-builder container.builder create 8 2 1

              swift-ring-builder object.builder create 8 2 1

              这里的参数比较重要,8代表2的8次方,创建256个分区(前面讲过,swift的存储单元是基于分区的)。分区的数量,应该是swift集群里预计的最大磁盘数量乘以100。我这里只有两个storage node,每台一个硬盘,2*100=200,2^8=256,2^7=128,所以可取8。

               2代表每个文件存储2份,请注意默认存储为3份,我这里只有两个zone,所以就存储2份了。最后一个1的单位是小时,指分区在1个小时内移动不超过1次。

       3.2.5 执行如下脚本:

              #!/bin/bash

              cd /etc/swift

               swift-ring-builder account.builder   add z1-192.168.1.55:6002/sda5 100

               swift-ring-builder container.builder add z1-192.168.1.55:6001/sda5 100

               swift-ring-builder object.builder      add z1-192.168.1.55:6000/sda5 100

               swift-ring-builder account.builder   add z2-192.168.1.56:6002/sda5 100

               swift-ring-builder container.builder add z2-192.168.1.56:6001/sda5 100

               swift-ring-builder object.builder      add z2-192.168.1.56:6000/sda5 100

               这个过程就是往rings里增加磁盘,最后一个100表示权重,越大越快的磁盘应该使用越高的权重。

           3.2.6 运行如下命令验证配置:

              swift-ring-builder account.builder

              swift-ring-builder container.builder

              swift-ring-builder object.builder

       3.2.7 运行rebalance:

              swift-ring-builder account.builder rebalance

              swift-ring-builder container.builder rebalance

              swift-ring-builder object.builder rebalance

              这个过程比较久点。

       3.2.8 将上述生成的account.ring.gz, container.ring.gz, object.ring.gz 拷贝到每一个存储节点的/etc/swift目录。
       3.2.9 启动proxy服务:swift-init proxy start

                查看端口8080状态:netstat -anp | grep 8080

                如查看到8080端口打开,没有其他报错,表明proxy服务就启动正常。

   3.3只在storage上执行

        3.3.1 如果在安装系统时已经预留出一个XFS文件格式的独立分区并挂载在/srv下(我已预留分区/dev/sda5格式化为XFS并挂在了/srv下)则只需要修改一下挂载点即可:

                 mkdir -p /srv/node/sda5

                 umount /dev/sda5

                 mount /dev/sda5 /srv/node/sda5

                 chown swift:swift /srv/node/sda5

                 chown root:root   /srv/node   注:修改/srv/node的权属为root:root是为了防止存储盘意外卸载时/srv/node文件夹下产生swift的objects。

                 设定开机挂载,修改/etc/fstab中/dev/sda5所在行:

                 /dev/sda5 /srv/node/sda5 xfs noatime,nodiratime,nobarrier,logbufs=8

        3.3.2 创建如下目录
mkdir -p /var/cache/swift
chown swift:swift /var/cache/swift
            3.3.3 创建/etc/rsyncd.conf          

cat >/etc/rsyncd.conf <<EOF
uid = swift
gid = swift
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
address = $STORAGE_LOCAL_NET_IP  #改为所在Storage节点的IP地址

[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
EOF

        3.3.4 修改/etc/default/rsync文件,将RSYNC_ENABLE=false改成RSYNC_ENABLE=true
perl -pi -e 's/RSYNC_ENABLE=false/RSYNC_ENABLE=true/' /etc/default/rsync

     3.3.5 启动rsync服务
service rsync start

       3.3.6 创建/etc/swift/account-server.conf

cat >/etc/swift/account-server.conf <<EOF
[DEFAULT]
bind_ip = $STORAGE_LOCAL_NET_IP  #改为所在Storage节点的IP地址

workers = 2

[pipeline:main]
pipeline = account-server

[app:account-server]
use = egg:swift#account

[account-replicator]

[account-auditor]

[account-reaper]
EOF
        3.3.7 创建/etc/swift/container-server.conf

cat >/etc/swift/container-server.conf <<EOF
[DEFAULT]
bind_ip = $STORAGE_LOCAL_NET_IP  #改为所在Storage节点的IP地址         
workers = 2

[pipeline:main]
pipeline = container-server

[app:container-server]
use = egg:swift#container

[container-replicator]

[container-updater]

[container-auditor]

[container-sync]
EOF
        3.3.8 创建/etc/swift/object-server.conf

cat >/etc/swift/object-server.conf <<EOF
[DEFAULT]
bind_ip = $STORAGE_LOCAL_NET_IP  #改为所在Storage节点的IP地址
workers = 2

[pipeline:main]
pipeline = object-server

[app:object-server]
use = egg:swift#object

[object-replicator]

[object-updater]

[object-auditor]
EOF
        3.3.9 开启存储服务
swift-init all start
        如果启动过程没有报错,并且6002,6001,6000端口都打开的话,说明storage node上面的部署正常。

4 测试

   在proxy-server上运行如下命令:

   4.1 获取X-Storage-Url和X-Auth-Token:

curl -k -v -H 'X-Storage-User: system:root' -H 'X-Storage-Pass: testpass' https://192.168.1.54:8080/auth/v1.0
        正常的话,结果里面包含了X-Storage-Url和X-Auth-Token两个参数

   4.2 根据上述返回的参数执行HEAD命令:

curl -k -v -H 'X-Auth-Token: <token-from-x-auth-token-above>' <url-from-x-storage-url-above>

    4.3 执行stat命令:

swift -A https://192.168.1.54:8080/auth/v1.0 -U system:root -K testpass stat
          正常的话返回类似下面的结果:

         Account:AUTH_system

         Containers:1

         Objects:0

         Bytes:0

      Accept_Ranges:bytes

      X-Timestamp:1377152716.51055

      Content-Type:text/plain;charset=utf-8

    4.4 上传两个文件到myfiles这个container

swift -A https://192.168.1.54:8080/auth/v1.0 -U system:root -K testpass upload myfiles bigfile1.tgz
swift -A https://192.168.1.54:8080/auth/v1.0 -U system:root -K testpass upload myfiles bigfile2.tgz

    4.5 下载这个container里的所有文件:

swift -A https://192.168.1.54:8080/auth/v1.0 -U system:root -K testpass download myfiles

     4.6 列出myfiles这个container里的所有文件:

swift -A https://192.168.1.54:8080/auth/v1.0 -U system:root -K testpass list myfiles

5 参考

  安装参考:http://docs.openstack.org/developer/swift/howto_installmultinode.html

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
安装OpenStack Swift,您可以按照以下步骤进行操作: 1. 在控制节点上复制swift.conf文件到/etc/swift/swift.conf,并覆盖原有文件。同样,您也需要将该文件复制到存储节点上。 2. 编辑swift.conf文件,在[swift-hash]部分中添加以下两行配置: swift_hash_path_suffix = swift swift_hash_path_prefix = swift 3. 执行以下命令克隆Swift代码库到您的系统中: git clone https://github.com/openstack/swift.git 4. 安装Swift和python-swiftclient的程序文件。这些文件会被安装在以下目录下: - /usr/local/lib/python2.7/dist-packages - /usr/share/pyshared - /usr/bin - /usr/local/bin 完成以上步骤后,您就成功安装OpenStack Swift。请注意,这只是一个简单的安装过程示例,具体的安装步骤可能会因操作系统版本、配置需求等因素而有所不同。建议您参考官方文档或相关资料以获取更详细的安装指南。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [OpenStack(Stein)安装Swift](https://blog.csdn.net/qq_41037945/article/details/115143251)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [OpenStack Swift All In One安装部署流程与简单使用](https://blog.csdn.net/weixin_30952535/article/details/94910849)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值