轻松搭建OpenStack Swift存储测试环境

原创 社长  2019-05-24 10:06:13  阅读 106 次 评论 0 条
重庆专业seo
摘要:

Swift(OpenStack Object Storage)是Rackspace开发的高可用分布式对象存储,贡献给了OpenStack。上次《通过RADOSGW提供ceph的S3和Swift接口》介绍了ceph RADOSGW的Swift接口,这次让我们直接来试试原生的swift吧!准备工作我们需要先安装virtualBox和vagrant。通过vagrant来驱动virtualBox搭建一个虚拟测试环境。首先在本地任意路径新建一个空文件夹比如test,运行以下命令:virtual box h

Swift(OpenStack Object Storage)是Rackspace开发的高可用分布式对象存储,贡献给了OpenStack。上次《通过RADOSGW提供ceph的S3和Swift接口》介绍了ceph RADOSGW的Swift接口,这次让我们直接来试试原生的swift吧!

准备工作


我们需要先安装virtualBoxvagrant。通过vagrant来驱动virtualBox搭建一个虚拟测试环境。首先在本地任意路径新建一个空文件夹比如test,运行以下命令:

virtual box host

1
2
3
4
mkdir test
cd test
vagrant init minimum/ubuntu-trusty64-docker
vi Vagrantfile


里面应该有一句config.vm.box = "minimum/ubuntu-trusty64-docker",在它的下面添加如下几行代码,相当于给它分配一台IP为192.168.33.17,内存为1G的虚拟机。

Vagrantfile

1
2
3
4
config.vm.network "private_network", ip: "192.168.33.17"
config.vm.provider "virtualbox" do |v|
 v.memory = 1024
end


这个vagrant镜像已经在ubuntu的基础上帮我们安装了docker,用起来很方便。然后终端运行以下命令启动并连接虚拟机。

virtual box host terminal

1
2
vagrant up
vagrant ssh

搭建环境


这里参考了Swift的官方文档Swift All In One来搭建一个swift测试环境。首先需要安装各种依赖包:

1
2
3
4
5
6
7
8
9
10
sudo apt-get update
sudo apt-get -y install curl gcc memcached rsync sqlite3 xfsprogs \
                       git-core libffi-dev python-setuptools \
                       liberasurecode-dev
sudo apt-get -y install python-coverage python-dev python-nose \
                       python-xattr python-eventlet \
                       python-greenlet python-pastedeploy \
                       python-netifaces python-pip python-dnspython \
                       python-mock
sudo pip install --upgrade pip


这里就不用fdisk而使用较简单的环回设备来当做我们的存储:

1
2
3
4
sudo mkdir /srv
sudo truncate -s 1GB /srv/swift-disk
sudo mkfs.xfs /srv/swift-disk
sudo sh -c 'echo "/srv/swift-disk /mnt/sdb1 xfs loop,noatime,nodiratime,nobarrier,logbufs=8 0 0" >> /etc/fstab'


生成挂载点和link:

1
2
3
4
5
6
7
8
9
10
11
12
sudo mkdir /mnt/sdb1
sudo mount /mnt/sdb1
sudo mkdir /mnt/sdb1/1 /mnt/sdb1/2 /mnt/sdb1/3 /mnt/sdb1/4
sudo chown vagrant:vagrant /mnt/sdb1/*
for x in {1..4}; do sudo ln -s /mnt/sdb1/$x /srv/$x; done
sudo mkdir -p /srv/1/node/sdb1 /srv/1/node/sdb5 \
             /srv/2/node/sdb2 /srv/2/node/sdb6 \
             /srv/3/node/sdb3 /srv/3/node/sdb7 \
             /srv/4/node/sdb4 /srv/4/node/sdb8 \
             /var/run/swift
sudo chown -R vagrant:vagrant /var/run/swift
for x in {1..4}; do sudo chown -R vagrant:vagrant /srv/$x/; done


rc.local里增加几条创建文件夹和授权的命令,使之能够被开机执行:

1
2
3
4
sudo sed -i '$i mkdir -p /var/cache/swift /var/cache/swift2 /var/cache/swift3 /var/cache/swift4' /etc/rc.local
sudo sed -i '$i chown vagrant:vagrant /var/cache/swift*' /etc/rc.local
sudo sed -i '$i mkdir -p /var/run/swift' /etc/rc.local
sudo sed -i '$i chown vagrant:vagrant /var/run/swift' /etc/rc.local


接下来需要安装swift和它的客户端:

1
2
3
4
5
6
7
cd $HOME; git clone https://github.com/openstack/python-swiftclient.git
cd $HOME/python-swiftclient; git checkout 2.7.0; sudo python setup.py develop; cd -
git clone https://github.com/openstack/swift.git
cd $HOME/swift; git checkout 2.7.0
sed -i "s/;python_version<'3.0'//" requirements.txt
sed -i "/dnspython3>=1.12.0;python_version>='3.0'/d" requirements.txt
sudo pip install -r requirements.txt; sudo python setup.py develop; sudo pip install -r test-requirements.txt


然后需要配置rsync:

1
2
3
4
sudo cp $HOME/swift/doc/saio/rsyncd.conf /etc/
sudo sed -i "s/<your-user-name>/vagrant/" /etc/rsyncd.conf
sudo sed -i "s/RSYNC_ENABLE=false/RSYNC_ENABLE=true/" /etc/default/rsync
sudo service rsync restart


使用以下命令来验证rsync,应该能看到一堆的account、container和object:

1
rsync rsync://pub@localhost/


我们前面已经安装了memcached,验证一下服务是可用的:

1
sudo service memcached status


接下来需要配置各个节点:

1
2
3
cd $HOME/swift/doc; sudo cp -r saio/swift /etc/swift; cd -
sudo chown -R ${USER}:${USER} /etc/swift
find /etc/swift/ -name \*.conf | xargs sudo sed -i "s/<your-user-name>/${USER}/"


然后配置swift脚本,/etc/swift/test.conf 为我们添加了三个测试账户:

1
2
3
4
5
6
7
8
9
mkdir -p $HOME/bin
cd $HOME/swift/doc; cp saio/bin/* $HOME/bin; cd -
chmod +x $HOME/bin/*
echo "export SAIO_BLOCK_DEVICE=/srv/swift-disk" >> $HOME/.bashrc
sed -i "/^find/d" $HOME/bin/resetswift
cp $HOME/swift/test/sample.conf /etc/swift/test.conf
echo "export SWIFT_TEST_CONFIG_FILE=/etc/swift/test.conf" >> $HOME/.bashrc
echo "export PATH=${PATH}:$HOME/bin" >> $HOME/.bashrc
. $HOME/.bashrc


Swift里有一个非常重要的概念,ring。通过它可以找到数据的物理位置。它的存储模型是这样的:一个账号(account)里可以有多个容器(container),容器里可以有许多个键值对,字典里的值称为对象(object)。账号和容器被存储在SQLite数据库里,而对象是以文件方式存储的。账号数据库、容器数据库和每个单独对象都有自己的ring。下面我们来构建一些ring:

1
remakerings

启动环境


现在我们就可以用startmain 启动swift啦:

1
2
sudo sed -i 's/bind_ip = 127.0.0.1/bind_ip = 192.168.33.17/' /etc/swift/proxy-server.conf
startmain


然后用test:tester/testing 这个预先创建好的测试账户登录:

1
2
3
4
5
6
curl -i -H 'X-Storage-User: test:tester' -H 'X-Storage-Pass: testing' http://192.168.33.17:8080/auth/v1.0 | tee auth.txt
sudo apt-get -y install dos2unix
dos2unix auth.txt
export X_AUTH_TOKEN=`cat auth.txt | sed -n 's/X-Auth-Token: \(.*\)/\1/p'`
export X_STORAGE_URL=`cat auth.txt | sed -n 's/X-Storage-Url: \(.*\)/\1/p'`
curl -v -H "X-Auth-Token: $X_AUTH_TOKEN" $X_STORAGE_URL


上面用到dos2unix 是因为取到的X-Storage-Url 最后面带着^M$ 的特殊字符。直接管道的话,下一个curl 会报错:Illegal characters found in URL 。可以保存成文件之后使用cat -A 来查看这些特殊字符。


登录完成后,就能看到swift的状态和所有容器啦:

1
2
swift -A http://192.168.33.17:8080/auth/v1.0 -U test:tester -K testing stat
swift -A http://192.168.33.17:8080/auth/v1.0 -U test:tester -K testing list

测试环境


Swift测试

有兴趣的话,还可以运行下面的单元测试、功能测试和探索性测试:

1
2
3
$HOME/swift/.unittests
$HOME/swift/.functests
$HOME/swift/.probetests


Docker Registry测试

在Docker Registry的config.yml 里使用以下配置:

1
storage:
  swift:
    username: test:tester 
    password: testing 
    authurl: http://192.168.33.17:8080/auth/v1.0
    container: swift



可以测试docker push 啦。不过记得需要先登录用户哦。


本文地址:http://dxf6.com/post/24.html
版权声明:本文为原创文章,版权归 社长 所有,欢迎分享本文,转载请保留出处!
重庆专业seo
数据湾

发表评论


表情

还没有留言,还不快点抢沙发?