1

我已经在每个节点上设置了两个带有 rados 网关的 ceph 集群。我想要实现的是将所有对象从集群“1”中具有端点的存储桶“A”转移到可以从集群“2”上的另一个端点访问的存储桶“B”。这对我的问题并不重要,但至少你了解上下文。

我使用 boto3 模块在 python 中创建了一个脚本。脚本真的很简单。我只是想把一个对象放在一个桶里。

相关部分如下:

 s3 = boto3.resource('s3',
                      endpoint_url=credentials['endpoint_url'],
                      aws_access_key_id=credentials['access_key'],
                      aws_secret_access_key=credentials['secret_key'],
                      use_ssl=False)

    s3.Object('my-bucket', 'hello.txt').put(Body=open('/tmp/hello.txt', 'rb'))

(hello.txt 只包含一个单词)

假设这个脚本是从我的集群 1 中的一个节点(即 radosgw 端点节点)编写并运行的。当“endpoint_url”是我运行脚本的节点时它运行良好,但当我运行时它不起作用我试图到达我的另一个端点(radosgw,位于我的集群“2”中的另一个节点中)。

我收到了这个错误:

botocore.exceptions.ReadTimeoutError: Read timeout on endpoint URL

奇怪的是我可以创建一个没有任何错误的存储桶:

s3_src.create_bucket(Bucket=bucket_name)
s3_dest.create_bucket(Bucket=bucket_name)

我什至可以列出我的两个端点的存储桶。

你知道为什么我可以做几乎所有事情,但不能在我的第二个端点中放置一个对象吗?

我希望它有任何意义。

4

1 回答 1

0

最终,我发现这个问题与 boto 无关,而是与我的 ceph 池有关,它计算了我的数据。

桶池是健康的,这就是为什么我可以创建我的桶而数据池不健康,因此当我尝试将对象放入桶中时出现问题。

于 2019-04-26T09:56:57.177 回答