【问题标题】:How to store Object in Ceph Object Store如何在 Ceph 对象存储中存储对象
【发布时间】:2018-07-02 12:42:18
【问题描述】:

我已经在 3 个节点上部署了一个 Ceph 集群,并创建了 msdrgw。我有 3 台机器,分别命名为 ceph1、ceph2 和 ceph3。

  • ceph1 运行 osd、mon、mds 和 rwg
  • ceph2 运行 osd
  • ceph3 运行 osd

我用radosgw-admin user create 命令创建了一个用户。

现在我想使用 swift api 访问 ceph 集群并创建一个容器。为此,我编写了以下 java 代码:

import org.javaswift.joss.client.factory.AccountConfig;
import org.javaswift.joss.client.factory.AccountFactory;
import org.javaswift.joss.client.factory.AuthenticationMethod;
import org.javaswift.joss.model.Account;
import org.javaswift.joss.model.Container;
import org.javaswift.joss.model.StoredObject;
import java.io.File;
import java.io.IOException;
import java.util.*;

public class Example {

public static void main(String[] args) {

    String username = "sahoo";
    String password = "IM8K5GAQIXHFRAKYS761";
    String authUrl  = "http://ceph1:7480/";

    AccountConfig config = new AccountConfig();
    config.setUsername(username);
    config.setPassword(password);
    config.setAuthUrl(authUrl);
    config.setAuthenticationMethod(AuthenticationMethod.BASIC);

    Account account = new AccountFactory(config).createAccount();
    Container container = account.getContainer("container-name");
    container.create();
}
}

但是在运行代码时出现以下异常:

Exception in thread "main" java.lang.NullPointerException
at org.javaswift.joss.command.impl.identity.BasicAuthenticationCommandImpl.getReturnObject(BasicAuthenticationCommandImpl.java:35)
at org.javaswift.joss.command.impl.identity.BasicAuthenticationCommandImpl.getReturnObject(BasicAuthenticationCommandImpl.java:18)
at org.javaswift.joss.command.impl.core.AbstractCommand.call(AbstractCommand.java:51)
at org.javaswift.joss.client.impl.ClientImpl.createAccount(ClientImpl.java:97)
at org.javaswift.joss.client.impl.ClientImpl.createAccount(ClientImpl.java:27)
at org.javaswift.joss.client.core.AbstractClient.authenticate(AbstractClient.java:35)
at org.javaswift.joss.client.factory.AccountFactory.createAccount(AccountFactory.java:30)
at Example.main(Example.java:24)

谁能帮我解释为什么我会收到异常以及我们需要传递给config.setAuthUrl()的确切内容。

【问题讨论】:

    标签: java ceph


    【解决方案1】:

    首先,您需要创建子用户才能使用 swift API。

    sudo radosgw-admin subuser create radosgw-admin subuser create --uid={uid} --subuser={uid} --access=[ read | write | readwrite | full ]

    参考号:http://docs.ceph.com/docs/giant/radosgw/admin/

    要为用户创建子用户(Swift 界面),您必须指定用户 ID (--uid={username})、子用户 ID 和子用户的访问级别。

    然后,我们需要将 Ceph RGW 的 URL 传递给config.setAuthUrl()。最好用swift命令快速测试一下。

    例如,如果您可以通过此命令确认创建容器:

    # swift -V 1.0 -A http://ceph.example.com/auth/v1 -U foo:swift -K testsecret post test-container

    然后,您可以指定以下变量:

    • config.setUsername() ...foo:swift
    • config.setPassword() ...testsecret
    • config.setAuthUrl() ...http://ceph.example.com/auth/v1

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多