将存储策略添加到现有的 SAIO

根据您下载 SAIO 环境的时间,它可能已经准备好了两个存储策略,以启用一些基本的测试功能。但是,如果您正在向现有安装添加存储策略,则以下部分将引导您完成设置存储策略的步骤。 建议在您的开发环境中配置多个存储策略,但这并非强制要求。 无论您是使用现有安装还是从全新的安装开始,启用多个存储策略都非常容易。

现在我们将创建两个策略 - 第一个将是一个标准的三重复制策略,我们还将显式地将其设置为默认策略,第二个将设置为使用 2 倍的因子进行减少复制。 我们将第一个策略命名为“gold”(黄金),第二个策略命名为“silver”(白银)。 在此示例中,两个策略都映射到相同的设备,因为对于这个示例实现来说,简单易懂也很重要,并且添加一堆新设备实际上并不需要实现一组可用的策略。

  1. 要定义您的策略,请将以下内容添加到您的 /etc/swift/swift.conf 文件中

    [storage-policy:0]
    name = gold
    aliases = yellow, orange
    default = yes
    
    [storage-policy:1]
    name = silver
    

    有关 swift.conf 策略选项的详细信息,请参阅 存储策略

  2. 要为 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 中指定的。

  3. 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 中的数据放置。

  1. 我们将使用 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
    
  2. 检查是否通过 /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'}]
    
  3. 现在创建一个不指定策略的容器,它将使用默认策略“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
    
  4. 现在使用 列出端点 中间件确认对象位置

    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"]
    
  5. 使用策略“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/
    
  6. 确认策略“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"]
    
  7. 使用 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