我已经为节点中的每一个设置了两个带有rados网关的ceph集群。我想要实现的是将所有对象从桶“A”中转移到一个桶“B”,该桶可以从我的集群“2”上的另一个端点到达桶“A”。这对我的问题并不重要,但至少你了解上下文。
我使用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)
我甚至可以列出我的两个端点的桶。
您是否知道为什么我可以做几乎所有事情但不在我的第二个端点中放置一个对象?
我希望它有任何意义。
最终,我发现这个问题与boto无关,但是我的ceph池会计算我的数据。
存储桶是健康的,这就是为什么我可以创建我的桶,而数据池是不健康的,因此当我尝试将对象放入存储桶时出现问题。