在Swift上配置Alluxio

该指南介绍如何配置Alluxio从而使其底层存储系统支持Swift API

初始安装步骤

首先,本地要有Alluxio二进制包。你可以自己编译Alluxio,或者下载二进制包

配置Alluxio

要使用底层存储系统,你需要编辑conf/alluxio-site.properties来配置Alluxio。如果该文件不存在,那就从模板创建一个配置文件。

$ cp conf/alluxio-site.properties.template conf/alluxio-site.properties

如果你需要将Swift用作Alluxio的底层存储系统,你需要修改conf/alluxio-site.properties,在其中添加:

alluxio.underfs.address=swift://<swift-container>

其中<swift-container>是一个已有的Swift容器。

以下的配置项也应包含在conf/alluxio-site.properties文件中:

fs.swift.user=<swift-user>
fs.swift.tenant=<swift-tenant>
fs.swift.password=<swift-user-password>
fs.swift.auth.url=<swift-auth-url>
fs.swift.use.public.url=<swift-use-public>
fs.swift.auth.method=<swift-auth-model>

<swift-use-public>的值为truefalse<swift-auth-model>的值为keystonev3,keystonetempauthswiftauth。 当采用任意一个keystone认证时,下面的参数可以有选择地设置:

fs.swift.region=<swift-preferred-region>

另外,这些配置设置能够在conf/alluxio-env.sh文件中设置。更多设置配置参数的细节可以在 Configuration Settings中找到。

认证成功以后,Keystone会返回两个访问URL: 公开的 和 私有的。如果Alluxio用在公司内部网,并且Swift位于同样的网络中,那么建议设置<swift-use-public>的值为false

Swift对象存储选项

使用Swift模块使得Alluxio能使用Ceph Object Storage以及IBM SoftLayer对象存储作为底层存储。若要使用Ceph,必须部署Rados Gateway模块。

在本地Swift上运行Alluxio

所有配置完成后,你可以在本地启动Alluxio,观察一切是否正常运行:

$ ./bin/alluxio format
$ ./bin/alluxio-start.sh local

该命令应当会启动一个Alluxio master和一个Alluxio worker,可以在浏览器中访问http://localhost:19999查看master Web UI。

接着,你可以运行一个简单的示例程序:

$ ./bin/alluxio runTests

运行成功后,访问你的Swift容器,其中应该包含了由Alluxio创建的文件和目录。在这个测试中,你应该会看到创建的文件名像下面这样:

swift://<SWIFT CONTAINER>/alluxio/data/default_tests_files/Basic_CACHE_THROUGH

运行以下命令停止Alluxio:

$ ./bin/alluxio-stop.sh local

运行功能测试

tests/pom.xml配置swiftTest下的Swift账户凭据,其中authMethodKey的值应为keystonetempauthswiftauth,要进行功能测试,运行:

$ mvn test -PswiftTest -pl tests

若测试失败,日志记录在tests/target/logs下。可以通过以下命令抓取堆状态备份:

  <argLine>-XX:+HeapDumpOnOutOfMemoryError
    -XX:HeapDumpPath=/location/dump</argLine>

Swift访问控制

如果Alluxio的安全模式被启用,那么Alluxio会强制让访问控制继承自底层的对象存储。

在Alluxio中指定的Swift凭证(fs.swift.user, fs.swift.tenant and fs.swift.password) 代表了一个Swift用户。Swift服务的后端会检查访问容器的用户许可。 如果给定的Swift用户没有访问特定容器的正确的访问许可,将会抛出一个许可被拒绝的错误。 一旦Alluxio安全模式被启用,当元数据第一次加载到Alluxio命名空间时,Alluxio将会加载容器ACL到Alluxio许可中。

挂载点分享

如果你想分享一个Swift挂载点给其他在Alluxio命名空间里的用户,你可以启用alluxio.underfs.object.store.mount.shared.publicly

改变许可

除此之外,对Alluxio目录和文件的chown/chgrp/chmod操作既不会传播到底层Swift容器,也不会传播到Swift对象。

Need help? Ask a Question