注意
本文档适用于 Ceph 开发版本。
故障排除
网关无法启动
如果无法启动网关(即,没有现有的pid
).asok
用户生成的.asok
用户生成的pid
,请删除该.asok
文件并尝试重新启动root
用户身份启动进程时,启动脚本尝试以www-data
或apache
用户身份启动进程,而现有的.asok
正在阻止脚本启动守护进程。
radosgw初始化脚本(/etc/init.d/radosgw)还具有一个详细参数,可以提供一些关于问题可能是什么的见解:
/etc/init.d/radosgw start -v
或
/etc/init.d radosgw start --verbose
HTTP请求错误
检查Web服务本身的访问和错误日志可能是识别问题的第一步。如果存在500错误,这通常表示与守护进程通信存在问题。确保守护进程正在运行,其套接字路径已配置,并且Web服务正在正确的位置查找它。radosgw
daemon. Ensure the daemon is running, its socket path is
configured, and that the web server is looking for it in the proper
location.
异常崩溃radosgw
process
如果未设置radosgw
如果进程死亡,您通常会看到Web服务器(apache、nginx等)返回500错误。在这种情况下,只需重新启动radosgw即可恢复服务。
要诊断崩溃的原因,请检查/var/log/ceph
日志和/或核心文件(如果有生成)。
阻塞radosgw
请求
如果某些(或所有)radosgw请求似乎被阻塞,您可以通过其管理套接字了解守护进程的内部状态。默认情况下,将配置一个套接字驻留在radosgw
daemon via
its admin socket. By default, there will be a socket configured to
reside in /var/run/ceph
,可以使用以下方式查询守护进程:
ceph daemon /var/run/ceph/client.rgw help
help list available commands
objecter_requests show in-progress osd requests
perfcounters_dump dump perfcounters value
perfcounters_schema dump perfcounters schema
version get protocol version
特别值得注意的是:
ceph daemon /var/run/ceph/client.rgw objecter_requests
...
将会提供有关当前正在进行的与RADOS集群的请求的信息。这允许您识别是否有任何请求被无响应的OSD阻塞。例如,您可能会看到:
{ "ops": [
{ "tid": 1858,
"pg": "2.d2041a48",
"osd": 1,
"last_sent": "2012-03-08 14:56:37.949872",
"attempts": 1,
"object_id": "fatty_25647_object1857",
"object_locator": "@2",
"snapid": "head",
"snap_context": "0=[]",
"mtime": "2012-03-08 14:56:37.949813",
"osd_ops": [
"write 0~4096"]},
{ "tid": 1873,
"pg": "2.695e9f8e",
"osd": 1,
"last_sent": "2012-03-08 14:56:37.970615",
"attempts": 1,
"object_id": "fatty_25647_object1872",
"object_locator": "@2",
"snapid": "head",
"snap_context": "0=[]",
"mtime": "2012-03-08 14:56:37.970555",
"osd_ops": [
"write 0~4096"]}],
"linger_ops": [],
"pool_ops": [],
"pool_stat_ops": [],
"statfs_ops": []}
在此转储中,有两个请求正在进行。 4c513d: 字段是RADOS请求发送的时间。如果这是很久以前,这表明OSD没有响应。例如,对于请求1858,您可以检查OSD状态:last_sent
field is
the time the RADOS request was sent. If this is a while ago, it suggests
that the OSD is not responding. For example, for request 1858, you could
check the OSD status with:
ceph pg map 2.d2041a48
osdmap e9 pg 2.d2041a48 (2.0) -> up [1,0] acting [1,0]
这告诉我们要查看osd.1
,这是该PG的主副本:
ceph daemon osd.1 ops
{ "num_ops": 651,
"ops": [
{ "description": "osd_op(client.4124.0:1858 fatty_25647_object1857 [write 0~4096] 2.d2041a48)",
"received_at": "1331247573.344650",
"age": "25.606449",
"flag_point": "waiting for sub ops",
"client_info": { "client": "client.4124",
"tid": 1858}},
...
The flag_point
字段表示OSD当前正在等待副本响应,在这种情况下osd.0
.
Java S3 API故障排除
对等方未通过身份验证
您可能会收到一个类似以下错误:
[java] INFO: Unable to execute HTTP request: peer not authenticated
S3 Java SDK需要一个来自受信任的证书机构的有效证书,因为它默认使用HTTPS。如果您只是在测试Ceph对象存储服务,您可以解决此问题:
在IP地址或主机名前添加
http://
。例如,将此更改为:conn.setEndpoint("myserver");
更改为:
conn.setEndpoint("http://myserver")
设置凭据后,添加客户端配置并将协议设置为
Protocol.HTTP
.AWSCredentials credentials = new BasicAWSCredentials(accessKey, secretKey); ClientConfiguration clientConfig = new ClientConfiguration(); clientConfig.setProtocol(Protocol.HTTP); AmazonS3 conn = new AmazonS3Client(credentials, clientConfig);
405方法不允许
如果您收到405错误,请检查您是否已正确设置S3子域。您需要在DNS记录中有一个通配符设置,以便子域功能正常工作。
此外,请确保默认站点已禁用。
[java] Exception in thread "main" Status Code: 405, AWS Service: Amazon S3, AWS Request ID: null, AWS Error Code: MethodNotAllowed, AWS Error Message: null, S3 Extended Request ID: null
默认.rgw.meta池中存在大量对象
在jewel之前创建的集群默认启用元数据归档功能,使用default.rgw.meta
池。此归档保留所有用户和存储桶元数据的老版本,导致default.rgw.meta
池访问权限的用户。
禁用元数据堆
希望禁用此功能的用户应将metadata_heap
字段设置为空字符串""
:
$ radosgw-admin zone get --rgw-zone=default > zone.json
[edit zone.json, setting "metadata_heap": ""]
$ radosgw-admin zone set --rgw-zone=default --infile=zone.json
$ radosgw-admin period update --commit
这将停止新的元数据写入default.rgw.meta
池,但不会删除任何现有对象或池。
清理元数据堆池
在jewel之前创建的集群通常只使用default.rgw.meta
仅用于元数据归档功能。
然而,从luminous开始,radosgw在池命名空间用于完全不同的目的,即,用于存储default.rgw.meta
内部使用user_keys
和其他关键元数据。
在进行任何清理程序之前,用户应检查区域配置:
$ radosgw-admin zone get --rgw-zone=default | grep default.rgw.meta
[should not match any strings]
确认池未用于任何目的后,用户可以安全地删除池中的所有对象,或者可选地删除整个池本身。default.rgw.meta
pool, or optionally, delete the entire pool itself.
由 Ceph 基金会带给您
Ceph 文档是一个社区资源,由非盈利的 Ceph 基金会资助和托管Ceph Foundation. 如果您想支持这一点和我们的其他工作,请考虑加入现在加入.