关于Swift部署不得不说的那些事

1  Swift概述

Swift是Open Stack开源云计算项目的子项目之一,是一个多租户、高扩展性的和高可用性的对象存储系统,用于低成本地存储大量的非结构化数据;Swift通过在软件层面引入一致性哈希技术和数据冗余性,牺牲一定程度的数据一致性来达到高可用性和可伸缩性,支持多租户模式、容器和对象读写操作,适合解决互联网的应用场景下非结构化数据存储问题。


2  Swift关键特性

         扩展性:Swift可以根据存储的数据量和用户数量进行线性扩展,扩大规模时,可以通过增加存储节点来提升存储能力;    

         持久性:Swift采用了复制数据并且将副本分发到集群中来确保数据的持续可用性;

         高并发:Swift的设计原则允许将请求分发到多个服务器上。可充分利用可用的服务器性能来同时处理多个请求;

         无单点故障:Swift的元数据存储是完全均匀随机分布的,并且与对象文件存储一样,元数据也会存储多份;


3  Swift集群部署

3.1 部署环境

         本文主要讲述swift 3节点集群,实现accountcontainer信息存放在ssd盘,Object信息存放ssd盘和hdd盘,2副本策略的集群搭建。下面就是具体搭建步骤及注意事项;





3.1.1 系统环境

系统版本要求:CentOS7.3Build1611 X86_64

更多参考官网:

https://docs.openstack.org/swift/latest/getting_started.html#system-requirements


3.1.2 存储环境

数据盘:12

文件系统:XFS

备注:物理机多块数据磁盘,建议不使用RAID,不使用LVM管理


3.1.3 网络环境

多网段环境:swift绑定业务网卡地址

单网段环境:bond 0.0.0.0

万兆网卡:建议使用MTU 9000通信

集群模式:集群模式下多台机器确保互通


3.1.4 测试环境


备注:三节点集群方式部署,测试环境中有4ssd,8hdd盘,因对磁盘的配置是一致的,本文以列举一块ssd01盘,一块hdd01盘为例进行介绍。


3.2 部署准备

3.2.1 配置文件打开数

Swift服务是多线程服务,并且支持高并发。Swift通过基于httpREST服务接口对swift集群进行访问。在进行高并发TCP连接处理时,最高的并发数量都要受到系统对用户单一进程同时可打开文件数量的限制,这边需要配置下最大进程数和最大文件打开数:

vim /etc/security/limits.conf

*        soft  nproc  65536

*        hard  nproc  65536

*        soft  nofile  655350

*        hard  nofile  655350        

ulimit -n 65536


3.2.2 配置系统内核

由于Swift是通过基于httpREST接口对swift集群进行访问,需要对TCP/IP堆栈进行配置:

vim /etc/sysctl.conf

fs.file-max =655360

net.core.somaxconn= 65535

net.ipv4.tcp_tw_recycle= 1

net.ipv4.tcp_tw_reuse= 1     

sysctl –p


其中:

fs.file-max:表示进程可以同时打开的最大句柄数,这个参数直接限制最大并发连接数。

net.ipv4.tcp_tw_reuse:设置为1,表示允许将TIME-WAIT状态的socket重新用于新的TCP链接。


3.2.3 禁止防火墙

1)禁用SELINUX

vim /etc/selinux/config

SELINUX=permissive

2)关闭Firewall

systemctl stop firewalld

systemctl disable firewalld


3.2.4 配置locale

1) 配置为UTF-8,临时生效

localectl set-locale LANG="en_US.UTF-8"

2) 配置为UTF-8,永久生效

vim /etc/locale.conf

LANG="en_US.UTF-8"


3.2.5 安装swift

OpenStackSwift的官方发布版本在GitHubhttps://github.com/openstack /swift)上,可自由下载,对于OpenStack的每一个主版本,都有一个swift版本与之对应。

安装swift

cd/tmp

gitclone https://github.com/openstack/swift.git

cd/tmp/swift

pythonsetup.py install


3.2.6 安装swauth认证

cd /tmp

git clone https://github.com/openstack/swauth.git

cd swauth

python setup.py install

注:swift节点均执行以上部署操作;


3.3 配置Swift

         在启动swift服务进行之前,你需要对其进行配置。首先需要创建构造器文件(builder file),添加磁盘驱动器并构造环。


3.3.1 复制swift配置文件

创建swift目录并将源代码中的配置文件示例复制过去,以便能够在后续的配置过程中以它们作为模板来编辑配置文件。

mkdir -p /etc/swift

cd /opt/swift/etc

cp account-server.conf-sample/etc/swift/account-server.conf

cp container-server.conf-sample /etc/swift/container-server.conf

cp object -server.conf-sample /etc/swift/ object-server.conf

cp proxy -server.conf-sample /etc/swift/ proxy-server.conf

cp swift -server.conf-sample /etc/swift/ swift-server.conf

此时,可以运行swift-init命令,添加-h标志可以获取帮助信息:

swift-init -h


3.3.2 修改swift配置文件

3.3.2.1 设置哈希路径前缀和后缀

/etc/swift/swift.conf文件中swift_hash_path_prefix swift_hash_path_suffix字段设置一个随机的难以猜测的字符串。

head -c 32 /dev/random | base64

head -c 32 /dev/random | base64




(用以上命令生成两个哈希串,分别设置到swift_hash_path_suffixswift_hash_path_prefix

cd /etc/swift

vim swift.conf

swift_hash_path_suffix= EvjucvFN5aX1oAdjlQiw5+HV0JUqSSWwzoiem+fLAZE=

swift_hash_path_prefix= O8wA4HPiYUpfL0TAAdDPMR2MMCzwDrsdS/qX06XXAJE=


3.3.2.2 存储策略

存储策略的主要作用是在集群中对存储空间进行定制化,包括:存储位置、副本数、硬件、分区,以满足特定的树存储要求。集群中至少有一个存储策略,若没有用户自定义策略,swift就会采用内置的存策略0,被称为policy-0.


创建存储策略的分为两步:

第一步在swift.conf文件中声明其名称和编码。

第二步是创建对应的构造器文件和环,第二步中会用到第一步声明的编码。

用户定义的存储策略在声明时,需要指定一个编号和一个名字。编辑/etc/swift目录下swift.conf文件,存储策略的一般格式如下:

[storage-policy:N]

name =

default =

optionaldeprecated =


注:[storage-policy:N]是必需字段,其中N是存储策略的编号,可以取0或者一个正整数,不能重复;当存储策略不再需要时,deprecated =yes将其标记为弃用。声明了存储策略之后,就可以用它们来创建构造器了,对每一个存储策略(storage-policy:N),swift都会创建一个object-N.builder文件与之对应。


测试集群的策略配置如下:

[storage-policy:0]

name = big

default = yes

aliases = hdd

[storage-policy:1]

name = small

aliases = ssd


3.3.2.3 设置swauth认证

配置proxy-server.conf

cd /etc/swift

vim proxy-server.conf

[pipeline:main]

pipeline =catch_errors gatekeeper healthcheck proxy-logging cache container_sync bulktempurl ratelimit swauth copy container-quotas account-quotas slo dloversioned_writes proxy-logging proxy-server                

#认证方式替换为swauth

[filter:swauth]

use =egg:swauth#swauth

set log_name =swauth

super_admin_key= swauthkey

# swauthkeyswauth密钥,自行设置#

default_swift_cluster= production#http:// 172.31.17.206:8080/v1

#以上的IP是测试环境中任意节点主机的地址#

allow_account_management= true

account_autocreate= true

#将以上两个值设为true,以允许对账户进行管理#


3.3.3 创建环构造器文件

构造器是用来构建环的,swift服务进程用这些环来进行数据的存储与检索。

创建构造器文件的命令

构造器文件可以看做是一个大数据库,里面记录了集群中所有的存储设备以及环构建器工具创建环时所用到的数值。

swift -ring-buildercreate命令格式:

swift-ring-builderaccount|container|object.buildecreate <part_power> <replicas> <min_part_hours>

create命令中三个参数的作用分别为:

part_power:分区幂指数,决定集群中要创建的分区数量。

replicas:副本数,指定要给每份数据存储的副本数量。

min_part_hours:移动分区的最小间隔时间(小时),指定副本能够被移动的频率。


集群中添加构造器:

构建account ring

swift-ring-builder account.builder create10 2 1

构建container ring

swift-ring-builder container.builder create10 2 1

构建object ring

swift-ring-builder object.builder create 102 1

swift-ring-builder object-0.builder create10 2 1

swift-ring-builder object-1.builder create10 2 1


3.3.4 向构建文件中添加磁盘

在构建文件中添加磁盘,以及它们的逻辑分组(域、区)和权重,这部分的配置主要目的是:


1)通过把每个节点放到一个域或区中来标记故障边界。

2)通过设定设备权重来指定集群中的每个磁盘应当存多少数据。

对于每个节点,需要把/srv/node下的存储磁盘加到构造文件中。如果某一磁盘是专门用于来存储特定的数据类型的,可以不把他添加到其他的环构建中。固态硬盘负责所有的账号和容器数据,需要你把这些固态硬盘添加到账号和容器的构造文件中。

用如下格式将磁盘添加到文件中:

swift-ring-builder account.builder add<region><zone>-<IP>:<port>/<device> <weight>

swift-ring-builder container.builder add <region><zone>-<IP>:<port>/<device><weight>

swift-ring-builder object.builder add <region><zone>-<IP>:<port>/<device><weight>

swift-ring-builder object-n.builder add<region><zone>-<IP>:<port>/<device><weight>


具体讲解下regionzoneweight的含义:

Regionswift允许集群按物理位置来划分域。域通常被定义为地理边界,服务器(节点)的几个机架可以用放置在彼此延迟比较高,地理位置相隔较远的不同位置;当跨域集群收到一个读请求时,swift将通过延迟来选择更近的数据副本。

Zones:在域中,swift允许你创建可用区来隔离故障。分区的目的是为了防止存储服务器大规模中断运行。

IP:指定节点所在的IP地址;

Port:每个账号、容器和对象服务进程在不同的端口运行。账号服务进程默认运行在6002端口,容器服务进程默认运行在6001端口,对象服务进程默认运行在6000端口。

Weight(权重):权重是用来决定一个磁盘到底可以拥有多少分区(相对值)的,它是环构建过程的一部分,权重是一个相对数,可自行配置每个硬盘的权重。


swift01节点上执行,向环中添加磁盘

cd /etc/swift/

account.builder中添加ssd01

swift-ring-builder account.builder addr1z1-172.31.17.206:6202/ssd01 1600

swift-ring-builder account.builder addr1z2-172.31.17.207:6202/ssd01 1600

swift-ring-builder account.builder addr1z3-172.31.17.208:6202/ssd01 1600

container.builder中添加ssd01

swift-ring-builder container.builder addr1z1-172.31.17.206:6201/ssd01 1600

swift-ring-builder container.builder addr1z2-172.31.17.207:6201/ssd01 1600

swift-ring-builder container.builder addr1z3-172.31.17.208:6201/ssd01 1600

object.builder中添加ssd01

swift-ring-builder object.builder add r1z1-172.31.17.206:6200/ssd011600

swift-ring-builder object.builder add r1z2-172.31.17.207:6200/ssd011600

swift-ring-builder object.builder add r1z3-172.31.17.208:6200/ssd011600

object-0.builder中添加hdd01

swift-ring-builder object-0.builder addr1z1-172.31.17.206:6200/hdd01 1600

swift-ring-builder object-0.builder addr1z2-172.31.17.207:6200/hdd01 1600

swift-ring-builder object-0.builder addr1z3-172.31.17.208:6200/hdd01 1600

object-1.builder中添加ssd01

swift-ring-builder object-1.builder addr1z1-172.31.17.206:6200/ssd01 1600

swift-ring-builder object-1.builder addr1z2-172.31.17.207:6200/ssd01 1600

swift-ring-builder object-1.builder addr1z3-172.31.17.208:6200/ssd01 1600




3.3.5 构建环

硬盘添加完毕,就可以创建环文件了。利用rebalance命令来创建环文件,swift利用环文件来决定数据存储的位置。环创建好了以后,它们需要被复制到集群中每个节点的/etc/swift目录下。复制以后不需要任务操作,因swift15分钟检测一次环文件。


  • 构建环

cd /etc/swift

swift-ring-builder account.builderrebalance

swift-ring-builder container.builderrebalance

swift-ring-builder object.builder rebalance




检查是否成功构建ring

ll ./*.gz




2)同步ring到集群中其他节点

scp *.ring.gz 172.31.17.207:/etc/swift

scp *.ring.gz 172.31.17.208:/etc/swift


3.3.6 配置swift日志

Swift使用RSyslog来帮它管理日志,在每个配置文件中有一个叫log_name的设置项,默认被设置为swift

创建日志配置文件:

mkdir /var/log/swift

cd /etc/rsyslog.d

cp openstack-swift.confopenstack-swift.conf.bak

systemctl enable rsyslog.service;

systemctl restart rsyslog.service;


3.3.7 配置Rsync

Swift集群需要很多一致性进程运行以确保集群正常工作。这部分包括:

1)配置及启动rsync

2)启动复制器进程

3)启动其他的一致性进程


配置rsync

cd /etc

cp rsyncd.conf rsyncd.conf.bak

systemctl enable rsyncd.service

systemctl restart rsyncd.service


3.3.8 配置目录权限

chown -R root:swift /etc/swift

chown -R root:swift /srv/node

chown -R swift:swift /var/cache/swift

chown -R root:root /var/log/swift

chmod -R g+w /etc/swift

chmod -R g+w /srv/node

chmod -R g+w /var/cache/swift

chmod -R g+w /var/log/swift


3.4 Swift服务管理

3.4.1 配置开机自启动

systemctl enable memcached.serviceopenstack-swift-proxy.service

systemctl enableopenstack-swift-account.service openstack-swift-account-auditor.serviceopenstack-swift-account-reaper.serviceopenstack-swift-account-replicator.service

systemctl enableopenstack-swift-container.service openstack-swift-container-auditor.serviceopenstack-swift-container-replicator.serviceopenstack-swift-container-updater.service

systemctl enableopenstack-swift-object.service openstack-swift-object-auditor.serviceopenstack-swift-object-replicator.serviceopenstack-swift-object-updater.service


3.4.2 启动所有服务

systemctl restart memcached.serviceopenstack-swift-proxy.service

systemctl restart  openstack-swift-account.service openstack-swift-account-auditor.serviceopenstack-swift-account-reaper.serviceopenstack-swift-account-replicator.service

systemctl restart  openstack-swift-container.serviceopenstack-swift-container-auditor.serviceopenstack-swift-container-replicator.serviceopenstack-swift-container-updater.service

systemctl restart  openstack-swift-object.serviceopenstack-swift-object-auditor.serviceopenstack-swift-object-replicator.serviceopenstack-swift-object-updater.service


3.4.3 查看服务状态

systemctl status memcached.serviceopenstack-swift-proxy.service

systemctl status  openstack-swift-account.serviceopenstack-swift-account-auditor.service openstack-swift-account-reaper.serviceopenstack-swift-account-replicator.service

systemctl status  openstack-swift-container.serviceopenstack-swift-container-auditor.serviceopenstack-swift-container-replicator.serviceopenstack-swift-container-updater.service

systemctl status  openstack-swift-object.serviceopenstack-swift-object-auditor.service openstack-swift-object-replicator.serviceopenstack-swift-object-updater.service


3.5 Swift验证服务

3.5.1 创建用户

swauth-prep -K swauthkey

swift -Ahttp://172.31.17.206:8080/auth/v1.0 -U test:tester -K testing stat –v




3.5.2 验证接口

用户tester认证:

curl -v -H 'X-Auth-User: test:tester' -H'X-Auth-Key: testing' http://172.31.17.206:8080/auth/v1.0


猜你喜欢

转载自blog.csdn.net/itest_2016/article/details/79088967