实验 Ceph REST API
正如我在上一篇帖子中提到的那样,Ceph 现在有一个REST API。 这打开了很多可能性。
Ceph REST API 是一个 WSGI 应用程序,默认情况下监听 5000 端口。
这意味着您可以直接查询它,但您可能希望在它前面放置一个 Web 服务器/代理,例如 Apache 或 nginx。
为了高可用性,您可以在多台服务器上运行 ceph-rest-api,并让冗余负载均衡器指向 API 端点。
ceph-rest-api 目前处理身份验证不太好。 您使用 cephx 身份验证密钥启动它,仅此而已。 您需要在应用程序级别处理权限/身份验证。
为了简单和测试起见,我将在没有代理的沙箱中进行测试,并将 ceph-rest-api 直接在客户端上使用 client.admin cephx 密钥运行。
启动 ceph-rest-api
ceph-rest-api 是 ceph-common 包的一部分,所以我已经在我的监视器上有了它。
usage: ceph-rest-api [-h] [-c CONF] [--cluster CLUSTER] [-n NAME] [-i ID]
Ceph REST API webapp
可选参数: -h, --help 显示此帮助信息并退出 -c CONF, --conf CONF Ceph 配置文件 --cluster CLUSTER Ceph 集群名称 -n NAME, --name NAME Ceph 客户端名称 -i ID, --id ID Ceph 客户端 ID
使用我的配置文件 /etc/ceph/ceph.conf 和我的 cephx 密钥位于 /etc/ceph/keyring
`
root@mon01:~# ceph-rest-api -n client.admin
- 正在运行于 http://0.0.0.0:5000/
`
使用 API
好吧,这很简单。 让我们戳戳它看看会发生什么
root@mon02:~# curl mon01.ceph.example.org:5000
正在重定向...
您应该自动重定向到目标 URL:/api/v0.1。 如果没有,请单击链接。
好吧,这有效了,我们能获取集群的状态吗?
root@mon02:~# curl mon01.ceph.example.org:5000/api/v0.1/health
HEALTH_OK
让我们以 JSON 的形式进行相同的调用,看看我们获得的所有数据!
root@mon02:~# curl -i -H "Accept: application/json" mon01.ceph.example.org:5000/api/v0.1/health
HTTP/1.0 200 OK Content-Type: application/json Content-Length: 1379 Server: Werkzeug/0.8.1 Python/2.7.3 Date: Fri, 27 Dec 2013 04:10:29 GMT { "status": "OK", "output": { "detail": [
], "timechecks": { "round_status": "finished", "epoch": 8, "round": 3418, "mons": [ { "latency": "0.000000", "skew": "0.000000", "health": "HEALTH_OK", "name": "03" }, { "latency": "0.001830", "skew": "-0.001245", "health": "HEALTH_OK", "name": "01" }, { "latency": "0.001454", "skew": "-0.001546", "health": "HEALTH_OK", "name": "02" } ] }, "health": { "health_services": [ { "mons": [ { "last_updated": "2013-12-27 04:10:28.096444", "name": "03", "avail_percent": 87, "kb_total": 20641404, "kb_avail": 18132220, "health": "HEALTH_OK", "kb_used": 1460900, "store_stats": { "bytes_total": 14919567, "bytes_log": 983040, "last_updated": "0.000000", "bytes_misc": 65609, "bytes_sst": 13870918 } }, { "last_updated": "2013-12-27 04:10:25.155508", "name": "01", "avail_percent": 87, "kb_total": 20641404, "kb_avail": 18030408, "health": "HEALTH_OK", "kb_used": 1562712, "store_stats": { "bytes_total": 15968034, "bytes_log": 2031616, "last_updated": "0.000000", "bytes_misc": 65609, "bytes_sst": 13870809 } }, { "last_updated": "2013-12-27 04:10:24.362689", "name": "02", "avail_percent": 87, "kb_total": 20641404, "kb_avail": 18143028, "health": "HEALTH_OK", "kb_used": 1450092, "store_stats": { "bytes_total": 15968294, "bytes_log": 2031616, "last_updated": "0.000000", "bytes_misc": 65609, "bytes_sst": 13871069 } } ] } ] }, "overall_status": "HEALTH_OK", "summary": [
] } }
总结
ceph-rest-api 功能强大。
您可以使用它来使用 nagios 之类的工具监控您的集群,甚至创建一个完整的界面来管理您的集群,就像 Inktank 在其企业产品中提供的 Calamari GUI 一样。
API 目前缺乏适当的文档。 您必须根据 当前文档 提供的内容来猜测 API 调用。
编辑:我收回这句话。 实际上,文档内置于应用程序中。 在未来的帖子中会详细介绍。
个人而言? 我将尝试围绕 API 调用制作一个包装库,并肯定改进文档,不仅为了我自己,而且为了其他 ceph 用户。