将存储策略添加到现有的 SAIO¶
根据您下载 SAIO 环境的时间,它可能已经准备好了两个存储策略,以启用一些基本的测试功能。但是,如果您正在向现有安装添加存储策略,则以下部分将引导您完成设置存储策略的步骤。 建议在您的开发环境中配置多个存储策略,但这并非强制要求。 无论您是使用现有安装还是从全新的安装开始,启用多个存储策略都非常容易。
现在我们将创建两个策略 - 第一个将是一个标准的三重复制策略,我们还将显式地将其设置为默认策略,第二个将设置为使用 2 倍的因子进行减少复制。 我们将第一个策略命名为“gold”(黄金),第二个策略命名为“silver”(白银)。 在此示例中,两个策略都映射到相同的设备,因为对于这个示例实现来说,简单易懂也很重要,并且添加一堆新设备实际上并不需要实现一组可用的策略。
要定义您的策略,请将以下内容添加到您的
/etc/swift/swift.conf文件中[storage-policy:0] name = gold aliases = yellow, orange default = yes [storage-policy:1] name = silver
有关
swift.conf策略选项的详细信息,请参阅 存储策略。要为 silver 策略(索引 1)创建对象环,请将以下内容添加到您的
bin/remakerings脚本中并重新运行它(您的脚本可能已经包含这些更改)swift-ring-builder object-1.builder create 10 2 1 swift-ring-builder object-1.builder add r1z1-127.0.0.1:6210/sdb1 1 swift-ring-builder object-1.builder add r1z2-127.0.0.1:6220/sdb2 1 swift-ring-builder object-1.builder add r1z3-127.0.0.1:6230/sdb3 1 swift-ring-builder object-1.builder add r1z4-127.0.0.1:6240/sdb4 1 swift-ring-builder object-1.builder rebalance
请注意,silver 策略的减少复制仅是
swift-ring-builder create命令中复制参数的函数,而不是在/etc/swift/swift.conf中指定的。将
etc/container-reconciler.conf-sample复制到/etc/swift/container-reconciler.conf并修复 user 选项cp etc/container-reconciler.conf-sample /etc/swift/container-reconciler.conf sed -i "s/# user.*/user = $USER/g" /etc/swift/container-reconciler.conf
使用策略¶
设置存储策略非常简单,使用它们甚至更简单。 在本节中,我们将运行一些命令来创建具有不同策略的几个容器并将对象存储在其中,并查看存储策略如何影响 Swift 中的数据放置。
我们将使用 list_endpoints 中间件来确认对象位置,因此现在在您的
proxy-server.conf文件中将其添加到管道并包含过滤器部分(确保在进行这些更改后重新启动您的代理)pipeline = catch_errors gatekeeper healthcheck proxy-logging cache bulk \ slo dlo ratelimit crossdomain list-endpoints tempurl tempauth staticweb \ container-quotas account-quotas proxy-logging proxy-server [filter:list-endpoints] use = egg:swift#list_endpoints
检查是否通过 /info 报告了您的策略
swift -A http://127.0.0.1:8080/auth/v1.0 -U test:tester -K testing info
您应该看到以下内容:(此处仅显示策略输出)
policies: [{'aliases': 'gold, yellow, orange', 'default': True, 'name': 'gold'}, {'aliases': 'silver', 'name': 'silver'}]现在创建一个不指定策略的容器,它将使用默认策略“gold”,然后将一个测试对象放入其中(使用您喜欢的编辑器创建文件
file0.txt并添加一些内容)curl -v -X PUT -H 'X-Auth-Token: <your auth token>' \ http://127.0.0.1:8080/v1/AUTH_test/myCont0 curl -X PUT -v -T file0.txt -H 'X-Auth-Token: <your auth token>' \ http://127.0.0.1:8080/v1/AUTH_test/myCont0/file0.txt
现在使用 列出端点 中间件确认对象位置
curl -X GET -v http://127.0.0.1:8080/endpoints/AUTH_test/myCont0/file0.txt
您应该看到以下内容:(请注意预期设备上的放置)
["http://127.0.0.1:6230/sdb3/761/AUTH_test/myCont0/file0.txt", "http://127.0.0.1:6210/sdb1/761/AUTH_test/myCont0/file0.txt", "http://127.0.0.1:6220/sdb2/761/AUTH_test/myCont0/file0.txt"]
使用策略“silver”创建一个容器并将另一个文件放入其中
curl -v -X PUT -H 'X-Auth-Token: <your auth token>' -H \ "X-Storage-Policy: silver" \ http://127.0.0.1:8080/v1/AUTH_test/myCont1 curl -X PUT -v -T file1.txt -H 'X-Auth-Token: <your auth token>' \ http://127.0.0.1:8080/v1/AUTH_test/myCont1/
确认策略“silver”的对象放置
curl -X GET -v http://127.0.0.1:8080/endpoints/AUTH_test/myCont1/file1.txt
您应该看到以下内容:(请注意预期设备上的放置)
["http://127.0.0.1:6210/sdb1/32/AUTH_test/myCont1/file1.txt", "http://127.0.0.1:6240/sdb4/32/AUTH_test/myCont1/file1.txt"]
使用 HEAD 检查帐户信息,确保您的容器更新服务已运行并执行了一次,因为您执行了 PUT 操作,否则帐户数据库尚未更新
curl -i -X HEAD -H 'X-Auth-Token: <your auth token>' \ http://127.0.0.1:8080/v1/AUTH_test
您应该看到类似的内容(请注意,总计和每个策略的统计对象大小会有所不同)
HTTP/1.1 204 No Content Content-Length: 0 X-Account-Object-Count: 2 X-Account-Bytes-Used: 174 X-Account-Container-Count: 2 X-Account-Storage-Policy-Gold-Object-Count: 1 X-Account-Storage-Policy-Gold-Bytes-Used: 84 X-Account-Storage-Policy-Silver-Object-Count: 1 X-Account-Storage-Policy-Silver-Bytes-Used: 90 X-Timestamp: 1397230339.71525 Content-Type: text/plain; charset=utf-8 Accept-Ranges: bytes X-Trans-Id: tx96e7496b19bb44abb55a3-0053482c75 X-Openstack-Request-Id: tx96e7496b19bb44abb55a3-0053482c75 Date: Fri, 11 Apr 2014 17:55:01 GMT