您的位置:首页 > 移动开发 > Swift

Openstack swift安装部署

2014-09-12 16:10 302 查看

写在前面的话(一些基本概念)

块存储&文件存储&对象存储

块存储:传统的存储结构,典型的代表是SAN。对于用户而言,块存储好比一块大磁盘,用户可以根据需要将裸设备格式化成想要的文件系统来使用。其可扩展性较差。
文件存储:典型代表是NAS。对于用户而言,文件存储好比一个共享文件夹,文件系统已存在,用户的数据以文件的形式存在于系统中。但由于以文件为传输协议,开销较大,不适用于高性能的集群搭建。
对象存储:典型代表是swift、s3。用户的每个数据对象既包含文件的元数据又包含存储数据。

数据结构

Ring(环):用于记录存储对象与物理位置间的映射关系。在涉及查询Account、Container、Object信息时,就需要查询集群的Ring信息。Ring使用Zone、Device、Partition和Replica来维护这些映射信息。Ring中每个Partition在集群中都(默认)有3个Replica。每个Partition的位置由Ring来维护,并存储在映射中。Ring文件在系统初始化时创建,之后每次增减存储节点时,需要重新平衡一下Ring。
(Zone:物理位置分区,Device:物理设备,Partition:虚拟出的物理设备,Replica:冗余副本)

算法(一致性哈希)

网上抄来的一张图,具体的算法原理网上资料很多,不再赘述




角色

认证节点:用户身份认证,官方文档说支持keystone、tempauth及swauth认证方式。本人亲测keystone与tempauth均成功,swauth没有测试过。
代理节点:节点运行代理服务,处理http请求。
存储节点:存储数据对象,其上运行account(账号)、container(容器)、和object(对象)服务。

系统架构

在来一张官网上的系统架构图



硬软件要求

内存要求

代理节点推荐16G以上的内存。

其它节点推荐4G以上的内存。

磁盘要求

非存储服务的节点推荐4块以上磁盘、单盘1T以上、以Raid0的方式组成磁盘阵列。

存储服务的节点根据存储数量的实际需求提升要求,仍然推荐以Raid0的方式组成阵列。

处理器要求

默认情况下,swift所有服务器的CPU均为支持x86_64指令集的CPU,推荐双核以上CPU。

网络要求

所有服务器之间至少为千兆网接入,推荐万兆网接入。所有节点存在于一个独立的网段中,两两互通,该网段内部互联无防火墙限制,且不存在已有的DHCP服务设备。

操作系统要求

所有服务器默认安装最新版本的64位Ubuntu 12.04版本(目前为12.04.4),推荐使用服务器版。服务器应配置允许root使用ssh方式登录,默认不安装和配置额外的软件。

安装前的准备

确定网络划分

有2个网络,一个是用与proxy server和storage server通信的内部数据网,主要是用来对对象存储的寻找,和对数据的3次备份作用,另一个是公网,也就外部网,主要是用户发送请求给proxy server,让proxy server去寻找需要的数据(root权限)。

配置更新源

安装Swift软件的依赖包(所有的依赖包都需要在线通过更新源来安装,如果没有网络,可以通过做本地源的方法来做依赖包安装)。如果找不到更新源,可修改使用其他机构提供的源。记录更新更新源的文件:/etc/apt/sources.list,把里面的列表替换成163提供的更新源(参考附录更新源)。

配置所有节点

1.安装所需软件包



建议使用apt-get安装下列软件依赖包:openssh-server,git,curl,gcc,memcached,rsync,xfsprogs,python,sqlite3

$ apt-get install ssh vim screen openssh-server
$ apt-get install curl gcc memcached rsync sqlite3 xfsprogs git-corepython-setuptools
$apt-get install python-coverage python-dev python-nose python-simplejson python-xattrpython-eventlet python-greenlet python-pastedeploy python-netifaces python-pippython-dnspython python-mock

2.下载安装swift源码

$ cd /home/swift

$ git clone https://github.com/openstack/swift.git
$cd swift

$ python setup.py install

3.创建目录

$ mkdir –p /etc/swift/

$ chown -R swift:swift /etc/swift/

4.编辑配置信息

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

[swift-hash]

#random unique strings that can never change (DO NOTLOSE)

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

注:不要忘记配置信息中的“头”,已标红

5.更改权限

在swift-server运行中创建目录/var/run/swift然后改变这个用户和组的管理权限(重启后信息会消失,所以需要重启后自动建立)。在/etc/rc.local的“exit 0”前加入以下配置:
$ mkdir -p /var/run/swift

$ chown swift:swift /var/run/swift

配置代理节点

首先在以下的所有命令都是要运行在系统最高权限下:root权限

安装memcached

$ apt-get install memcached

1.修改memcached来监听默认接口

在本地而并非公共网络。编辑其中的IP地址,例如:

$ export PROXY_LOCAL_NET_IP=159.226.32.48
$ perl-pi –e "s/-l 127.0.0.1/-l $PROXY_LOCAL_NET_IP/" /etc/memcached.conf

2.重启memcached服务

$ servicememcached restart

创建配置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 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 YOUR_AUTH_SERVER:8080/v1/AUTH_system

[filter:healthcheck]

use =egg:swift#healthcheck

[filter:cache]

use =egg:swift#memcache

memcache_servers=YOUR_PROXY_SERVER:11211

EOF



创建账户(account)、容器(container)、对象(object)、环(rings)

$ 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

注:builder参数的值18表示2^18次方的值也就是大小,设置总的存储量,预计整个环使用这种“分割权力”的值。值为3表示每个对象的副本的数量,最后一个值是小时数用来限制移动分区次数


1.对每一个存储node创建更改/srv/node并加入到这个ring
$ZONE                    # 设置该zone编号的存储设备
$STORAGE_LOCAL_NET_IP    # 添加StorageNodeIP地址
$DEVICE                  # 存储设备磁盘挂载分区
$WEIGHT                  # 权重
$ 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


2.验证每个ring中的内容

$ swift-ring-builder account.builder

$ swift-ring-builder container.builder

$ swift-ring-builder object.builder


3.重新平衡ring

$ swift-ring-builder account.builder rebalance

$ swift-ring-builder container.builder rebalance

$ swift-ring-builder object.builder rebalance


4.复制ring.gz

复制刚刚生成的account.ring.gz,container.ring.gz,object.ring.gz文件到每一个proxy和storage nodes的/etc/swift文件里

确保所有的配置文件的用户拥有swift用户

$chown -R swift:swift /etc/swift

启动proxy server

$ swift-init proxy start


配置存储节点

swiftstorage必须工作在另一个物理服务器中,支持扩展属性(XATTRS),现在必须支持XFS格式,经过大量的测试和基于在Rackspace的测试结果来说,都是最好的,现在要一个XFS文件系统/dev/sdb4。

节点上的设备进行格式化分区

$ fdisk /dev/sda (set up a singlepartition) 注:对sda进行逻辑分区,这里使用第4块分区

$ mkfs.xfs –I size=512 /dev/sda4

$ echo "/dev/sda4 /srv/node/sda4 xfsnoatime,nodiratime,nobarrier,logbufs=8 00" >> /etc/fstab

$ mkdir –p /srv/node/sda4

$ mount /srv/node/sda4

$ chown swift:swift /srv/node/sda4

创建同步文件rsyncd.conf

$ cat>/etc/rsyncd.conf <<EOF

uid = swift

gid = swift

log file = /var/log/rsyncd.log

pid file =/var/run/rsyncd.pid

address = 159.226.32.49

[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

1.编辑/etc/default/rsync中RSYNC_ENABLE
$perl -pi –e 's/RSYNC_ENABLE=false/RSYNC_ENABLE=true/' /etc/default/rsync

2.开启rsync

$ service rsync start

创建account-server.conf

$ cat>/etc/swift/account-server.conf <<EOF

[DEFAULT]

bind_ip = YOUR_STORAGE_SERVER

workers = 2

[pipeline:main]

pipeline =account-server

[app:account-server]

use = egg:swift#account

[account-replicator]

[account-auditor]

[account-reaper]

EOF

创建container-server.conf

$ cat>/etc/swift/container-server.conf <<EOF

[DEFAULT]

bind_ip = YOUR_STORAGE_SERVER

workers = 2

[pipeline:main]

pipeline =container-server

[app:container-server]

use=egg:swift#container

[container-replicator]

[container-updater]

[container-auditor]

[container-sync]

EOF

创建object-server.conf

$ cat>/etc/swift/object-server.conf <<EOF

[DEFAULT]

bind_ip = YOUR_STORAGE_SERVER

workers = 2

[pipeline:main]

pipeline =object-server

[app:object-server]

use =egg:swift#object

[object-replicator]

[object-updater]

[object-auditor]

EOF

启动storage server

$ swift-init all start
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: