在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
https://blog.csdn.net/mirale/article/details/22049219 今天终于有时间把最近安装Swift的过程整理一下,安装参考了一些资料,这篇博客主要是结合自己的实际把整个过程再回顾一遍,一是坚持写技术文档,二是希望对新手有点帮助。 如需转载还望注明出处: http://blog.csdn.net/mirale/article/details/22049219
存储服务是负责文件存储的服务,由3个组件组成:account-server、container-server、object-server。其中object-server负责具体的文件存储,container-server包含到每个object的索引,account-server包含到每个container 的索引。所谓container可以理解为通常意义上的目录。这3者的关系图如下:
swift的存储集群由多个zone构成,所谓zone是指物理上独立的资源,比如一台服务器、一个机架、一个机房,都可以成为一个zone。我们这里采用每台服务器作为一个zone。在swift集群里至少要有5个zone。swift具体的存储单元叫做分区(partition),分区实际上是文件系统里的子目录,每个分区都包含独立的account、container、object服务。数据复制是基于分区的。swift有3个至关重要的rings文件,里面保存了系统的zone、node、device、partitaion信息,在系统上线之初,要手工创建这3个文件。 如下是Swift架构图:
2.安装环境 IP地址 存储设备 运行服务 配置文件 服务端口 将swift添加到sudo组方便使用sudo:usermod -a -G sudo swift 切换到swift用户:su - swift (此时已经在swift的家目录下) 下载swift: git clone https://github.com/openstack/swift.git 安装swift:cd ~/swift;python setup.py install;cd - 注意运行上面最后一步时有可能会出现错误,从错误提示中发现要求pip>=1.4,原来我的python包安装程序pip版本只有1.0,所以通过pip来指定安装不低于1.4版本的pip:sudo pip install "pip>=1.4",更新之后再执行上面最后一步就OK了。 3.1.5 创建配置文件目录:mkdir /etc/swift;chown -R swift:swift /etc/swift [swift-hash] #random unique strings that can never change (DO NOT LOSE) 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 然后将生成的/etc/swift/swift.conf拷贝到每一个storage节点的/etc/swift目录。请注意这个文件至关重要,因为swift的一次性哈希算法,就使用这里的随机字符串作为种子。对于已经在运行的swift集群,该文件不能再次变更。 3.2.2 在proxy上启动memcached服务,默认配置文件里的Linsten地址要改一下,可被其他服务器访问到。 重启memcached服务:service memcached restart 3.2.3 创建proxy-server.conf配置文件: [DEFAULT] 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 http://192.168.1.54:8080/v1/AUTH-system
[filter:healthcheck] use=egg:swift#healthcheck
[filter:cache] use=egg:swift#memcache memcache_servers=192.168.1.54:11211 EOF 这里可以指定proxy使用https,但是在产品环境里,不要配置proxy使用SSL,可以在proxy前端的负载均衡器(例如nginx)那里进行SSL终结。workers参数表示工作进程数,推荐配置是跟CPU核心数保持一致。 3.2.4 创建rings: swift-ring-builder account.builder create 8 2 1 swift-ring-builder container.builder create 8 2 1 swift-ring-builder object.builder create 8 2 1 这里的参数比较重要,8代表2的8次方,创建256个分区(前面讲过,swift的存储单元是基于分区的)。分区的数量,应该是swift集群里预计的最大磁盘数量乘以100。我这里只有两个storage node,每台一个硬盘,2*100=200,2^8=256,2^7=128,所以可取8。 2代表每个文件存储2份,请注意默认存储为3份,我这里只有两个zone,所以就存储2份了。最后一个1的单位是小时,指分区在1个小时内移动不超过1次。 3.2.5 执行如下脚本: cd /etc/swift swift-ring-builder account.builder add z1-192.168.1.55:6002/sda5 100 swift-ring-builder container.builder add z1-192.168.1.55:6001/sda5 100 swift-ring-builder object.builder add z1-192.168.1.55:6000/sda5 100
swift-ring-builder container.builder add z2-192.168.1.56:6001/sda5 100 swift-ring-builder object.builder add z2-192.168.1.56:6000/sda5 100 这个过程就是往rings里增加磁盘,最后一个100表示权重,越大越快的磁盘应该使用越高的权重。 3.2.6 运行如下命令验证配置: swift-ring-builder container.builder swift-ring-builder object.builder 3.2.7 运行rebalance: swift-ring-builder container.builder rebalance swift-ring-builder object.builder rebalance 这个过程比较久点。 3.2.8 将上述生成的account.ring.gz, container.ring.gz, object.ring.gz 拷贝到每一个存储节点的/etc/swift目录。 如查看到8080端口打开,没有其他报错,表明proxy服务就启动正常。 3.3只在storage上执行 umount /dev/sda5 mount /dev/sda5 /srv/node/sda5 chown swift:swift /srv/node/sda5 chown root:root /srv/node 注:修改/srv/node的权属为root:root是为了防止存储盘意外卸载时/srv/node文件夹下产生swift的objects。 设定开机挂载,修改/etc/fstab中/dev/sda5所在行: /dev/sda5 /srv/node/sda5 xfs noatime,nodiratime,nobarrier,logbufs=8 3.3.2 创建如下目录 cat >/etc/rsyncd.conf <<EOF [account] [container] [object] workers = 2 [pipeline:main] [app:account-server] [account-replicator] [account-auditor] [account-reaper] [pipeline:main] [app:container-server] [container-replicator] [container-updater] [container-auditor] [container-sync] [pipeline:main] [app:object-server] [object-replicator] [object-updater] [object-auditor] 4.1 获取X-Storage-Url和X-Auth-Token: curl -k -v -H 'X-Storage-User: system:root' -H 'X-Storage-Pass: testpass' https://192.168.1.54:8080/auth/v1.0 curl -k -v -H 'X-Auth-Token: <token-from-x-auth-token-above>' <url-from-x-storage-url-above> swift -A https://192.168.1.54:8080/auth/v1.0 -U system:root -K testpass stat Containers:1 Objects:0 Bytes:0 Accept_Ranges:bytes X-Timestamp:1377152716.51055 Content-Type:text/plain;charset=utf-8 4.4 上传两个文件到myfiles这个container swift -A https://192.168.1.54:8080/auth/v1.0 -U system:root -K testpass upload myfiles bigfile1.tgz swift -A https://192.168.1.54:8080/auth/v1.0 -U system:root -K testpass download myfiles swift -A https://192.168.1.54:8080/auth/v1.0 -U system:root -K testpass list myfiles
|
请发表评论