swift安装及开发调试环境.docx
目录一、swift源码多机部署21 、为每一台机器安装依赖包22. 为每一台机器创建swift用户23. 下载源码(在swift用户下操作)34. 安装swauth和swift (在swift用户下操作)45. Proxy节点的设置46. 配置Storage节点77、 测试swift(在Proxy主机上测试)13二、Swift调试环境搭建:eclipse+pydev151、安装jdk152、安装eclipse153、配置PyDev154、导入swift项目16一、swift源码多机部署所有操作都是在Ubuntu Server 11.10 32位系统上通过验证。本文参考了Openstack-swift的Instructions for a Multiple Server SwiftInstallation (Ubuntu)文档,具体信息如下:Linux系统版本:Ubuntu Server 11.10 32-bit Proxy Server IP: 192.168.1.129Storage Server One:192.168.1.130Storage Server Two:192.168.1.131Storage Server Three:192.168.1.132官方文档: www.openstack.org参考文档: http:/swift.openstack.org/howto_installmultinode.htmlSwift版本: 1.4.8Swauth版本: 1.0.41 、为每一台机器安装依赖包sudo apt-get -option Dpkg:Options:=-force-confold -assume-yes updatesudo apt-get install pep8 pylint python-pip screen unzip wget psmisc git-core lsof openssh-server vim-nox locate python-virtualenv python-unittest2 iputils-ping wget curl tcpdump euca2ools python-setuptools python-dev python-lxml python-pastescript python-pastedeploy python-paste sqlite3 python-pysqlite2 python-sqlalchemy python-mysqldb python-webob python-greenlet python-routes libldap2-dev libsasl2-dev python-bcrypt curl gcc python-configobj python-coverage python-dev python-eventlet python-greenlet python-netifaces python-nose python-pastedeploy python-setuptools python-simplejson python-webob python-xattr sqlite3 xfsprogs2. 为每一台机器创建swift用户sudo useradd -mk /home/swift/ -s /bin/bash swiftsudo passwd swift #为swift用户添加密码,在此我将其设为了swift编辑/etc/sudoer文件,在文件末尾添加如下代码swift ALL=(ALL) NOPASSWD:ALL3. 下载源码(在swift用户下操作)在Proxy机器中下载swauth和swift源码su swift#切换到swift用户sudo mkdir /home/swift/openstack#创建一个目录来存放cd /home/swift/openstackgit clone #下载swiftcd swiftgit checkout 1.4.8#使用1.4.8版本,在swift目录下你可以#使用git tag命令查看有多少个版本git clone #下载swauthcd swauthgit checkout 1.0.4在每一台Storage节点的机器中下载swiftsu swift#切换到swift用户sudo mkdir /home/swift/openstack#创建一个目录来存放cd /home/swift/openstackgit clone #下载swiftcd swiftgit checkout 1.4.8#使用1.4.8版本,在swift目录下你可以使用git tag命令查看有多少个版本4. 安装swauth和swift (在swift用户下操作) 在Proxy机器中安装swauth和swiftcd /home/swift/openstack/swauthsudo python setup.py install -record file.txtcd /home/swift/openstack/swift#在Proxy节点中安装swift是为了使用swift的swift-proxy-serversudo python setup.py install -record file.txt注:file.txt文件记录了安装信息,要想删除所安装的软件通过命令sudo cat file.txt | xargs rm -rf即可删除,这一步可能会出现禁止删除问题,因此你需要使用root用户来操作。在每一台Storage节点的机器中安装swiftcd /home/swift/openstack/swiftsudo python setup.py install -record file.txt5. Proxy节点的设置1.sudo apt-get install memcached#安装缓存服务器修改/etc/ memcached.conf文件,将-l 127.0.0.1改为-l 192.168.1.129(这里我是根据我自己的情况设定的,具体原因见第一点中的图)sudo service memcached restartsudo mkdir /etc/swiftcd /etc/swiftsudo chown -R swift:swift /etc/swiftcp /home/swift/openstack/swift/etc/proxy-server.conf /etc/swift/cp /home/swift/openstack/swift/etc/swift.conf /etc/swift/2.修改/etc/swift/proxy-server.conf文件,具体内容如下,原文件中没有的项需要自行增加DEFAULTbind_port = 8080user = swiftlog_facility = LOG_LOCAL0pipeline:mainpipeline = catch_errors healthcheck cache ratelimit swauth proxy-serverapp:proxy-serveruse = egg:swift#proxyallow_account_management = trueaccount_autocreate = truefilter:swauthuse = egg:swauth#swauth# Highly recommended to change this.super_admin_key = swauthkeydefault_swift_cluster = local#http:/192.168.1.129:8080/auth/v1.0 filter:healthcheckuse = egg:swift#healthcheckfilter:cacheuse = egg:swift#memcache3.修改/etc/swift/swift.conf,红色部分是随意更改的,你可以根据自己的需要更改swift-hashswift_hash_path_suffix = tuletech4.生成相关ring以及builder文件,使用如下命令生成,红色部分是根据具体情况而更改的,具体原因见摘要说明里的图。每一台机器使用一个域(z1, z2, z3依次递增)sudo chown -R swift:swift /etc/swift/*cd /etc/swiftswift-ring-builder object.builder create 18 3 1swift-ring-builder container.builder create 18 3 1swift-ring-builder account.builder create 18 3 1export HOST_IP=192.168.1.130swift-ring-builder object.builder add z1-$HOST_IP:6010/sdb1 100swift-ring-builder container.builder add z1-$HOST_IP:6011/sdb1 100swift-ring-builder account.builder add z1-$HOST_IP:6012/sdb1 100export HOST_IP=192.168.1.131swift-ring-builder object.builder add z2-$HOST_IP:6010/sdb1 100swift-ring-builder container.builder add z2-$HOST_IP:6011/sdb1 100swift-ring-builder account.builder add z2-$HOST_IP:6012/sdb1 100export HOST_IP=192.168.1.132swift-ring-builder object.builder add z3-$HOST_IP:6010/sdb1 100swift-ring-builder container.builder add z3-$HOST_IP:6011/sdb1 100swift-ring-builder account.builder add z3-$HOST_IP:6012/sdb1 100swift-ring-builder object.builder rebalanceswift-ring-builder container.builder rebalanceswift-ring-builder account.builder rebalance5.启动proxy服务swift-init proxy start6. 配置Storage节点因为每个Storage节点的设置基本上是相似的,所以在这里只拿其中一个节点做示例(192.168.1.130),其他节点只需要重复一下几步操作就可以了1.创建/etc/swift目录sudo mkdir /etc/swiftsudo chown -R swift:swift /etc/swift/*2.将Proxy节点上/etc/swift/中的account.ring.gz container.ring.gz object.ring.gz swift.conf拷贝到当前存储节点(192.168.1.130)/etc/swift目录中,可使用如下命令scp swift192.168.1.129:/etc/swift/*.ring.gz /etc/swift/scp swift192.168.1.129:/etc/swift/swift.conf /etc/swift/sudo chown -R swift:swift /etc/swift/*3.更改/etc/rsyncd.conf文件,如果该文件不存在则需要自行创建,内容如下uid = swiftgid = swiftlog file = /var/log/rsyncd.logpid file = /var/run/rsyncd.pidaddress = 192.168.1.130#这里也可以改为127.0.0.1accountmax connections = 2path = /srv/node/read only = falselock file = /var/lock/account.lockconainermax connections = 2path = /srv/node/read only = falselock file = /var/lock/container.lockobjectmax connections = 2path = /srv/node/read only = falselock file = /var/lock/object.lock编辑/etc/default/rsync:将RSYNC_ENABLE设置为true更改好之后,重启该服务sudo service rsync restart4.存储点的设置这里有分两种情况来设置存储点1.假设你的系统里有一个单独分区,使用此分区来做存储点,在这里假设系统中有/dev/sdb1(注:这里根据你自己系统的情况而定)这个分区未被使用,我们用它来做存储点。sudo mkdir -p /srv/node/sdb1sudo mkfs.xfs -i size=1024 /dev/sdb1 #以xfs方式格式化分区sudo chmod a+w /etc/fstabsudo echo “/dev/sdb1 /srv/node/sdb1 xfs noatime,nodiratimenobarrier,logbufs=8 0 0” >> /etc/fstab #系统启动时自动挂载,这里的sdb1是一定不能改的,因为在做Proxy节点生成相应的ring文件时使用了sdb1 (swift-ring-builder object.builder add z1-$HOST_IP:6010/sdb1 100)的时候,加入需要更改则两个地方都需要改sudo mount /srv/node/sdb1sudo chown -R swift:swift /srv/node/sdb1sudo chmod a+w -R /srv/node/sdb12.如果系统里没有单独的分区来做存储点,则需要创建一个临时分区来做存储点sudo mkdir -p /srv/node/sdb1sudo dd if=/dev/zero of=/srv/swift-disk bs=1024 count=0 seek=#这个命令是在/srv/下创建一个名为swift-disk的存储区,你可以改变seek的大小来改变swift-disk的大小sudo mkfs.xfs -i size=1024 /srv/swift-disksudo chmod a+w /etc/fstabsudo echo “/srv/swift-disk /srv/node/sdb1 xfs loop,noatime,nodiratime,nobarrier,logbufs=8 0 0” >> /etc/fstab#系统启动时自动挂载sudo mount /srv/node/sdb1sudo chown -R swift:swift /srv/node/sdb1sudo chmod a+w -R /srv/node/sdb1sudo chmod a+w /srv/swift-disk创建相关的目录sudo mkdir /var/run/swiftsudo chown swift:swift /var/run/swiftsudo chmod a+w /var/run/swift在/etc/rc.local的exit 0之前加入下列三行mkdir /var/run/swiftchown swift:swift /var/run/swiftchmod a+w /var/run/swift5.Swift文件配置创建/etc/swift/account-server.conf文件,并加入如下配置DEFAULTdevices = /srv/nodemount_check = falsebind_port = 6012user = swiftbind_ip = 0.0.0.0workers = 2pipeline:mainpipeline = account-serverapp:account-serveruse = egg:swift#accountaccount-replicatoraccount-auditoraccount-reaper创建/etc/swift/object-server.conf文件DEFAULTdevices = /srv/nodemount_check = falsebind_port = 6010user = swiftbind_ip = 0.0.0.0workers = 2pipeline:mainpipeline = object-serverapp:object-serveruse = egg:swift#objectobject-replicatorobject-updaterobject-auditor创建/etc/swift/ container-server.conf文件DEFAULTdevices = /srv/nodemount_check = falsebind_port = 6011user = swiftbind_ip = 0.0.0.0workers = 2pipeline:mainpipeline = container-serverapp:container-serveruse = egg:swift#containercontainer-replicatorcontainer-updatercontainer-auditorcontainer-sync6.启动swift服务sudo chown -R swift:swift /etc/swift/*swift-init all start#当启动的时候可能会报WARNING: Unable to increase file descriptor limit. Running as non-root? 这是正常情况7、 测试swift(在Proxy主机上测试)1. 初始化swauthswauth-prep -K swauthkey #执行成功的话则不会有任何信息显示#在这一步经常会出现Auth subsystem prep failed: 500 ServerError这种错误,发生错误的原因可能是你的/srv下的目录的拥有者不是属于swift用户。2. 添加用户swauth-add-user -A http:/127.0.0.1:8080/auth/ -K swauthkey -a test tester testing #在tenant test中添加tester用户并设置密码为testing3. 检测swift运行状态swift -A http:/127.0.0.1:8080/auth/v1.0 -U test:tester -K testing stat -v #运行成功则会返回类似如下的信息StorageURL:http:/127.0.0.1:8080/v1/AUTH_84841e28-93a8-4e9c-a295-f9734f25da01AuthToken: AUTH_tkfacf171def344d03bf01519e93327f3cAccount:AUTH_ 84841e28-93a8-4e9c-a295-f9734f25da01Containers:0Objects:0Bytes:0Accept-Ranges:bytesX-Trans-Id:txa0c57ad0fd6d435b8287ca111ca0269a注:红色字体部分是根据具体情况而定的9. 上传和下载文件(在Proxy主机上测试)1. 获取X-Storage-Token和X-Storage-Urlcurl -v -H 'X-Storage-User: test:tester' -H 'X-Storage-Pass: testing' http:/127.0.0.1:8080/auth/v1.0 #执行完该条语句会返回相应的信息,例如(返回信息的一小部分):HTTP/1.1200 OKX-Storage-Url:http:/127.0.0.1:8080/v1/AUTH_84841e28-93a8-4e9c-a295-f9734f25da01X-Storage-Token:AUTH_tkfacf171def344d03bf01519e93327f3cX-Auth-Token:AUTH_tkfacf171def344d03bf01519e93327f3c2. 创建container和列出容器curl -X PUT -D - -H "X-Auth_Token:AUTH_tkfacf171def344d03bf01519e93327f3c"http:/127.0.0.1:8080/v1/AUTH_84841e28-93a8-4e9c-a295-f9734f25da01/cynric #创建tule容器,红色部分是上一步返回的信息swift -A http:/127.0.0.1:8080/auth/v1.0 -U test:tester -K testing list #查看test用户的container列表3. 上传和列出文件swift -A http:/127.0.0.1:8080/auth/v1.0 -U test:tester -K testing upload cynric/etc/swift/proxy-server.conf #将/etc/swift/proxy-server.conf文件上传到tule容器中swift -A http:/127.0.0.1:8080/auth/v1.0 -U test:tester -K testing list tule #列出tule容器中的文件4. 下载文件swift -A http:/127.0.0.1:8080/auth/v1.0 -U test:tester -K testing download tule #将tule容器下的所有文件下载到本地注意:如果上传文件的时候,有嵌套目录,则上传到swift上后,也是以嵌套目录的形式存在,下载后,会在当前目录创建一样的嵌套目录。二、Swift调试环境搭建:eclipse+pydevEclipse是由java开发的,所以要想让Eclipse跑起来就得安装jdk,在命令行里输入javac就能查看本机是否已经安装好了jdk了。1、安装jdk先从oracle官网上下载jdk,放到/usr/local/src/文件中,由于找不到linux的下载连接,所以只能在界面中用FF直接下载了。1、cd /usr/local/src/ #进入所放下载文件的目录2、chmod u+x jdk-6u22-linux-i586-rpm.bin #由于下载的安装文件没有x权限,所以给root用户添加x权限3、./jdk-6u22-linux-i586-rpm.bin #安装完成此时在命令行里输入java -version已经能看到java的安装信息了。2、安装eclipse到官eclipse官网上下载你自己想要的linux下的eclipse版本,保存到/usr/local/src/目录中,我这里下的是eclipse-jee-indigo-SR2-linux-gtk.tar.gz,是个压缩包,eclipse是免安装的,直接解压缩就可以使用了。1、cd /usr/local/src/ #进入下载的文件目录中2、tar -zxv -f eclipse-cpp-helios-SR1-linux-gtk.tar.gz -C /usr/local/ #-C解压到的目录,自动生成一下eclipse的目录启动eclipse只能在图形界面中启动,不能在命令行模式下启动。可以在图形界面中像windows一样找到该解压目录/usr/local/eclipse/,双击eclipse文件就能启动了,也可以在终端输入/usr/local/eclipse/eclipse来启动。3、配置PyDev (1)启动eclipse,选择Help>Install New Software.(2)在workwith里键入 ,单击Add,eclipse自动搜索到PyDev的插件,选择之,一步步Next进行安装(3)查看PyDev是否安装成功,选择Help>About Eclipst>Installation Details,即可到具体安装的插件(4)配置PyDev解释器,选择Windows>Preferences>PyDev>Interpreter-python,点击New,找到自己python的安装路径,选择python.exe,再选择具体的Libraries.最后OK(5)最后就是使用PyDev环境了,在eclipse的最右上角显示着当前正在使用的是哪个开发环境,选择Open Perspective>Other>PyDev>OK,即可切换到PyDev开发环境4、导入swift项目工程>import->àGeneral->àArchive File5、运行swift运行swift目录下面的setup.py,选择Run Configurations在新窗口中Arguments下的Programe arguments填入install 如果在非特权用户下运行,最后会报错:切换到root账户下,重启eclipse然后就可以运行成功了。要在eclipse集成环境下运行swift,首先要把相关依赖包安装好,就是前面部署swift的依赖包。