阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Ubuntu下Swift多节点安装测试小结

122次阅读
没有评论

共计 18655 个字符,预计需要花费 47 分钟才能阅读完成。

1      环境准备
1.1        版本
Linux 系统版本:Ubuntu Server 12.04.1 LTS;

Swift 版本:1.0(稍后安装);

Python 版本:2.7.3(稍后安装);

Python-swiftclient 版本:1.3.0(稍后安装)。

Ubuntu 下 Swift 单节点安装测试小结  http://www.linuxidc.com/Linux/2014-02/97348.htm

1.2        节点 IP
Proxy Node IP:172.17.10.14;

Storage Node 1 IP:172.17.10.10(有 2 个 2T 的存储设备);

Storage Node 2 IP:172.17.10.11(有 1 个 2T 的存储设备);

Storage Node 3 IP:172.17.10.13(有 1 个 2T 的存储设备)。

1.3        替换镜像(可选步骤)
“网速较慢”或者“安装软件失败”的情况下,可以考虑替换成国内的镜像:

vsroot@ubuntu:~$ sudo sed -i ‘s#us.archive.ubuntu.com#mirrors.163.com#g’/etc/apt/sources.list

vsroot@ubuntu:~$ sudo apt-get update

1.4        系统时间
vsroot@ubuntu:~$ date #查看系统时间是否正确,正确的话则忽略下面两步

vsroot@ubuntu:~$ sudo date -s”2013-11-04 15:05:57″ #设置系统时间

vsroot@ubuntu:~$ sudo hwclock –w #写入硬件时间

1.5        关闭防火墙
请确保已关闭 SELinux。

vsroot@ubuntu:~$ sudo ufw disable #关闭防火墙

2      通用的 OS 配置
2.1        在每个节点上创建 Swift 用户
vsroot@ubuntu:~$ sudo useradd -mk/home/swift -s /bin/bash swift

vsroot@ubuntu:~$ sudo passwd swift # 不妨把用户 swift 的密码设置成 swift

编辑 /etc/sudoers,在文件末尾添加以下内容:

vsroot@ubuntu:~$ sudo vim /etc/sudoers

# User alias specification

swift  ALL=(ALL) NOPASSWD:ALL

然后,就可以切换到 swift 用户进行后续操作了:

vsroot@ubuntu:~$ su swift

2.2        在每个节点上安装 Swift 库
swift@ubuntu:~$ sudo apt-get installpython-software-properties

swift@ubuntu:~$ sudo add-apt-repository ppa:swift-core/release# 忽略这步报错

swift@ubuntu:~$ sudo add-apt-repositorycloud-archive:grizzly #也可选择 H 版等

swift@ubuntu:~$ sudo apt-get update

swift@ubuntu:~$ sudo apt-get install swiftpython-swiftclient openssh-server

2.3        在每个节点上创建 Swift 工作目录
swift@ubuntu:~$ sudo mkdir -p /etc/swift

swift@ubuntu:~$ sudo chown -R swift:swift/etc/swift/

2.4        创建 Swift 配置文件
在任一节点上创建 Swift 配置文件:

swift@ubuntu:~$ cat>/etc/swift/swift.conf <<EOF

[swift-hash]

# random unique strings that can neverchange (DO NOT LOSE)

swift_hash_path_prefix = `od -t x8 -N 8 -An </dev/random`

swift_hash_path_suffix = `od -t x8 -N 8 -An </dev/random`

EOF

然后,依次拷贝该 Swift 配置文件到其它所有节点上:

swift@ubuntu:~$ scp /etc/swift/swift.conf 172.17.10.10:/etc/swift/

2.5        在每个节点上设置 IP 的环境变量
在所有的 Storage Node 上根据自身真实 IP 设置如下:

swift@ubuntu:~$ exportSTORAGE_LOCAL_NET_IP=172.17.10.10

在所有的 Proxy Node 上根据自身真实 IP 设置如下:

swift@ubuntu:~$ export PROXY_LOCAL_NET_IP=172.17.10.14

考虑到 export 命令只对当前用户的当前会话生效,也可以考虑将环境变量写到 /etc/profile 中:

swift@ubuntu:~$ sudo vim /etc/profile

swift@ubuntu:~$ source /etc/profile #当前会话立即生效

2.6        创建 Swift 服务目录并修改开机配置文件
swift@ubuntu:~$ sudo mkdir -p/var/run/swift

swift@ubuntu:~$ sudo chown swift:swift/var/run/swift

swift@ubuntu:~$ sudo vim /etc/rc.local

sudo mkdir -p /var/run/swift

sudo chown swift:swift /var/run/swift

exit 0

3      配置 Proxy Node
3.1        安装 swift-proxy 库
swift@ubuntu:~$ sudo apt-get installswift-proxy memcached

3.2        创建 SSL 自签名证书
swift@ubuntu:~$ cd /etc/swift

swift@ubuntu:/etc/swift$ openssl req -new-x509 -nodes -out cert.crt -keyout cert.key

注意,证书的 CommonName 必须设置成 Proxy Node 的 IP 地址:172.17.10.14。

3.3        配置 memcached 并重启服务
swift@ubuntu:~$ sudo perl -pi -e “s/-l127.0.0.1/-l $PROXY_LOCAL_NET_IP/” /etc/memcached.conf

swift@ubuntu: ~$ sudo service memcachedrestart

最好检查一下 memcached 服务是否已经正常启动。

3.4        创建 Proxy 服务器配置文件
swift@ubuntu:~$ cat >/etc/swift/proxy-server.conf <<EOF

[DEFAULT]

cert_file= /etc/swift/cert.crt

key_file= /etc/swift/cert.key

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 https://$PROXY_LOCAL_NET_IP:8080/v1/AUTH_system

 

[filter:healthcheck]

use =egg:swift#healthcheck

 

[filter:cache]

use =egg:swift#memcache

memcache_servers= $PROXY_LOCAL_NET_IP:11211

EOF

3.5        创建 account、container 和 object rings
swift@ubuntu:~$ cd /etc/swift

sudo swift-ring-builder account.builder create 18 3 1

sudo swift-ring-builder container.builder create 18 3 1

sudo swift-ring-builder object.builder create 18 3 1

其中,18 代表 partition 的数目为 2 的 18 次幂,这个数字取决于你希望一个 ring 中会有多少个 partition。3 代表每个 object 的副本数。最后一个参数 1,代表一个 partition 至少在 1 小时之后才能被移动。

3.6        让 ring 记录每个 Storage Node 的存储设备
export ZONE=1

export STORAGE_LOCAL_NET_IP=172.17.10.10

export WEIGHT=100

export DEVICE=sdb1

sudo swift-ring-builder account.builder addz$ZONE-$STORAGE_LOCAL_NET_IP:6002/$DEVICE $WEIGHT

sudo swift-ring-builder container.builderadd z$ZONE-$STORAGE_LOCAL_NET_IP:6001/$DEVICE $WEIGHT

sudo swift-ring-builder object.builder addz$ZONE-$STORAGE_LOCAL_NET_IP:6000/$DEVICE $WEIGHT

export ZONE=1

export STORAGE_LOCAL_NET_IP=172.17.10.10

export WEIGHT=100

export DEVICE=sdc1

sudo swift-ring-builder account.builder addz$ZONE-$STORAGE_LOCAL_NET_IP:6020/$DEVICE $WEIGHT

sudo swift-ring-builder container.builderadd z$ZONE-$STORAGE_LOCAL_NET_IP:6010/$DEVICE $WEIGHT

sudo swift-ring-builder object.builder add z$ZONE-$STORAGE_LOCAL_NET_IP:6030/$DEVICE$WEIGHT

export ZONE=2

export STORAGE_LOCAL_NET_IP=172.17.10.11

export WEIGHT=100

export DEVICE=sdb1

sudo swift-ring-builder account.builder addz$ZONE-$STORAGE_LOCAL_NET_IP:6002/$DEVICE $WEIGHT

sudo swift-ring-builder container.builderadd z$ZONE-$STORAGE_LOCAL_NET_IP:6001/$DEVICE $WEIGHT

sudo swift-ring-builder object.builder addz$ZONE-$STORAGE_LOCAL_NET_IP:6000/$DEVICE $WEIGHT

export ZONE=3

export STORAGE_LOCAL_NET_IP=172.17.10.13

export WEIGHT=100

export DEVICE=sdb1

sudo swift-ring-builder account.builder addz$ZONE-$STORAGE_LOCAL_NET_IP:6002/$DEVICE $WEIGHT

sudo swift-ring-builder container.builderadd z$ZONE-$STORAGE_LOCAL_NET_IP:6001/$DEVICE $WEIGHT

sudo swift-ring-builder object.builder addz$ZONE-$STORAGE_LOCAL_NET_IP:6000/$DEVICE $WEIGHT

注意,这里需要根据 Storage Node 的存储设备实际情况来设定:

① DEVICE 需要根据 Storage Node 上的 /etc/rsyncd.conf 中的 path 来设置,例如 path 为 /srv/node/,查看 /srv/node/ 下存在目录 sdb1 上的话,则 DEVICE 值为 sdb1;

② ZONE 从 1 开始计数,逐次加 1;当一个 Storage Node 存在多个 DEVICE 时,可以设为同一个 ZONE(推荐),也可以设为多个 ZONE;

③ 如果每个挂载分区的大小都一样,WEIGHT(权重)不妨均设置成 100。

3.7        确认 ring 的内容是否正确并平衡(Rebalance)ring
swift-ring-builder account.builder

swift-ring-builder container.builder

swift-ring-builder object.builder

sudo swift-ring-builder account.builderrebalance

sudo swift-ring-builder container.builderrebalance

sudo swift-ring-builder object.builderrebalance

3.8        拷贝 ring 到其它所有节点
swift@ubuntu:~$ scp /etc/swift/*.ring.gz 172.17.10.10:/etc/swift/

这里需要把 account.ring.gz、container.ring.gz 和 object.ring.gz 拷贝到其它所有 Proxynode 和 Storage node 的 /etc/swift 目录下。

并需要确保所有节点的配置文件都属于 swift 用户:

swift@ubuntu:~$ sudo chown -R swift:swift/etc/swift

3.9        开启 Proxy 服务
swift@ubuntu:~$ sudo swift-init proxy start

Ubuntu Server 11.10 下使用 Swauth 认证多节点安装 Swift    http://www.linuxidc.com/Linux/2012-04/58100.htm

4      配置 Storage Node
4.1        在所有 StorageNode 上安装库
swift@Ubuntu:~$ sudo apt-get installswift-account swift-container swift-object xfsprogs

4.2        为 StorageNode 的每个存储设备安装 XFS 逻辑卷
需要根据 Storage Node 的存储设备实际情况,为每个存储设备安装 XFS 逻辑卷。

swift@ubuntu:~$ sudo fdisk /dev/sdb #需要建立独立分区

swift@ubuntu:~$ sudo mkfs.xfs -i size=512/dev/sdb1

如果文件系统小于 100MiB 或有大量小型档案,建议使用 512 字节区块;其余情况建议使用 4KiB 区块。

swift@ubuntu:~$ sudo vim /etc/fstab

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

swift@ubuntu:~$ sudo mkdir -p/srv/node/sdb1

swift@ubuntu:~$ sudo mount -o inode64 /srv/node/sdb1

如果磁盘大于 1T,上面的 mount 命令可以加上 -o inode64 以达到更好的性能。

swift@ubuntu:~$ sudo chown swift:swift/srv/node/sdb1

4.3        创建 rsync 配置文件
swift@ubuntu:~$ sudo su #切换用户后,需重新定义 STORAGE_LOCAL_NET_IP

root@ubuntu:~$ cat >/etc/rsyncd.conf<<EOF

uid = swift

gid = swift

log file = /var/log/rsyncd.log

pid file = /var/run/rsyncd.pid

address = $STORAGE_LOCAL_NET_IP

 

[account]

max connections = 2

path = /srv/node/

read only = false

lock file = /var/lock/account.lock

 

[container]

max connections = 2

path = /srv/node/

read only = false

lock file = /var/lock/container.lock

 

[object]

max connections = 2

path = /srv/node/

read only = false

lock file = /var/lock/object.lock

EOF

root@ubuntu:~$ su swift #切换用户后,需重新定义 STORAGE_LOCAL_NET_IP

4.4        修改 rsync 标签
swift@ubuntu:~$ sudo perl -pi -e’s/RSYNC_ENABLE=false/RSYNC_ENABLE=true/’ /etc/default/rsync

4.5        启动 rsync 服务
swift@ubuntu:~$ sudo service rsync restart

如果服务不能正常启动,请检查 rsync 配置文件。

确认 rsync 是否已连接所有服务:

swift@ubuntu:~$ rsyncrsync://pub@$STORAGE_LOCAL_NET_IP/

4.6        创建 account、container 和 object rings 配置文件
swift@ubuntu:~$ cat>/etc/swift/account-server.conf <<EOF

[DEFAULT]

bind_ip = $STORAGE_LOCAL_NET_IP

workers = 2

 

[pipeline:main]

pipeline = account-server

 

[app:account-server]

use = egg:swift#account

 

[account-replicator]

 

[account-auditor]

 

[account-reaper]

EOF

swift@ubuntu:~$ cat>/etc/swift/container-server.conf <<EOF

[DEFAULT]

bind_ip = $STORAGE_LOCAL_NET_IP

workers = 2

 

[pipeline:main]

pipeline = container-server

 

[app:container-server]

use = egg:swift#container

 

[container-replicator]

 

[container-updater]

 

[container-auditor]

 

[container-sync]

EOF

swift@ubuntu:~$ cat>/etc/swift/object-server.conf <<EOF

[DEFAULT]

bind_ip = $STORAGE_LOCAL_NET_IP

workers = 2

 

[pipeline:main]

pipeline = object-server

 

[app:object-server]

use = egg:swift#object

 

[object-replicator]

 

[object-updater]

 

[object-auditor]

EOF

4.7        启动存储服务
swift@ubuntu:~$ sudo swift-init all start

或者单步执行,参照如下:

swift@ubuntu:~$ sudo swift-initobject-server start

swift@ubuntu:~$ sudo swift-initobject-replicator start

swift@ubuntu:~$ sudo swift-initobject-updater start

swift@ubuntu:~$ sudo swift-initobject-auditor start

swift@ubuntu:~$ sudo swift-initcontainer-server start

swift@ubuntu:~$ sudo swift-initcontainer-replicator start

swift@ubuntu:~$ sudo swift-initcontainer-updater start

swift@ubuntu:~$ sudo swift-initcontainer-auditor start

swift@ubuntu:~$ sudo swift-initaccount-server start

swift@ubuntu:~$ sudo swift-initaccount-replicator start

swift@ubuntu:~$ sudo swift-initaccount-auditor start

5      HTTP 测试
5.1        获得 X -Storage-Url 和 X -Auth-Token
swift@ubuntu:~$ curl -k -v -H’X-Storage-User: system:root’ -H ‘X-Storage-Pass: testpass’ https://$PROXY_LOCAL_NET_IP:8080/auth/v1.0

5.2        检测是否可以使用 HEAD 命令查询 account 状态
命令格式如下:

curl -k -v -H ‘X-Auth-Token:<token-from-x-auth-token-above>’ <url-from-x-storage-url-above>

具体示例如下:

curl -k -v -H ‘X-Auth-Token: AUTH_tk2e46a17833d5474cb29ea22720457ac1’ https://$PROXY_LOCAL_NET_IP:8080/v1/AUTH_system

5.3        Swift 常用命令
检测 swift 命令是否正常工作,预期输出应为 zero containers、zero objects 和 zero bytes:

swift@ubuntu:~$ swift -Ahttps://$PROXY_LOCAL_NET_IP:8080/auth/v1.0 -U system:root -K testpass stat

新建一级子目录 mycontainer1:

swift@ubuntu:~$ swift -Ahttps://$PROXY_LOCAL_NET_IP:8080/auth/v1.0 -U system:root -K testpass post mycontainer1

把本地指定文件上传到一级子目录 mycontainer1 中:

swift@ubuntu:~$ swift -Ahttps://$PROXY_LOCAL_NET_IP:8080/auth/v1.0 -U system:root -K testpass upload mycontainer1 /etc/swift/*.builder

列出根目录的细节:

swift@ubuntu:~$ swift -Ahttps://$PROXY_LOCAL_NET_IP:8080/auth/v1.0 -U system:root -K testpass list

列出一级子目录的细节:

swift@ubuntu:~$ swift -Ahttps://$PROXY_LOCAL_NET_IP:8080/auth/v1.0 -U system:root -K testpass list mycontainer1

删除一级子目录 mycontainer1 下的某个指定文件:

swift@ubuntu:~$ swift -Ahttps://$PROXY_LOCAL_NET_IP:8080/auth/v1.0 -U system:root -K testpass delete mycontainer1 etc/swift/account.builder

把一级子目录 mycontainer1 中的资源都下载到本地当前目录:

swift@ubuntu:~$ swift -Ahttps://$PROXY_LOCAL_NET_IP:8080/auth/v1.0 -U system:root -K testpass download mycontainer1

6      FTP 测试
6.1        在 ProxyNode 上下载并安装 ftp-cloudfs
方法一:

swift@ubuntu:~$ git clone https://github.com/cloudfs/ftp-cloudfs.git

swift@ubuntu:~$ cd ftp-cloudfs/

swift@ubuntu:~$ Python setup.py install

swift@ubuntu:~$ sudo apt-get installpython-pip

swift@ubuntu:~$ pip install ftp-cloudfs

方法二:

swift@ubuntu:~$ sudo apt-get installpython-virtualenv

swift@ubuntu:~$ virtualenv ENV

swift@ubuntu:~$ source ENV/bin/activate

swift@ubuntu:~$ sudo apt-get installpython-pip

swift@ubuntu:~$ pip install –upgrade pip

swift@ubuntu:~$ pip install ftp-cloudfs

6.2        启动 ftp-cloudfs 服务
单用户情况下,可以使用如下命令启动 ftp-cloudfs 服务:

swift@ubuntu:~$ ftpcloudfs -b $PROXY_LOCAL_NET_IP -a https://$PROXY_LOCAL_NET_IP:8080/auth/v1.0 -f

多用户情况下,推荐使用如下命令启动 ftp-cloudfs 服务,性能会相对好些:

swift@ubuntu:~$ ftpcloudfs -b $PROXY_LOCAL_NET_IP -a https://$PROXY_LOCAL_NET_IP:8080/auth/v1.0 –memcache=$PROXY_LOCAL_NET_IP:11211–log-file /tmp/ftpcloufs.log

这里使用了 Proxy Node 的 memcache 作为共享缓存。此外,我们把 FTP 相关的 log 输出到 /tmp/ftpcloufs.log 中便于查看。如果作为产品发布,建议还是使用 –syslog。

如果要停止 ftp-cloudfs 服务,可以使用这条命令:

swift@ubuntu:~$ kill `cat/tmp/ftpcloudfs.pid`

6.3        Windows 客户端 FTP 访问
可以在 Windows 客户端安装 FTP 工具(例如 FileZilla),或者直接通过 IE 浏览器简单访问 ftp://172.17.10.14:2021。

主机:172.17.10.14

用户名:system:root

密码:testpass

端口:2021

预期可以访问成功,并能够正常地上传、下载、新建、删除、重命名文件和目录等。

6.4        Linux 客户端 FTP 访问
swift@ubuntu:~$ ftp 172.17.10.14 2021

然后输入用户名密码,就可以访问成功并正常使用了。

常用的几个 FTP 命令如下:

cd remote-dir:进入远程主机目录。
ls [remote-dir] [local-file]:显示远程目录 remote-dir,并存入本地文件 local-file(和 dir 命令相同)。
mkdir dir-name:在远程主机中建一目录。
rmdir dir-name:删除远程主机目录。
rename [from] [to]:更改远程主机文件名。
delete remote-file:删除远程主机文件。
mdelete [remote-file]:删除远程主机文件。
get remote-file [local-file]:将远程主机文件 remote-file 传至本地文件 local-file。
mget remote-files:传输多个远程文件。
put local-file [remote-file]:将本地文件 local-file 传送至远程主机。
mput local-file:将多个文件传输至远程主机。
pwd:显示远程主机的当前工作目录。
bye:退出 ftp 会话过程(和 quit 命令相同)。

7      调试手段
7.1        日志查询
Swift 的相关日志会输出到 var/log/syslog 中。

7.2        增强日志
var/log/syslog 可能日志太少影响定位问题,我们可以增强日志。参考 http://docs.openstack.org/developer/swift/deployment_guide.html#account-server-configuration,可以在 /etc/swift/proxy-server.conf 等配置文件中设定 log 的输出等级为 DEBUG。

例如,/etc/swift/proxy-server.conf 文件中,[app:proxy-server]这一部分追加了 setlog_level = DEBUG,[filter:tempauth]这一部分追加了 set log_level = DEBUG。

7.3        查看端口
使用“telnet IPPORT”或者“lsof -i PORT”命令查看端口。Proxy Node 上主要关注端口 11211/8080/2021 等,Storage Node 上主要关注 Ring 的相关端口,如 6000/6001/6002 等。

8      小结
Swift 牺牲一定程度的数据一致性,来达到高可用性和可伸缩性,支持多租户模式、容器和对象读写操作,适合解决互联网的应用场景下非结构化数据存储问题。

由于 Swift 的弱一致性,所以在刚刚新建或刚刚删除一个文件后,我们立即去查看,可能看到的结果不符合预期,稍等一会儿再查看,就正常了。

更多 Ubuntu 相关信息见Ubuntu 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=2

1      环境准备
1.1        版本
Linux 系统版本:Ubuntu Server 12.04.1 LTS;

Swift 版本:1.0(稍后安装);

Python 版本:2.7.3(稍后安装);

Python-swiftclient 版本:1.3.0(稍后安装)。

Ubuntu 下 Swift 单节点安装测试小结  http://www.linuxidc.com/Linux/2014-02/97348.htm

1.2        节点 IP
Proxy Node IP:172.17.10.14;

Storage Node 1 IP:172.17.10.10(有 2 个 2T 的存储设备);

Storage Node 2 IP:172.17.10.11(有 1 个 2T 的存储设备);

Storage Node 3 IP:172.17.10.13(有 1 个 2T 的存储设备)。

1.3        替换镜像(可选步骤)
“网速较慢”或者“安装软件失败”的情况下,可以考虑替换成国内的镜像:

vsroot@ubuntu:~$ sudo sed -i ‘s#us.archive.ubuntu.com#mirrors.163.com#g’/etc/apt/sources.list

vsroot@ubuntu:~$ sudo apt-get update

1.4        系统时间
vsroot@ubuntu:~$ date #查看系统时间是否正确,正确的话则忽略下面两步

vsroot@ubuntu:~$ sudo date -s”2013-11-04 15:05:57″ #设置系统时间

vsroot@ubuntu:~$ sudo hwclock –w #写入硬件时间

1.5        关闭防火墙
请确保已关闭 SELinux。

vsroot@ubuntu:~$ sudo ufw disable #关闭防火墙

2      通用的 OS 配置
2.1        在每个节点上创建 Swift 用户
vsroot@ubuntu:~$ sudo useradd -mk/home/swift -s /bin/bash swift

vsroot@ubuntu:~$ sudo passwd swift # 不妨把用户 swift 的密码设置成 swift

编辑 /etc/sudoers,在文件末尾添加以下内容:

vsroot@ubuntu:~$ sudo vim /etc/sudoers

# User alias specification

swift  ALL=(ALL) NOPASSWD:ALL

然后,就可以切换到 swift 用户进行后续操作了:

vsroot@ubuntu:~$ su swift

2.2        在每个节点上安装 Swift 库
swift@ubuntu:~$ sudo apt-get installpython-software-properties

swift@ubuntu:~$ sudo add-apt-repository ppa:swift-core/release# 忽略这步报错

swift@ubuntu:~$ sudo add-apt-repositorycloud-archive:grizzly #也可选择 H 版等

swift@ubuntu:~$ sudo apt-get update

swift@ubuntu:~$ sudo apt-get install swiftpython-swiftclient openssh-server

2.3        在每个节点上创建 Swift 工作目录
swift@ubuntu:~$ sudo mkdir -p /etc/swift

swift@ubuntu:~$ sudo chown -R swift:swift/etc/swift/

2.4        创建 Swift 配置文件
在任一节点上创建 Swift 配置文件:

swift@ubuntu:~$ cat>/etc/swift/swift.conf <<EOF

[swift-hash]

# random unique strings that can neverchange (DO NOT LOSE)

swift_hash_path_prefix = `od -t x8 -N 8 -An </dev/random`

swift_hash_path_suffix = `od -t x8 -N 8 -An </dev/random`

EOF

然后,依次拷贝该 Swift 配置文件到其它所有节点上:

swift@ubuntu:~$ scp /etc/swift/swift.conf 172.17.10.10:/etc/swift/

2.5        在每个节点上设置 IP 的环境变量
在所有的 Storage Node 上根据自身真实 IP 设置如下:

swift@ubuntu:~$ exportSTORAGE_LOCAL_NET_IP=172.17.10.10

在所有的 Proxy Node 上根据自身真实 IP 设置如下:

swift@ubuntu:~$ export PROXY_LOCAL_NET_IP=172.17.10.14

考虑到 export 命令只对当前用户的当前会话生效,也可以考虑将环境变量写到 /etc/profile 中:

swift@ubuntu:~$ sudo vim /etc/profile

swift@ubuntu:~$ source /etc/profile #当前会话立即生效

2.6        创建 Swift 服务目录并修改开机配置文件
swift@ubuntu:~$ sudo mkdir -p/var/run/swift

swift@ubuntu:~$ sudo chown swift:swift/var/run/swift

swift@ubuntu:~$ sudo vim /etc/rc.local

sudo mkdir -p /var/run/swift

sudo chown swift:swift /var/run/swift

exit 0

3      配置 Proxy Node
3.1        安装 swift-proxy 库
swift@ubuntu:~$ sudo apt-get installswift-proxy memcached

3.2        创建 SSL 自签名证书
swift@ubuntu:~$ cd /etc/swift

swift@ubuntu:/etc/swift$ openssl req -new-x509 -nodes -out cert.crt -keyout cert.key

注意,证书的 CommonName 必须设置成 Proxy Node 的 IP 地址:172.17.10.14。

3.3        配置 memcached 并重启服务
swift@ubuntu:~$ sudo perl -pi -e “s/-l127.0.0.1/-l $PROXY_LOCAL_NET_IP/” /etc/memcached.conf

swift@ubuntu: ~$ sudo service memcachedrestart

最好检查一下 memcached 服务是否已经正常启动。

3.4        创建 Proxy 服务器配置文件
swift@ubuntu:~$ cat >/etc/swift/proxy-server.conf <<EOF

[DEFAULT]

cert_file= /etc/swift/cert.crt

key_file= /etc/swift/cert.key

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 https://$PROXY_LOCAL_NET_IP:8080/v1/AUTH_system

 

[filter:healthcheck]

use =egg:swift#healthcheck

 

[filter:cache]

use =egg:swift#memcache

memcache_servers= $PROXY_LOCAL_NET_IP:11211

EOF

3.5        创建 account、container 和 object rings
swift@ubuntu:~$ cd /etc/swift

sudo swift-ring-builder account.builder create 18 3 1

sudo swift-ring-builder container.builder create 18 3 1

sudo swift-ring-builder object.builder create 18 3 1

其中,18 代表 partition 的数目为 2 的 18 次幂,这个数字取决于你希望一个 ring 中会有多少个 partition。3 代表每个 object 的副本数。最后一个参数 1,代表一个 partition 至少在 1 小时之后才能被移动。

3.6        让 ring 记录每个 Storage Node 的存储设备
export ZONE=1

export STORAGE_LOCAL_NET_IP=172.17.10.10

export WEIGHT=100

export DEVICE=sdb1

sudo swift-ring-builder account.builder addz$ZONE-$STORAGE_LOCAL_NET_IP:6002/$DEVICE $WEIGHT

sudo swift-ring-builder container.builderadd z$ZONE-$STORAGE_LOCAL_NET_IP:6001/$DEVICE $WEIGHT

sudo swift-ring-builder object.builder addz$ZONE-$STORAGE_LOCAL_NET_IP:6000/$DEVICE $WEIGHT

export ZONE=1

export STORAGE_LOCAL_NET_IP=172.17.10.10

export WEIGHT=100

export DEVICE=sdc1

sudo swift-ring-builder account.builder addz$ZONE-$STORAGE_LOCAL_NET_IP:6020/$DEVICE $WEIGHT

sudo swift-ring-builder container.builderadd z$ZONE-$STORAGE_LOCAL_NET_IP:6010/$DEVICE $WEIGHT

sudo swift-ring-builder object.builder add z$ZONE-$STORAGE_LOCAL_NET_IP:6030/$DEVICE$WEIGHT

export ZONE=2

export STORAGE_LOCAL_NET_IP=172.17.10.11

export WEIGHT=100

export DEVICE=sdb1

sudo swift-ring-builder account.builder addz$ZONE-$STORAGE_LOCAL_NET_IP:6002/$DEVICE $WEIGHT

sudo swift-ring-builder container.builderadd z$ZONE-$STORAGE_LOCAL_NET_IP:6001/$DEVICE $WEIGHT

sudo swift-ring-builder object.builder addz$ZONE-$STORAGE_LOCAL_NET_IP:6000/$DEVICE $WEIGHT

export ZONE=3

export STORAGE_LOCAL_NET_IP=172.17.10.13

export WEIGHT=100

export DEVICE=sdb1

sudo swift-ring-builder account.builder addz$ZONE-$STORAGE_LOCAL_NET_IP:6002/$DEVICE $WEIGHT

sudo swift-ring-builder container.builderadd z$ZONE-$STORAGE_LOCAL_NET_IP:6001/$DEVICE $WEIGHT

sudo swift-ring-builder object.builder addz$ZONE-$STORAGE_LOCAL_NET_IP:6000/$DEVICE $WEIGHT

注意,这里需要根据 Storage Node 的存储设备实际情况来设定:

① DEVICE 需要根据 Storage Node 上的 /etc/rsyncd.conf 中的 path 来设置,例如 path 为 /srv/node/,查看 /srv/node/ 下存在目录 sdb1 上的话,则 DEVICE 值为 sdb1;

② ZONE 从 1 开始计数,逐次加 1;当一个 Storage Node 存在多个 DEVICE 时,可以设为同一个 ZONE(推荐),也可以设为多个 ZONE;

③ 如果每个挂载分区的大小都一样,WEIGHT(权重)不妨均设置成 100。

3.7        确认 ring 的内容是否正确并平衡(Rebalance)ring
swift-ring-builder account.builder

swift-ring-builder container.builder

swift-ring-builder object.builder

sudo swift-ring-builder account.builderrebalance

sudo swift-ring-builder container.builderrebalance

sudo swift-ring-builder object.builderrebalance

3.8        拷贝 ring 到其它所有节点
swift@ubuntu:~$ scp /etc/swift/*.ring.gz 172.17.10.10:/etc/swift/

这里需要把 account.ring.gz、container.ring.gz 和 object.ring.gz 拷贝到其它所有 Proxynode 和 Storage node 的 /etc/swift 目录下。

并需要确保所有节点的配置文件都属于 swift 用户:

swift@ubuntu:~$ sudo chown -R swift:swift/etc/swift

3.9        开启 Proxy 服务
swift@ubuntu:~$ sudo swift-init proxy start

Ubuntu Server 11.10 下使用 Swauth 认证多节点安装 Swift    http://www.linuxidc.com/Linux/2012-04/58100.htm

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-20发表,共计18655字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中