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 memcached1.修改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 <<EOFuid = 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相关文章推荐
- [部署篇13]VMWare搭建Openstack——Swift的安装与部署
- Openstack Swift 安装部署总结
- OpenStack Swift All In One安装部署流程与简单使用
- OpenStack Swift 安装部署
- CentOS6.2下一步一步源代码安装OpenStack(八)Swift代理节点配置、运行
- CentOS6.2下一步一步源代码安装OpenStack(九)Swift存储节点安装、配置及运行
- OpenStack安装部署管理中常见问题解决方法(OpenStack-Lite-FAQ)
- OneStack:Ubuntu 12.04 (或11.10) 一键部署安装OpenStack云计算平台 .
- [OpenStack] OpenStack Essex - Dashboard 安装部署详解
- OpenStack安装部署管理中常见问题解决方法(OpenStack-Lite-FAQ)
- OpenStack安装部署管理中常见问题解决方
- [OpenStack] OpenStack Essex - Nova 安装部署与命令行详解
- CentOS6.2下一步一步源代码安装OpenStack(九)Swift存储节点安装、配置及运行
- OpenStack安装部署---个人笔记整理
- Ubuntu-12.04 OpenStack ("Folsom")安装和部署手册
- CentOS6.2下一步一步源代码安装OpenStack(十)Swift测试
- OpenStack安装部署管理中常见问题解决方法(OpenStack-Lite-FAQ)
- [OpenStack] OpenStack Essex - Glance 安装部署与命令行详解
- OpenStack安装部署管理中常见问题解决方法(OpenStack-Lite-FAQ)
- [openstack swift]多节点安装