Openstack Swift学习(一):安装

栏目: 服务器 · 发布时间: 6年前

内容简介:本文主要讨论 openstack swift 的独立安装,一个节点作为代理节点运行 proxy 服务,其他节点作为存储节点。proxy node 和 storage node 都需要安装。ubuntu 环境

本文主要讨论 openstack swift 的独立安装,一个节点作为代理节点运行 proxy 服务,其他节点作为存储节点。

安装各种依赖

proxy node 和 storage node 都需要安装。

ubuntu 环境

apt-get update; apt-get upgrade
sudo apt-get install curl gcc memcached rsync sqlite xfsprogs git-core \
    libffi-dev xinetd liberasurecode-dev \
    python-setuptools \
    python-coverage python-dev python-nose \
    python-xattr python-eventlet \
    python-greenlet python-pastedeploy \
    python-netifaces python-pip python-dns \
    python-mock \
    libxml2-dev libxslt1-dev zlib1g-dev \
    autoconf automake libtool

centos 环境

yum update; yum upgrade
sudo yum install curl gcc memcached rsync sqlite xfsprogs git-core \
    libffi-devel xinetd liberasurecode-devel \
    python-setuptools \
    python-coverage python-devel python-nose \
    pyxattr python-eventlet \
    python-greenlet python-paste-deploy \
    python-netifaces python-pip python-dns \
    python-mock \
    libxml2-devel libxslt1-devel zlib1g-devel \
    autoconf automake libtool

安装 liberasurecode

git clone https://github.com/openstack/liberasurecode.git
cd liberasurecode
./autogen.sh
./configure
make
make test
sudo make install

/etc/ld.so.conf 中添加一行: /usr/local/lib
运行 sudo ldconfig

安装 swift client(如果不在此节点运行 client 程序可以不安装)

cd ~
git clone https://github.com/openstack/python-swiftclient.git
cd ./python-swiftclient
sudo pip install -r requirements.txt
sudo python setup.py develop

安装 swift client

cd ~
git clone https://github.com/openstack/swift.git
cd ./swift
sudo pip install -r requirements.txt
sudo python setup.py develop

需要在每次开机时都创建一些需要的目录,修改 /etc/rc.local 添加如下内容:

sudo mkdir -p /var/run/swift
sudo chown user:user /var/run/swift
sudo mkdir -p /var/cache/swift
sudo chown user:user /var/cache/swift  #user需要根据实际情况进行更改

创建 swift 目录

mkdir /etc/swift
chown -R user:user /etc/swift  #user需要根据实际情况进行更改

在 proxy node 上安装服务

下载 proxy 的配置文件

curl -o /etc/swift/proxy-server.conf \
https://git.openstack.org/cgit/openstack/swift/plain/etc/proxy-server.conf-sample

删除注释和空格

cp proxy-server.conf proxy-server.conf.bak
cat proxy-server.conf.bak | grep -v '^#'| grep -v '^$'> proxy-server.conf

更改: proxy-server.conf :

[DEFAULT]
bind_port = 8080
user = user  # 填实际的用户名 

[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
user_test5_tester5 = testing5 service
reseller_prefix = AUTH
token_life = 86400

[filter:cache]
use = egg:swift  #memcache
memcache_servers = 127.0.0.1:11211

[filter:healthcheck]
use = egg:swift  #healthcheck

[filter:proxy-logging]
use = egg:swift  #proxy_logging
在上述配置中使用的认证方法是tempauth,即在 pipeline 部分添加 pipeline = ... tempauth ...

Tempauth 在配置文件中的格式:

user =

[group] [group] […] [storage_url]

key: 密码

group有两种,.admin和.reseller_admin

.reseller_admin 具有对任何account操作的权限。

.admin 具有对所在的account 操作的权限。

如果没有设置以上组,则用户只能访问那些被.admin或.reseller_admin所允许的container。

在storage node上安装服务

下面的操作要在每个node上都安装一次

格式化设备

查看设备

fdisk -l

找到一个新设备,分区(也可以不分区)

fdisk /dev/sdb

格式化为xfs文件系统

mkfs.xfs /dev/sdb1

创建目录挂载点

mkdir -p /srv/node/sdb1
sudo chown -R user:user /srv/node   # user为实际的用户名

设置开机自动挂载,编辑 /etc/fstab 文件,添加如下内容:

/dev/sdb1 /srv/node/sdb1 xfs noatime,nodiratime,nobarrier,logbufs=8 0 2

挂载

mount /srv/node/sdb1

配置 rsyncd 服务

修改 /etc/rsyncd.conf :

uid = user   # 根据实际情况填写
gid = user    # 根据实际情况填写
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
address = 0.0.0.0

[account]
max connections = 25
path = /srv/node/
read only = false
lock file = /var/lock/account.lock

[container]
max connections = 25
path = /srv/node/
read only = false
lock file = /var/lock/container.lock

[object]
max connections = 25
path = /srv/node/
read only = false
lock file = /var/lock/object.lock

编辑 /etc/default/rsync ,找到其中的RSYNC_ENABLE,将值设为true

RSYNC_ENABLE=true

启动 rsyncd 和 memcached, 并设置开机启动

ubuntu 环境中

apt-get install sysv-rc-conf
sysv-rc-conf rsyncd on
service rsync start

service memcached start
sysv-rc-conf memcached on

centos 环境中

systemctl enable rsyncd.service
systemctl start rsyncd.service

systemctl enable memcached .service
systemctl start memcached .service

systemctl status rsyncd.service #查看状态
systemctl status memcached .service #查看状态

测试

rsync rsync://pub@127.0.0.1

也可以在别的机器上测试

配置 account container 和 object 服务

下载样例配置文件

curl -o /etc/swift/account-server.conf \
  https://git.openstack.org/cgit/openstack/swift/plain/etc/account-server.conf-sample

curl -o /etc/swift/container-server.conf \
  https://git.openstack.org/cgit/openstack/swift/plain/etc/container-server.conf-sample

curl -o /etc/swift/object-server.conf \
  https://git.openstack.org/cgit/openstack/swift/plain/etc/object-server.conf-sample

删除注释和空格

cp container-server.conf container-server.conf.bak
cat container-server.conf.bak | grep -v '^#'| grep -v '^$'> container-server.conf

cp account-server.conf account-server.conf.bak
cat account-server.conf.bak | grep -v '^#'| grep -v '^$'> account-server.conf

cp object-server.conf object-server.conf.bak
cat object-server.conf.bak | grep -v '^#'| grep -v '^$'> object-server.conf

配置 account-server.conf :

[DEFAULT]
bind_port = 6202
devices = /srv/node
bind_ip = 0.0.0.0
user = chenhao
swift_dir = /etc/swift
mount_check = true

[pipeline:main]
pipeline = healthcheck recon account-server

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

[filter:healthcheck]
use = egg:swift #healthcheck

[filter:recon]
use = egg:swift #recon
recon_cache_path = /var/cache/swift

[account-replicator]

[account-auditor]

[account-reaper]

[filter:xprofile]
use = egg:swift #xprofile

配置 container -server.conf :

[DEFAULT]
bind_port = 6201
devices = /srv/node
bind_ip = 0.0.0.0
user = chenhao
swift_dir = /etc/swift
mount_check = true

[pipeline:main]
pipeline = healthcheck recon container-server

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

[filter:healthcheck]
use = egg:swift#healthcheck

[filter:recon]
use = egg:swift#recon
recon_cache_path = /var/cache/swift

[container-replicator]

[container-updater]

[container-auditor]

[container-sync]

[filter:xprofile]
use = egg:swift#xprofile

[container-sharder]

配置 object-server.conf :

[DEFAULT]
bind_port = 6200
devices = /srv/node
bind_ip = 0.0.0.0
user = chenhao
swift_dir = /etc/swift
mount_check = true

[pipeline:main]
pipeline = healthcheck recon object-server

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

[filter:healthcheck]
use = egg:swift #healthcheck

[filter:recon]
use = egg:swift #recon
recon_cache_path = /var/cache/swift
recon_lock_path = /var/lock

[object-replicator]

[object-reconstructor]

[object-updater]

[object-auditor]

[filter:xprofile]
use = egg:swift #xprofile

配置swift.conf

在 proxy node 上操作。

下载样例文件:

curl -o /etc/swift/swift.conf \
  https://git.openstack.org/cgit/openstack/swift/plain/etc/swift.conf-sample

在[swift-hash]段落中,修改掉suffix和prefix的内容。随便什么内容都好,但是一旦你设置好了,就不能再次修改了。

[swift-hash]
swift_hash_path_suffix = b1b8198f
swift_hash_path_prefix = c167cd22

然后在[storage-policy:0]段落中,编辑一下默认的存储策略:

[storage-policy:0]
name = Policy-0
default = yes

将配置的文件复制到其他的 storage node 上,如果还有其他的 proxy node,也要复制到其他的 proxy node 上。

创建 ring

创建ring:account ring, container ring, object ring.

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

18 表示 partition 数为2的18次方,3表示 replication 数为3,1 表示分区数据的最短迁移间隔时间为1小时。

向 ring 中加入设备

swift-ring-builder account.builder add r1z1-192.168.2.129:6002/sdb1 100
swift-ring-builder container.builder add r1z1-192.168.2.129:6001/sdb1 100
swift-ring-builder object.builder add r1z1-192.168.2.129:6000/sdb1 100

swift-ring-builder account.builder add r1z1-192.168.2.130:6002/sdb1 100
swift-ring-builder container.builder add r1z1-192.168.2.130:6001/sdb1 100
swift-ring-builder object.builder add r1z1-192.168.2.130:6000/sdb1 100

swift-ring-builder account.builder add r1z1-192.168.2.131:6002/sdb1 100
swift-ring-builder container.builder add r1z1-192.168.2.131:6001/sdb1 100
swift-ring-builder object.builder add r1z1-192.168.2.131:6000/sdb1 100

r1表示 region1, z1 表示 zone1, zone 这个概念是虚拟的,可以将一个 device 划定到一个 zone,在分配 partition 的时候会考虑到这个因素,尽量划分到不同的 zone 中。

sdb1 为 swift 所使用的存储空间。

100 代表设备的权重,也是在分配 partition 的时候会考虑的因素。

验证查看 ring

swift-ring-builder account.builder
swift-ring-builder container.builder
swift-ring-builder object.builder

重新平衡 ring

swift-ring-builder account.builder rebalance
swift-ring-builder container.builder rebalance
swift-ring-builder object.builder rebalance

分发 ring

将 /etc/swift 目录下生成的 container.ring.gz,object.ring.gz 和 account.ring.gz 复制到每一个 storage node上的 /etc/swift 目录中。

如果还有其他的 node 运行着 swift proxy 服务,那么这些配置文件也需要复制过去。

启动服务

在 proxy node 上启动 proxy 服务

sudo swift-init proxy start

在 storage node 启动服务

sudo swift-init account-server start
sudo swift-init account-replicator start
sudo swift-init account-auditor start
sudo swift-init container-server start
sudo swift-init container-replicator start
sudo swift-init container-updater start
sudo swift-init container-auditor start
sudo swift-init object-server start
sudo swift-init object-replicator start
sudo swift-init object-updater start
sudo swift-init object-auditor start`

停止服务只要将 start 改为 stop, 可以将上述命令写进一个脚本里一次运行。

测试

需要先安装 swift client

import swiftclient

authurl,username,password=('http://192.168.2.189:8080/auth/v1.0','test:tester','testing')

conn = swiftclient.Connection(authurl=authurl,user=username,key=password);

#cont_headers,containers = conn.get_account();

# add a container
conn.put_container("container_demo")


# upload a file
with open('hello.txt', 'r') as localfile:
	conn.put_object("container_demo", "hello_file",contents=localfile.read())

# upload string
conn.put_object("container_demo", "hello_string",contents="hello world!")

# list the files in a container
for data in conn.get_container("container_demo")[1]:
	print '{0}\t{1}\t{2}'.format(data['name'], data['bytes'], data['last_modified'])

# download a file
obj_tuple = conn.get_object("container_demo", "hello_file")
with open('down_hello_file', 'wb') as localfile:
	localfile.write(obj_tuple[1])

#delete a file
conn.delete_object("container_demo", "hello_file")

写在后面

动态扩容,加上需要添加的机器信息,重新生成 ring 文件。将新生成的 ring 文件放到每一个服务器的 /etc/swift 目录下。swift 的各个组件程序会定期重新读取 rings 文件。

服务器时间必须一致,不一致的话会出现问题。测试中有一台服务器比其他的慢了2小时,结果向这台 proxy 上传文件,返回成功,但是其实并没有上传成功,可能是由于时间原因,在其他机器看来这个文件已经被删除掉了。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

热搜:搜索排名营销大揭秘

热搜:搜索排名营销大揭秘

【美】肖恩·布拉德利 / 中国人民大学出版社有限公司 / 2018-7-30 / CNY 55.00

首部大数据在我国政府管理场景中的应用实践案例读本,全面展示我国电子政务与数字化建设的成果,深度理解实施国家大数据战略的重要意义。 本书作者作为国内最早从事大数据应用研究的实践者之一,亲历了中国大数据的发展历程、主要事件、应用案例以及行业变化。 在本书中,作者将其所亲历的大数据发展历程进行了阐述,从大数据的基本概念、特点到实践解读,通俗易懂,给我们的实际工作提供了重要参考。作者将帮助读者......一起来看看 《热搜:搜索排名营销大揭秘》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具