1.2.1. /
¶
- GET /¶
访问 CouchDB 实例的根目录将返回有关该实例的元信息。响应是一个 JSON 结构,其中包含有关服务器的信息,包括欢迎消息和服务器的版本。
- 请求头:
Accept –
application/json
text/plain
- 响应头:
application/json
text/plain; charset=utf-8
- 状态码:
200 OK – 请求已成功完成
请求:
GET / HTTP/1.1 Accept: application/json Host: localhost:5984
响应:
HTTP/1.1 200 OK Cache-Control: must-revalidate Content-Length: 179 Content-Type: application/json Date: Sat, 10 Aug 2013 06:33:33 GMT Server: CouchDB (Erlang/OTP) { "couchdb": "Welcome", "uuid": "85fb71bf700c17267fef77535820e371", "vendor": { "name": "The Apache Software Foundation", "version": "1.3.1" }, "version": "1.3.1" }
1.2.2. /_active_tasks
¶
在版本 2.1.0 中变更: 由于调度复制器的工作方式,持续复制作业可能会定期停止,然后在稍后启动。当它们未运行时,它们不会出现在 _active_tasks
端点中
在版本 3.3 中变更: 为复制作业添加了 “bulk_get_attempts” 和 “bulk_get_docs” 字段。
- GET /_active_tasks¶
正在运行的任务列表,包括任务类型、名称、状态和进程 ID。结果是当前正在运行的任务的 JSON 数组,每个任务都用单个对象描述。根据操作类型,响应对象字段集可能不同。
- 请求头:
Accept –
application/json
text/plain
- 响应头:
application/json
text/plain; charset=utf-8
- 响应 JSON 对象:
changes_done (数字) – 已处理的更改
database (字符串) – 源数据库
pid (字符串) – 进程 ID
progress (数字) – 当前进度百分比
started_on (数字) – 任务开始时间,以 Unix 时间戳表示
status (字符串) – 任务状态消息
task (字符串) – 任务名称
total_changes (数字) – 要处理的总更改
type (字符串) – 操作类型
updated_on (数字) – 最后一次操作更新的 Unix 时间戳
- 状态码:
200 OK – 请求已成功完成
401 Unauthorized – 需要 CouchDB 服务器管理员权限
请求:
GET /_active_tasks HTTP/1.1 Accept: application/json Host: localhost:5984
响应:
HTTP/1.1 200 OK Cache-Control: must-revalidate Content-Length: 1690 Content-Type: application/json Date: Sat, 10 Aug 2013 06:37:31 GMT Server: CouchDB (Erlang/OTP) [ { "changes_done": 64438, "database": "mailbox", "pid": "<0.12986.1>", "progress": 84, "started_on": 1376116576, "total_changes": 76215, "type": "database_compaction", "updated_on": 1376116619 }, { "changes_done": 14443, "database": "mailbox", "design_document": "c9753817b3ba7c674d92361f24f59b9f", "pid": "<0.10461.3>", "progress": 18, "started_on": 1376116621, "total_changes": 76215, "type": "indexer", "updated_on": 1376116650 }, { "changes_done": 5454, "database": "mailbox", "design_document": "_design/meta", "pid": "<0.6838.4>", "progress": 7, "started_on": 1376116632, "total_changes": 76215, "type": "indexer", "updated_on": 1376116651 }, { "checkpointed_source_seq": 68585, "continuous": false, "doc_id": null, "doc_write_failures": 0, "bulk_get_attempts": 4524, "bulk_get_docs": 4524, "docs_read": 4524, "docs_written": 4524, "missing_revisions_found": 4524, "pid": "<0.1538.5>", "progress": 44, "replication_id": "9bc1727d74d49d9e157e260bb8bbd1d5", "revisions_checked": 4524, "source": "mailbox", "source_seq": 154419, "started_on": 1376116644, "target": "http://mailsrv:5984/mailbox", "type": "replication", "updated_on": 1376116651 } ]
1.2.3. /_all_dbs
¶
- GET /_all_dbs¶
返回 CouchDB 实例中的所有数据库列表。
- 请求头:
Accept –
application/json
text/plain
- 查询参数:
descending (布尔值) – 按键降序返回数据库。默认值为
false
。endkey (json) – 当达到指定键时,停止返回数据库。
end_key (json) –
endkey
参数的别名limit (数字) – 将返回的数据库数量限制为指定数量。
skip (数字) – 在开始返回结果之前,跳过此数量的数据库。默认值为
0
。startkey (json) – 从指定键开始返回数据库。
start_key (json) –
startkey
的别名。
- 响应头:
application/json
text/plain; charset=utf-8
- 状态码:
200 OK – 请求已成功完成
请求:
GET /_all_dbs HTTP/1.1 Accept: application/json Host: localhost:5984
响应:
HTTP/1.1 200 OK Cache-Control: must-revalidate Content-Length: 52 Content-Type: application/json Date: Sat, 10 Aug 2013 06:57:48 GMT Server: CouchDB (Erlang/OTP) [ "_users", "contacts", "docs", "invoices", "locations" ]
1.2.4. /_dbs_info
¶
版本 3.2 中新增。
- GET /_dbs_info¶
返回 CouchDB 实例中所有数据库的信息列表。
- 请求头:
Accept –
application/json
text/plain
- 查询参数:
descending (布尔值) – 按键降序返回数据库信息。默认值为
false
。endkey (json) – 当达到指定键时,停止返回数据库信息。
end_key (json) –
endkey
参数的别名limit (数字) – 将返回的数据库信息数量限制为指定数量。
skip (数字) – 在开始返回结果之前,跳过此数量的数据库。默认值为
0
。startkey (json) – 从指定键开始返回数据库信息。
start_key (json) –
startkey
的别名。
- 响应头:
application/json
text/plain; charset=utf-8
- 状态码:
200 OK – 请求已成功完成
请求:
GET /_dbs_info HTTP/1.1 Accept: application/json Host: localhost:5984
响应:
HTTP/1.1 200 OK Cache-Control: must-revalidate Content-Type: application/json Date: Thu, 18 Nov 2021 14:37:35 GMT Server: CouchDB (Erlang OTP/23) [ { "key": "animals", "info": { "db_name": "animals", "update_seq": "52232", "sizes": { "file": 1178613587, "external": 1713103872, "active": 1162451555 }, "purge_seq": 0, "doc_del_count": 0, "doc_count": 52224, "disk_format_version": 6, "compact_running": false, "cluster": { "q": 8, "n": 3, "w": 2, "r": 2 }, "instance_start_time": "0" } } ]
版本 2.2 中新增。
- POST /_dbs_info¶
返回 CouchDB 实例中指定数据库列表的信息。这使您能够在单个请求中请求有关多个数据库的信息,而不是多个
GET /{db}
请求。- 请求头:
Accept –
application/json
- 响应头:
application/json
- 请求 JSON 对象:
keys (数组) – 要请求的数据库名称数组
- 状态码:
200 OK – 请求已成功完成
400 Bad Request – 请求中缺少键或键超过限制
请求:
POST /_dbs_info HTTP/1.1 Accept: application/json Host: localhost:5984 Content-Type: application/json { "keys": [ "animals", "plants" ] }
响应:
HTTP/1.1 200 OK Cache-Control: must-revalidate Content-Type: application/json Date: Sat, 20 Dec 2017 06:57:48 GMT Server: CouchDB (Erlang/OTP) [ { "key": "animals", "info": { "db_name": "animals", "update_seq": "52232", "sizes": { "file": 1178613587, "external": 1713103872, "active": 1162451555 }, "purge_seq": 0, "doc_del_count": 0, "doc_count": 52224, "disk_format_version": 6, "compact_running": false, "cluster": { "q": 8, "n": 3, "w": 2, "r": 2 }, "instance_start_time": "0" } }, { "key": "plants", "info": { "db_name": "plants", "update_seq": "303", "sizes": { "file": 3872387, "external": 2339, "active": 67475 }, "purge_seq": 0, "doc_del_count": 0, "doc_count": 11, "disk_format_version": 6, "compact_running": false, "cluster": { "q": 8, "n": 3, "w": 2, "r": 2 }, "instance_start_time": "0" } } ]
注意
列表中支持的指定数据库数量可以通过修改配置文件中的 max_db_number_for_dbs_info_req 条目来限制。默认限制为 100。虽然可以增加限制,但会给服务器带来负载,因此建议使用 100 个数据库进行更多请求,而不是一次使用 1000 个数据库进行少量请求。
1.2.5. /_cluster_setup
¶
版本 2.0 中新增。
- GET /_cluster_setup¶
返回节点或集群的状态,根据集群设置向导。
- 请求头:
Accept –
application/json
text/plain
- 查询参数:
ensure_dbs_exist (数组) – 要确保在节点/集群上存在的系统数据库列表。默认值为
["_users","_replicator"]
。
- 响应头:
application/json
text/plain; charset=utf-8
- 响应 JSON 对象:
state (字符串) – 节点和/或集群的当前
state
(见下文)
- 状态码:
200 OK – 请求已成功完成
返回的
state
指示当前节点或集群状态,并且是以下之一cluster_disabled
: 当前节点完全未配置。single_node_disabled
: 当前节点配置为单节点(独立)节点 ([cluster] n=1
),但要么没有定义服务器级管理员用户,要么没有创建标准系统数据库。如果指定了ensure_dbs_exist
查询参数,则提供的数据库列表将覆盖标准系统数据库的默认列表。single_node_enabled
: 当前节点配置为单节点(独立)节点,已定义服务器级管理员用户,并且已创建ensure_dbs_exist
列表(显式或默认)中的数据库。cluster_enabled
: 当前节点具有[cluster] n
> 1,未绑定到127.0.0.1
并且已定义服务器级管理员用户。但是,尚未创建完整的标准系统数据库集。如果指定了ensure_dbs_exist
查询参数,则提供的数据库列表将覆盖标准系统数据库的默认列表。cluster_finished
: 当前节点具有[cluster] n
> 1,未绑定到127.0.0.1
,已定义服务器级管理员用户,并且已创建ensure_dbs_exist
列表(显式或默认)中的数据库。
请求:
GET /_cluster_setup HTTP/1.1 Accept: application/json Host: localhost:5984
响应:
HTTP/1.1 200 OK X-CouchDB-Body-Time: 0 X-Couch-Request-ID: 5c058bdd37 Server: CouchDB/2.1.0-7f17678 (Erlang OTP/17) Date: Sun, 30 Jul 2017 06:33:18 GMT Content-Type: application/json Content-Length: 29 Cache-Control: must-revalidate {"state":"cluster_enabled"}
- POST /_cluster_setup¶
将节点配置为单节点(独立)节点,作为集群的一部分,或完成集群。
- 请求头:
Accept –
application/json
text/plain
Content-Type – application/json
- 请求 JSON 对象:
action (string) –
enable_single_node: 将当前节点配置为单个独立的 CouchDB 服务器。
enable_cluster: 将本地或远程节点配置为一个节点,准备将其加入到新的 CouchDB 集群中。
add_node: 将指定的远程节点添加到此集群的节点列表中,将其加入到集群中。
finish_cluster: 通过创建标准系统数据库来完成集群。
bind_address (string) – 要绑定当前节点的 IP 地址。可以指定特殊值
0.0.0.0
以绑定到主机上的所有接口。(仅限 enable_cluster 和 enable_single_node)username (string) – 要创建的服务器级管理员的用户名。(仅限 enable_cluster 和 enable_single_node),或远程服务器的管理员用户名(add_node)
password (string) – 要创建的服务器级管理员的密码。(仅限 enable_cluster 和 enable_single_node),或远程服务器的管理员用户名(add_node)
port (number) – 要绑定此节点的 TCP 端口(仅限 enable_cluster 和 enable_single_node)或要绑定远程节点的 TCP 端口(仅限 add_node)。
node_count (number) – 要加入到集群中的节点总数,包括此节点。用于确定集群的
n
值,最多为 3。(仅限 enable_cluster)remote_node (string) – 要作为此集群的节点列表的一部分进行设置的远程节点的 IP 地址。(仅限 enable_cluster)
remote_current_user (string) – 远程节点上授权的服务器级管理员的用户名。(仅限 enable_cluster)
remote_current_password (string) – 远程节点上授权的服务器级管理员的密码。(仅限 enable_cluster)
host (string) – 要添加到集群的远程节点 IP。(仅限 add_node)
ensure_dbs_exist (数组) – 要确保在节点/集群上存在的系统数据库列表。默认值为
["_users","_replicator"]
。
此处未包含示例请求/响应。有关工作示例,请参阅 集群设置 API.
1.2.6. /_db_updates
¶
版本 1.4 中的新增功能。
- GET /_db_updates¶
返回 CouchDB 实例中的所有数据库事件列表。使用此端点需要存在
_global_changes
数据库。- 请求头:
Accept –
application/json
text/plain
- 查询参数:
feed (string) –
normal: 返回所有历史 DB 更改,然后关闭连接。默认值。
longpoll: 在第一个事件后关闭连接。
continuous: 每个事件发送一行 JSON。保持套接字打开,直到
timeout
。eventsource: 与
continuous
相似,但以 EventSource 格式发送事件。
timeout (number) – CouchDB 关闭连接之前的毫秒数。默认值为
60000
。heartbeat (number) – 在结果中发送空行的毫秒数。仅适用于
longpoll
、continuous
和eventsource
馈送。覆盖任何超时以使馈送无限期地保持活动状态。默认值为60000
。可以为true
以使用默认值。since (string) – 仅返回自指定序列 ID 之后的更新。如果指定了序列 ID 但不存在,则返回所有更改。可以是字符串
now
以开始仅显示新更新。
- 响应头:
application/json
text/plain; charset=utf-8
Transfer-Encoding –
chunked
- 响应 JSON 对象:
results (array) – 数据库事件数组。对于
longpoll
和continuous
模式,整个响应是results
数组的内容。last_seq (string) – 报告的最后一个序列 ID。
- 状态码:
200 OK – 请求已成功完成
401 Unauthorized – 需要 CouchDB 服务器管理员权限
数据库更新的
results
字段- JSON 参数:
db_name (string) – 数据库名称。
type (string) – 数据库事件是
created
、updated
或deleted
之一。seq (json) – 事件的更新序列。
请求:
GET /_db_updates HTTP/1.1 Accept: application/json Host: localhost:5984
响应:
HTTP/1.1 200 OK Cache-Control: must-revalidate Content-Type: application/json Date: Sat, 18 Mar 2017 19:01:35 GMT Etag: "C1KU98Y6H0LGM7EQQYL6VSL07" Server: CouchDB/2.0.0 (Erlang OTP/17) Transfer-Encoding: chunked X-Couch-Request-ID: ad87efc7ff X-CouchDB-Body-Time: 0 { "results":[ {"db_name":"mailbox","type":"created","seq":"1-g1AAAAFReJzLYWBg4MhgTmHgzcvPy09JdcjLz8gvLskBCjMlMiTJ____PyuDOZExFyjAnmJhkWaeaIquGIf2JAUgmWQPMiGRAZcaB5CaePxqEkBq6vGqyWMBkgwNQAqobD4h"}, {"db_name":"mailbox","type":"deleted","seq":"2-g1AAAAFReJzLYWBg4MhgTmHgzcvPy09JdcjLz8gvLskBCjMlMiTJ____PyuDOZEpFyjAnmJhkWaeaIquGIf2JAUgmWQPMiGRAZcaB5CaePxqEkBq6vGqyWMBkgwNQAqobD4hdQsg6vYTUncAou4-IXUPIOpA7ssCAIFHa60"}, ], "last_seq": "2-g1AAAAFReJzLYWBg4MhgTmHgzcvPy09JdcjLz8gvLskBCjMlMiTJ____PyuDOZEpFyjAnmJhkWaeaIquGIf2JAUgmWQPMiGRAZcaB5CaePxqEkBq6vGqyWMBkgwNQAqobD4hdQsg6vYTUncAou4-IXUPIOpA7ssCAIFHa60" }
1.2.7. /_membership
¶
版本 2.0 中新增。
- GET /_membership¶
显示作为
cluster_nodes
的集群的一部分的节点。字段all_nodes
显示此节点知道的所有节点,包括集群的一部分的节点。此端点在设置集群时很有用,请参阅 节点管理- 请求头:
Accept –
application/json
text/plain
- 响应头:
application/json
text/plain; charset=utf-8
- 状态码:
200 OK – 请求已成功完成
请求:
GET /_membership HTTP/1.1 Accept: application/json Host: localhost:5984
响应:
HTTP/1.1 200 OK Cache-Control: must-revalidate Content-Type: application/json Date: Sat, 11 Jul 2015 07:02:41 GMT Server: CouchDB (Erlang/OTP) Content-Length: 142 { "all_nodes": [ "[email protected]", "[email protected]", "[email protected]" ], "cluster_nodes": [ "[email protected]", "[email protected]", "[email protected]" ] }
1.2.8. /_replicate
¶
版本 3.3 中的更改: 在复制历史响应对象中添加了 “bulk_get_attempts” 和 “bulk_get_docs” 字段。
- POST /_replicate¶
请求、配置或停止复制操作。
- 请求头:
Accept –
application/json
text/plain
Content-Type – application/json
- 请求 JSON 对象:
cancel (boolean) – 取消复制
continuous (boolean) – 将复制配置为连续
create_target (boolean) – 创建目标数据库。需要目标服务器上的管理员权限。
create_target_params (object) – 包含在创建目标数据库时要使用的参数的对象。可以包括标准的
q
和n
参数。winning_revs_only (boolean) – 仅复制获胜修订版。
doc_ids (array) – 要同步的文档 ID 数组。
doc_ids
、filter
和selector
是互斥的。filter (string) – 过滤器函数 的名称。
doc_ids
、filter
和selector
是互斥的。selector (json) – 用于过滤要同步的文档的 选择器。具有与复制文档中的 选择器对象 相同的行为。
doc_ids
、filter
和selector
是互斥的。source_proxy (string) – 要通过其进行源复制的代理服务器的地址(协议可以是“http”或“socks5”)
target_proxy (字符串) – 用于将数据复制到目标数据库的代理服务器地址(协议可以是“http”或“socks5”)。
source (字符串/对象) – 完整限定的源数据库 URL 或包含源数据库完整 URL 和其他参数(如标头)的对象。例如:‘http://example.com/source_db_name’ 或 {“url”:”url in here”, “headers”: {“header1”:”value1”, …}}。为了向后兼容,CouchDB 3.x 会自动将裸数据库名称转换为完整 URL,方法是在前面添加 CouchDB 正在监听的地址和端口。此行为在 3.x 中已弃用,将在 CouchDB 4.0 中移除。
target (字符串/对象) – 完整限定的目标数据库 URL 或包含目标数据库完整 URL 和其他参数(如标头)的对象。例如:‘http://example.com/target_db_name’ 或 {“url”:”url in here”, “headers”: {“header1”:”value1”, …}}。为了向后兼容,CouchDB 3.x 会自动将裸数据库名称转换为完整 URL,方法是在前面添加 CouchDB 正在监听的地址和端口。此行为在 3.x 中已弃用,将在 CouchDB 4.0 中移除。
- 响应头:
application/json
text/plain; charset=utf-8
- 响应 JSON 对象:
history (数组) – 复制历史记录(见下文)。
ok (布尔值) – 复制状态。
replication_id_version (数字) – 复制协议版本。
session_id (字符串) – 唯一的会话 ID。
source_last_seq (数字) – 从源数据库读取的最后一个序列号。
- 状态码:
200 OK – 复制请求已成功完成。
202 Accepted – 连续复制请求已接受。
400 Bad Request – 无效的 JSON 数据。
401 Unauthorized – 需要 CouchDB 服务器管理员权限
404 Not Found – 源数据库或目标数据库未找到,或尝试取消未知的复制任务。
500 Internal Server Error – JSON 规范无效。
复制请求的规范由请求的 JSON 内容控制。JSON 应该是一个对象,包含定义源、目标和其他选项的字段。
复制历史记录 是一个包含以下结构对象的数组。
- JSON 参数:
doc_write_failures (数字) – 文档写入失败次数。
docs_read (数字) – 读取的文档数量。
docs_written (数字) – 写入目标数据库的文档数量。
bulk_get_attempts (数字) – 使用
_bulk_get
获取文档修订版本的尝试次数。bulk_get_docs (数字) – 使用
_bulk_get
成功获取的文档总数。end_last_seq (数字) – 更改流中的最后一个序列号。
end_time (字符串) – 复制操作完成的日期/时间,采用 RFC 2822 格式。
missing_checked (数字) – 检查的缺失文档数量。
missing_found (数字) – 找到的缺失文档数量。
recorded_seq (数字) – 最后记录的序列号。
session_id (字符串) – 此复制操作的会话 ID。
start_last_seq (数字) – 更改流中的第一个序列号。
start_time (字符串) – 复制操作开始的日期/时间,采用 RFC 2822 格式。
注意
从 CouchDB 2.0.0 开始,复制 source
和 target
参数都需要使用完整限定的 URL。
请求
POST /_replicate HTTP/1.1
Accept: application/json
Content-Length: 80
Content-Type: application/json
Host: localhost:5984
{
"source": "http://127.0.0.1:5984/db_a",
"target": "http://127.0.0.1:5984/db_b"
}
响应
HTTP/1.1 200 OK
Cache-Control: must-revalidate
Content-Length: 692
Content-Type: application/json
Date: Sun, 11 Aug 2013 20:38:50 GMT
Server: CouchDB (Erlang/OTP)
{
"history": [
{
"doc_write_failures": 0,
"docs_read": 10,
"bulk_get_attempts": 10,
"bulk_get_docs": 10,
"docs_written": 10,
"end_last_seq": 28,
"end_time": "Sun, 11 Aug 2013 20:38:50 GMT",
"missing_checked": 10,
"missing_found": 10,
"recorded_seq": 28,
"session_id": "142a35854a08e205c47174d91b1f9628",
"start_last_seq": 1,
"start_time": "Sun, 11 Aug 2013 20:38:50 GMT"
},
{
"doc_write_failures": 0,
"docs_read": 1,
"bulk_get_attempts": 1,
"bulk_get_docs": 1,
"docs_written": 1,
"end_last_seq": 1,
"end_time": "Sat, 10 Aug 2013 15:41:54 GMT",
"missing_checked": 1,
"missing_found": 1,
"recorded_seq": 1,
"session_id": "6314f35c51de3ac408af79d6ee0c1a09",
"start_last_seq": 0,
"start_time": "Sat, 10 Aug 2013 15:41:54 GMT"
}
],
"ok": true,
"replication_id_version": 3,
"session_id": "142a35854a08e205c47174d91b1f9628",
"source_last_seq": 28
}
1.2.8.1. 复制操作¶
复制的目的是在过程结束时,源数据库中的所有活动文档也存在于目标数据库中,并且源数据库中删除的所有文档也从目标数据库中删除(如果存在)。
复制可以描述为推复制或拉复制。
拉复制 是指
source
是远程 CouchDB 实例,而target
是本地数据库。如果源数据库具有永久 IP 地址,而目标(本地)数据库可能具有动态分配的 IP 地址(例如,通过 DHCP),则拉复制是最有用的解决方案。如果要从中央服务器复制到移动设备或其他设备,这一点尤其重要。
推复制 是指
source
是本地数据库,而target
是远程数据库。
1.2.8.2. 指定源数据库和目标数据库¶
如果要在以下两种情况之一中执行复制,则必须使用 CouchDB 数据库的 URL 规范。
与远程数据库复制(即同一主机上的另一个 CouchDB 实例或不同主机上的实例)。
与需要身份验证的数据库复制。
例如,要请求在本地于发送请求的 CouchDB 实例的数据库与远程数据库之间进行复制,可以使用以下请求。
POST http://couchdb:5984/_replicate HTTP/1.1
Content-Type: application/json
Accept: application/json
{
"source" : "recipes",
"target" : "http://coucdb-remote:5984/recipes",
}
在所有情况下,source
和 target
规范中请求的数据库必须存在。如果不存在,则会在 JSON 对象中返回错误。
{
"error" : "db_not_found"
"reason" : "could not open http://couchdb-remote:5984/ol1ka/",
}
您可以通过将 create_target
字段添加到请求对象来创建目标数据库(前提是您的用户凭据允许这样做)。
POST http://couchdb:5984/_replicate HTTP/1.1
Content-Type: application/json
Accept: application/json
{
"create_target" : true
"source" : "recipes",
"target" : "http://couchdb-remote:5984/recipes",
}
create_target
字段不会破坏性。如果数据库已存在,则复制将照常进行。
1.2.8.3. 单次复制¶
您可以请求复制数据库,以便两个数据库可以同步。默认情况下,复制过程只执行一次,并将两个数据库同步在一起。例如,您可以通过在请求 JSON 内容中提供 source
和 target
字段来请求两个数据库之间的单次同步。
POST http://couchdb:5984/_replicate HTTP/1.1
Accept: application/json
Content-Type: application/json
{
"source" : "recipes",
"target" : "recipes-snapshot",
}
在上面的示例中,数据库 recipes
和 recipes-snapshot
将同步。这些数据库是本地于发出请求的 CouchDB 实例的。响应将是一个 JSON 结构,包含同步过程的成功(或失败)以及有关该过程的统计信息。
{
"ok" : true,
"history" : [
{
"docs_read" : 1000,
"bulk_get_attempts": 1000,
"bulk_get_docs": 1000,
"session_id" : "52c2370f5027043d286daca4de247db0",
"recorded_seq" : 1000,
"end_last_seq" : 1000,
"doc_write_failures" : 0,
"start_time" : "Thu, 28 Oct 2010 10:24:13 GMT",
"start_last_seq" : 0,
"end_time" : "Thu, 28 Oct 2010 10:24:14 GMT",
"missing_checked" : 0,
"docs_written" : 1000,
"missing_found" : 1000
}
],
"session_id" : "52c2370f5027043d286daca4de247db0",
"source_last_seq" : 1000
}
1.2.8.4. 连续复制¶
使用前面提到的方法同步数据库只发生一次,即在发出复制请求时。要使目标数据库永久从源数据库复制,必须将请求中 JSON 对象的 continuous
字段设置为 true。
使用连续复制,源数据库中的更改将永久复制到目标数据库,直到您明确请求停止复制为止。
POST http://couchdb:5984/_replicate HTTP/1.1
Accept: application/json
Content-Type: application/json
{
"continuous" : true
"source" : "recipes",
"target" : "http://couchdb-remote:5984/recipes",
}
只要两个实例之间存在网络连接,更改就会在两个数据库之间复制。
注意
要使两个数据库彼此同步,您需要双向设置复制;也就是说,您必须从 source
复制到 target
,并且分别从 target
复制到 source
。
1.2.8.5. 取消连续复制¶
您可以通过将 cancel
字段添加到 JSON 请求对象并将值设置为 true 来取消连续复制。请注意,请求的结构必须与原始请求相同,才能使取消请求生效。例如,如果您请求了连续复制,则取消请求也必须包含 continuous
字段。
例如,复制请求
POST http://couchdb:5984/_replicate HTTP/1.1
Content-Type: application/json
Accept: application/json
{
"source" : "recipes",
"target" : "http://couchdb-remote:5984/recipes",
"create_target" : true,
"continuous" : true
}
必须使用以下请求取消。
POST http://couchdb:5984/_replicate HTTP/1.1
Accept: application/json
Content-Type: application/json
{
"cancel" : true,
"continuous" : true
"create_target" : true,
"source" : "recipes",
"target" : "http://couchdb-remote:5984/recipes",
}
请求取消不存在的复制会导致 404 错误。
1.2.9. /_scheduler/jobs
¶
- GET /_scheduler/jobs¶
复制作业列表。包括通过 /_replicate 端点创建的复制以及从复制文档创建的复制。不包括已完成或由于复制文档格式错误而无法启动的复制。每个作业描述将包含源和目标信息、复制 ID、最近事件的历史记录以及其他一些内容。
- 请求头:
Accept –
application/json
- 响应头:
application/json
- 查询参数:
limit (数字) – 要返回的结果数量。
skip (数字) – 从开头开始跳过的结果数量,按复制 ID 排序。
- 响应 JSON 对象:
offset (数字) – 跳过的结果数量。
total_rows (数字) – 复制作业的总数。
id (字符串) – 复制 ID。
database (字符串) – 复制文档数据库。
doc_id (字符串) – 复制文档 ID。
history (列表) – 事件的时间戳历史记录,作为对象列表。
pid (字符串) – 复制进程 ID。
node (字符串) – 运行作业的集群节点。
source (字符串) – 复制源。
target (字符串) – 复制目标。
start_time (字符串) – 复制启动的时间戳。
- 状态码:
200 OK – 请求已成功完成
401 Unauthorized – 需要 CouchDB 服务器管理员权限
请求:
GET /_scheduler/jobs HTTP/1.1 Accept: application/json Host: localhost:5984
响应:
HTTP/1.1 200 OK Cache-Control: must-revalidate Content-Length: 1690 Content-Type: application/json Date: Sat, 29 Apr 2017 05:05:16 GMT Server: CouchDB (Erlang/OTP) { "jobs": [ { "database": "_replicator", "doc_id": "cdyno-0000001-0000003", "history": [ { "timestamp": "2017-04-29T05:01:37Z", "type": "started" }, { "timestamp": "2017-04-29T05:01:37Z", "type": "added" } ], "id": "8f5b1bd0be6f9166ccfd36fc8be8fc22+continuous", "info": { "changes_pending": 0, "checkpointed_source_seq": "113-g1AAAACTeJzLYWBgYMpgTmHgz8tPSTV0MDQy1zMAQsMckEQiQ1L9____szKYE01ygQLsZsYGqcamiZjKcRqRxwIkGRqA1H-oSbZgk1KMLCzTDE0wdWUBAF6HJIQ", "doc_write_failures": 0, "docs_read": 113, "docs_written": 113, "bulk_get_attempts": 113, "bulk_get_docs": 113, "missing_revisions_found": 113, "revisions_checked": 113, "source_seq": "113-g1AAAACTeJzLYWBgYMpgTmHgz8tPSTV0MDQy1zMAQsMckEQiQ1L9____szKYE01ygQLsZsYGqcamiZjKcRqRxwIkGRqA1H-oSbZgk1KMLCzTDE0wdWUBAF6HJIQ", "through_seq": "113-g1AAAACTeJzLYWBgYMpgTmHgz8tPSTV0MDQy1zMAQsMckEQiQ1L9____szKYE01ygQLsZsYGqcamiZjKcRqRxwIkGRqA1H-oSbZgk1KMLCzTDE0wdWUBAF6HJIQ" }, "node": "[email protected]", "pid": "<0.1850.0>", "source": "http://myserver.com/foo", "start_time": "2017-04-29T05:01:37Z", "target": "http://adm:*****@localhost:15984/cdyno-0000003/", "user": null }, { "database": "_replicator", "doc_id": "cdyno-0000001-0000002", "history": [ { "timestamp": "2017-04-29T05:01:37Z", "type": "started" }, { "timestamp": "2017-04-29T05:01:37Z", "type": "added" } ], "id": "e327d79214831ca4c11550b4a453c9ba+continuous", "info": { "changes_pending": null, "checkpointed_source_seq": 0, "doc_write_failures": 0, "docs_read": 12, "docs_written": 12, "bulk_get_attempts": 12, "bulk_get_docs": 12, "missing_revisions_found": 12, "revisions_checked": 12, "source_seq": "12-g1AAAACTeJzLYWBgYMpgTmHgz8tPSTV0MDQy1zMAQsMckEQiQ1L9____szKYE1lzgQLsBsZm5pZJJpjKcRqRxwIkGRqA1H-oSexgk4yMkhITjS0wdWUBADfEJBg", "through_seq": "12-g1AAAACTeJzLYWBgYMpgTmHgz8tPSTV0MDQy1zMAQsMckEQiQ1L9____szKYE1lzgQLsBsZm5pZJJpjKcRqRxwIkGRqA1H-oSexgk4yMkhITjS0wdWUBADfEJBg" }, "node": "[email protected]", "pid": "<0.1757.0>", "source": "http://myserver.com/foo", "start_time": "2017-04-29T05:01:37Z", "target": "http://adm:*****@localhost:15984/cdyno-0000002/", "user": null } ], "offset": 0, "total_rows": 2 }
1.2.10. /_scheduler/docs
¶
在版本 2.1.0 中更改: 使用此端点监控基于文档的复制的状态。以前需要轮询文档和 _active_tasks
才能获得完整的状态摘要。
在版本 3.0.0 中更改: 在错误状态下,“info” 字段从字符串更改为对象。
版本 3.3 中的变更: 在 “info” 对象中添加了 “bulk_get_attempts” 和 “bulk_get_docs”。
- GET /_scheduler/docs¶
复制文档状态列表。包括所有文档的信息,即使是在
completed
和failed
状态下。对于每个文档,它将返回文档 ID、数据库、复制 ID、源和目标以及其他信息。- 请求头:
Accept –
application/json
- 响应头:
application/json
- 查询参数:
limit (数字) – 要返回的结果数量。
skip (数字) – 从开头开始跳过的结果数量,如果按文档 ID 排序
- 响应 JSON 对象:
offset (数字) – 跳过的结果数量。
total_rows (数字) – 复制文档的总数。
id (字符串) – 复制 ID,如果状态为
completed
或failed
,则为null
state (字符串) – 以下状态之一(有关描述,请参阅 复制状态):
initializing
、running
、completed
、pending
、crashing
、error
、failed
database (字符串) – 复制文档来源的数据库
doc_id (字符串) – 复制文档 ID。
node (字符串) – 运行作业的集群节点。
source (字符串) – 复制源。
target (字符串) – 复制目标。
start_time (字符串) – 复制启动的时间戳。
last_updated (字符串) – 最后一次状态更新的时间戳
info (对象) – 将包含有关状态的附加信息。对于错误,这将是一个包含
"error"
字段和字符串值的 对象。对于成功状态,请参见下文。error_count (数字) – 连续错误计数。指示此复制崩溃的次数。复制将根据此数字以指数级回退进行重试。一旦复制成功,此计数将重置为 0。可用于了解特定复制为何没有进展。
- 状态码:
200 OK – 请求已成功完成
401 Unauthorized – 需要 CouchDB 服务器管理员权限
调度程序文档的
info
字段- JSON 参数:
revisions_checked (数字) – 自此复制开始以来已检查的修订次数。
missing_revisions_found (数字) – 在源中找到但在目标中缺失的修订次数。
docs_read (数字) – 从源读取的文档数量。
docs_written (数字) – 写入目标的文档数量。
bulk_get_attempts (数字) – 使用
_bulk_get
获取文档修订版本的尝试次数。bulk_get_docs (数字) – 使用
_bulk_get
成功获取的文档总数。changes_pending (数字) – 尚未复制的更改数量。
doc_write_failures (数字) – 无法写入目标的文档数量。
checkpointed_source_seq (对象) – 最后成功复制的源序列 ID。
请求:
GET /_scheduler/docs HTTP/1.1 Accept: application/json Host: localhost:5984
响应:
HTTP/1.1 200 OK Content-Type: application/json Date: Sat, 29 Apr 2017 05:10:08 GMT Server: Server: CouchDB (Erlang/OTP) Transfer-Encoding: chunked { "docs": [ { "database": "_replicator", "doc_id": "cdyno-0000001-0000002", "error_count": 0, "id": "e327d79214831ca4c11550b4a453c9ba+continuous", "info": { "changes_pending": 15, "checkpointed_source_seq": "60-g1AAAACTeJzLYWBgYMpgTmHgz8tPSTV0MDQy1zMAQsMckEQiQ1L9____szKYEyVygQLsBsZm5pZJJpjKcRqRxwIkGRqA1H-oSSpgk4yMkhITjS0wdWUBAENCJEg", "doc_write_failures": 0, "docs_read": 67, "bulk_get_attempts": 67, "bulk_get_docs": 67, "docs_written": 67, "missing_revisions_found": 67, "revisions_checked": 67, "source_seq": "67-g1AAAACTeJzLYWBgYMpgTmHgz8tPSTV0MDQy1zMAQsMckEQiQ1L9____szKYE2VygQLsBsZm5pZJJpjKcRqRxwIkGRqA1H-oSepgk4yMkhITjS0wdWUBAEVKJE8", "through_seq": "67-g1AAAACTeJzLYWBgYMpgTmHgz8tPSTV0MDQy1zMAQsMckEQiQ1L9____szKYE2VygQLsBsZm5pZJJpjKcRqRxwIkGRqA1H-oSepgk4yMkhITjS0wdWUBAEVKJE8" }, "last_updated": "2017-04-29T05:01:37Z", "node": "[email protected]", "source_proxy": null, "target_proxy": null, "source": "http://myserver.com/foo", "start_time": "2017-04-29T05:01:37Z", "state": "running", "target": "http://adm:*****@localhost:15984/cdyno-0000002/" }, { "database": "_replicator", "doc_id": "cdyno-0000001-0000003", "error_count": 0, "id": "8f5b1bd0be6f9166ccfd36fc8be8fc22+continuous", "info": { "changes_pending": null, "checkpointed_source_seq": 0, "doc_write_failures": 0, "bulk_get_attempts": 12, "bulk_get_docs": 12, "docs_read": 12, "docs_written": 12, "missing_revisions_found": 12, "revisions_checked": 12, "source_seq": "12-g1AAAACTeJzLYWBgYMpgTmHgz8tPSTV0MDQy1zMAQsMckEQiQ1L9____szKYE1lzgQLsBsZm5pZJJpjKcRqRxwIkGRqA1H-oSexgk4yMkhITjS0wdWUBADfEJBg", "through_seq": "12-g1AAAACTeJzLYWBgYMpgTmHgz8tPSTV0MDQy1zMAQsMckEQiQ1L9____szKYE1lzgQLsBsZm5pZJJpjKcRqRxwIkGRqA1H-oSexgk4yMkhITjS0wdWUBADfEJBg" }, "last_updated": "2017-04-29T05:01:37Z", "node": "[email protected]", "source_proxy": null, "target_proxy": null, "source": "http://myserver.com/foo", "start_time": "2017-04-29T05:01:37Z", "state": "running", "target": "http://adm:*****@localhost:15984/cdyno-0000003/" } ], "offset": 0, "total_rows": 2 }
- GET /_scheduler/docs/{replicator_db}¶
获取来自复制器数据库的复制文档信息。默认复制器数据库是
_replicator
,但如果其他复制器数据库的名称以/_replicator
结尾,则它们可能存在。注意
为了方便起见,复制器数据库名称中的斜杠 (
/
) 不需要转义。因此,/_scheduler/docs/other/_replicator
是有效的,并且等效于/_scheduler/docs/other%2f_replicator
- 请求头:
Accept –
application/json
- 响应头:
application/json
- 查询参数:
limit (数字) – 要返回的结果数量。
skip (数字) – 从开头开始跳过的结果数量,如果按文档 ID 排序
- 响应 JSON 对象:
offset (数字) – 跳过的结果数量。
total_rows (数字) – 复制文档的总数。
id (字符串) – 复制 ID,如果状态为
completed
或failed
,则为null
state (字符串) – 以下状态之一(有关描述,请参阅 复制状态):
initializing
、running
、completed
、pending
、crashing
、error
、failed
database (字符串) – 复制文档来源的数据库
doc_id (字符串) – 复制文档 ID。
node (字符串) – 运行作业的集群节点。
source (字符串) – 复制源。
target (字符串) – 复制目标。
start_time (字符串) – 复制启动的时间戳。
last_update (字符串) – 最后一次状态更新的时间戳
info (对象) – 将包含有关状态的附加信息。对于错误,这将是一个包含
"error"
字段和字符串值的 对象。对于成功状态,请参见下文。error_count (数字) – 连续错误计数。指示此复制崩溃的次数。复制将根据此数字以指数级回退进行重试。一旦复制成功,此计数将重置为 0。可用于了解特定复制为何没有进展。
- 状态码:
200 OK – 请求已成功完成
401 Unauthorized – 需要 CouchDB 服务器管理员权限
调度程序文档的
info
字段- JSON 参数:
revisions_checked (数字) – 自此复制开始以来已检查的修订次数。
missing_revisions_found (数字) – 在源中找到但在目标中缺失的修订次数。
docs_read (数字) – 从源读取的文档数量。
docs_written (数字) – 写入目标的文档数量。
bulk_get_attempts (数字) – 使用
_bulk_get
获取文档修订版本的尝试次数。bulk_get_docs (数字) – 使用
_bulk_get
成功获取的文档总数。changes_pending (数字) – 尚未复制的更改数量。
doc_write_failures (数字) – 无法写入目标的文档数量。
checkpointed_source_seq (对象) – 最后成功复制的源序列 ID。
请求:
GET /_scheduler/docs/other/_replicator HTTP/1.1 Accept: application/json Host: localhost:5984
响应:
HTTP/1.1 200 OK Content-Type: application/json Date: Sat, 29 Apr 2017 05:10:08 GMT Server: Server: CouchDB (Erlang/OTP) Transfer-Encoding: chunked { "docs": [ { "database": "other/_replicator", "doc_id": "cdyno-0000001-0000002", "error_count": 0, "id": "e327d79214831ca4c11550b4a453c9ba+continuous", "info": { "changes_pending": 0, "checkpointed_source_seq": "60-g1AAAACTeJzLYWBgYMpgTmHgz8tPSTV0MDQy1zMAQsMckEQiQ1L9____szKYEyVygQLsBsZm5pZJJpjKcRqRxwIkGRqA1H-oSSpgk4yMkhITjS0wdWUBAENCJEg", "doc_write_failures": 0, "docs_read": 67, "bulk_get_attempts": 67, "bulk_get_docs": 67, "docs_written": 67, "missing_revisions_found": 67, "revisions_checked": 67, "source_seq": "67-g1AAAACTeJzLYWBgYMpgTmHgz8tPSTV0MDQy1zMAQsMckEQiQ1L9____szKYE2VygQLsBsZm5pZJJpjKcRqRxwIkGRqA1H-oSepgk4yMkhITjS0wdWUBAEVKJE8", "through_seq": "67-g1AAAACTeJzLYWBgYMpgTmHgz8tPSTV0MDQy1zMAQsMckEQiQ1L9____szKYE2VygQLsBsZm5pZJJpjKcRqRxwIkGRqA1H-oSepgk4yMkhITjS0wdWUBAEVKJE8" }, "last_updated": "2017-04-29T05:01:37Z", "node": "[email protected]", "source_proxy": null, "target_proxy": null, "source": "http://myserver.com/foo", "start_time": "2017-04-29T05:01:37Z", "state": "running", "target": "http://adm:*****@localhost:15984/cdyno-0000002/" } ], "offset": 0, "total_rows": 1 }
- GET /_scheduler/docs/{replicator_db}/{docid}¶
注意
为了方便起见,复制器数据库名称中的斜杠 (
/
) 不需要转义。因此,/_scheduler/docs/other/_replicator
是有效的,并且等效于/_scheduler/docs/other%2f_replicator
- 请求头:
Accept –
application/json
- 响应头:
application/json
- 响应 JSON 对象:
id (字符串) – 复制 ID,如果状态为
completed
或failed
,则为null
state (字符串) – 以下状态之一(有关描述,请参阅 复制状态):
initializing
、running
、completed
、pending
、crashing
、error
、failed
database (字符串) – 复制文档来源的数据库
doc_id (字符串) – 复制文档 ID。
node (字符串) – 运行作业的集群节点。
source (字符串) – 复制源。
target (字符串) – 复制目标。
start_time (字符串) – 复制启动的时间戳。
last_update (字符串) – 最后一次状态更新的时间戳
info (对象) – 将包含有关状态的附加信息。对于错误,这将是一个包含
"error"
字段和字符串值的 对象。对于成功状态,请参见下文。error_count (数字) – 连续错误计数。指示此复制崩溃的次数。复制将根据此数字以指数级回退进行重试。一旦复制成功,此计数将重置为 0。可用于了解特定复制为何没有进展。
- 状态码:
200 OK – 请求已成功完成
401 Unauthorized – 需要 CouchDB 服务器管理员权限
调度程序文档的
info
字段- JSON 参数:
revisions_checked (数字) – 自此复制开始以来已检查的修订次数。
missing_revisions_found (数字) – 在源中找到但在目标中缺失的修订次数。
docs_read (数字) – 从源读取的文档数量。
docs_written (数字) – 写入目标的文档数量。
bulk_get_attempts (数字) – 使用
_bulk_get
获取文档修订版本的尝试次数。bulk_get_docs (数字) – 使用
_bulk_get
成功获取的文档总数。changes_pending (数字) – 尚未复制的更改数量。
doc_write_failures (数字) – 无法写入目标的文档数量。
checkpointed_source_seq (对象) –
- 最后
成功复制的源序列 ID。
请求:
GET /_scheduler/docs/other/_replicator/cdyno-0000001-0000002 HTTP/1.1 Accept: application/json Host: localhost:5984
响应:
HTTP/1.1 200 OK Content-Type: application/json Date: Sat, 29 Apr 2017 05:10:08 GMT Server: Server: CouchDB (Erlang/OTP) Transfer-Encoding: chunked { "database": "other/_replicator", "doc_id": "cdyno-0000001-0000002", "error_count": 0, "id": "e327d79214831ca4c11550b4a453c9ba+continuous", "info": { "changes_pending": 0, "checkpointed_source_seq": "60-g1AAAACTeJzLYWBgYMpgTmHgz8tPSTV0MDQy1zMAQsMckEQiQ1L9____szKYEyVygQLsBsZm5pZJJpjKcRqRxwIkGRqA1H-oSSpgk4yMkhITjS0wdWUBAENCJEg", "doc_write_failures": 0, "docs_read": 67, "bulk_get_attempts": 67, "bulk_get_docs": 67, "docs_written": 67, "missing_revisions_found": 67, "revisions_checked": 67, "source_seq": "67-g1AAAACTeJzLYWBgYMpgTmHgz8tPSTV0MDQy1zMAQsMckEQiQ1L9____szKYE2VygQLsBsZm5pZJJpjKcRqRxwIkGRqA1H-oSepgk4yMkhITjS0wdWUBAEVKJE8", "through_seq": "67-g1AAAACTeJzLYWBgYMpgTmHgz8tPSTV0MDQy1zMAQsMckEQiQ1L9____szKYE2VygQLsBsZm5pZJJpjKcRqRxwIkGRqA1H-oSepgk4yMkhITjS0wdWUBAEVKJE8" }, "last_updated": "2017-04-29T05:01:37Z", "node": "[email protected]", "source_proxy": null, "target_proxy": null, "source": "http://myserver.com/foo", "start_time": "2017-04-29T05:01:37Z", "state": "running", "target": "http://adm:*****@localhost:15984/cdyno-0000002/" }
1.2.11. /_node/{node-name}
¶
- GET /_node/{node-name}¶
/_node/{node-name}
端点可用于确认处理请求的服务器的 Erlang 节点名称。当访问/_node/_local
以检索此信息时,这最有用。反复检索 CouchDB 端点的此信息可能有助于确定 CouchDB 集群是否通过反向负载均衡器正确代理。- 请求头:
Accept –
application/json
text/plain
- 响应头:
application/json
text/plain; charset=utf-8
- 状态码:
200 OK – 请求已成功完成
请求:
GET /_node/_local HTTP/1.1 Accept: application/json Host: localhost:5984
响应:
HTTP/1.1 200 OK Cache-Control: must-revalidate Content-Length: 27 Content-Type: application/json Date: Tue, 28 Jan 2020 19:25:51 GMT Server: CouchDB (Erlang OTP) X-Couch-Request-ID: 5b8db6c677 X-CouchDB-Body-Time: 0 {"name":"[email protected]"}
1.2.12. /_node/{node-name}/_stats
¶
- GET /_node/{node-name}/_stats¶
_stats
资源返回一个 JSON 对象,其中包含正在运行的服务器的统计信息。该对象结构化了顶级部分,将一系列条目的统计信息整理在一起,每个单独的统计信息都易于识别,并且每个统计信息的内容都是自描述的。统计信息在内部以 可配置的间隔 采样。在监控
_stats
端点时,您需要使用至少两倍于此的轮询频率才能观察到准确的结果。例如,如果 间隔 为 10 秒,则至少每 5 秒轮询一次_stats
。文字字符串
_local
充当本地节点名称的别名,因此对于所有统计信息 URL,{node-name}
可以替换为_local
,以与本地节点的统计信息进行交互。- 请求头:
Accept –
application/json
text/plain
- 响应头:
application/json
text/plain; charset=utf-8
- 状态码:
200 OK – 请求已成功完成
请求:
GET /_node/_local/_stats/couchdb/request_time HTTP/1.1 Accept: application/json Host: localhost:5984
响应:
HTTP/1.1 200 OK Cache-Control: must-revalidate Content-Length: 187 Content-Type: application/json Date: Sat, 10 Aug 2013 11:41:11 GMT Server: CouchDB (Erlang/OTP) { "value": { "min": 0, "max": 0, "arithmetic_mean": 0, "geometric_mean": 0, "harmonic_mean": 0, "median": 0, "variance": 0, "standard_deviation": 0, "skewness": 0, "kurtosis": 0, "percentile": [ [ 50, 0 ], [ 75, 0 ], [ 90, 0 ], [ 95, 0 ], [ 99, 0 ], [ 999, 0 ] ], "histogram": [ [ 0, 0 ] ], "n": 0 }, "type": "histogram", "desc": "length of a request inside CouchDB without MochiWeb" }
这些字段提供了当前值、最小值和最大值,以及统计平均值和数量的集合。每种情况下的数量没有定义,但以下描述提供了足够的细节来确定单位。
统计信息按“组”报告。统计信息分为以下顶级部分
couch_log
: 日志记录子系统couch_replicator
: 复制调度程序和子系统couchdb
: 主要 CouchDB 数据库操作fabric
: 与集群相关的操作global_changes
: 全局更改提要mem3
: 与节点成员资格相关的统计信息pread
: CouchDB 与文件相关的异常rexi
: 与集群内部 RPC 相关的统计信息
统计信息的类型包含在 type
字段中,并且是以下之一
counter
: 单调递增计数器,在重启时重置histogram
: 带有有意义细分的数值集合。范围限定为当前 收集间隔。gauge
: 可以上下波动的单个数值
您还可以通过将统计信息部分和统计信息 ID 作为 URL 路径的一部分引用来访问单个统计信息。例如,要获取目标节点的 couchdb
部分中的 request_time
统计信息,您可以使用
GET /_node/_local/_stats/couchdb/request_time HTTP/1.1
这将返回一个完整的统计信息对象,与完整请求一样,但只包含请求的单个统计信息。
1.2.13. /_node/{node-name}/_prometheus
¶
- GET /_node/{node-name}/_prometheus¶
_prometheus
资源返回一个 text/plain 响应,该响应整合了我们的 /_node/{node-name}/_stats 和 /_node/{node-name}/_system 端点。格式由 Prometheus 确定。格式版本为 2.0。请求:
GET /_node/_local/_prometheus HTTP/1.1 Accept: text/plain Host: localhost:5984
响应:
HTTP/1.1 200 OK Cache-Control: must-revalidate Content-Length: 187 Content-Type: text/plain; version=2.0 Date: Sat, 10 May 2020 11:41:11 GMT Server: CouchDB (Erlang/OTP) # TYPE couchdb_couch_log_requests_total counter couchdb_couch_log_requests_total{level="alert"} 0 couchdb_couch_log_requests_total{level="critical"} 0 couchdb_couch_log_requests_total{level="debug"} 0 couchdb_couch_log_requests_total{level="emergency"} 0 couchdb_couch_log_requests_total{level="error"} 0 couchdb_couch_log_requests_total{level="info"} 8 couchdb_couch_log_requests_total{level="notice"} 51 couchdb_couch_log_requests_total{level="warning"} 0 # TYPE couchdb_couch_replicator_changes_manager_deaths_total counter couchdb_couch_replicator_changes_manager_deaths_total 0 # TYPE couchdb_couch_replicator_changes_queue_deaths_total counter couchdb_couch_replicator_changes_queue_deaths_total 0 # TYPE couchdb_couch_replicator_changes_read_failures_total counter couchdb_couch_replicator_changes_read_failures_total 0 # TYPE couchdb_couch_replicator_changes_reader_deaths_total counter couchdb_couch_replicator_changes_reader_deaths_total 0 # TYPE couchdb_couch_replicator_checkpoints_failure_total counter couchdb_couch_replicator_checkpoints_failure_total 0 # TYPE couchdb_couch_replicator_checkpoints_total counter couchdb_couch_replicator_checkpoints_total 0 # TYPE couchdb_couch_replicator_cluster_is_stable gauge couchdb_couch_replicator_cluster_is_stable 1 # TYPE couchdb_couch_replicator_connection_acquires_total counter couchdb_couch_replicator_connection_acquires_total 0 # TYPE couchdb_couch_replicator_connection_closes_total counter couchdb_couch_replicator_connection_closes_total 0 # TYPE couchdb_couch_replicator_connection_creates_total counter couchdb_couch_replicator_connection_creates_total 0 # TYPE couchdb_couch_replicator_connection_owner_crashes_total counter couchdb_couch_replicator_connection_owner_crashes_total 0 # TYPE couchdb_couch_replicator_connection_releases_total counter couchdb_couch_replicator_connection_releases_total 0 # TYPE couchdb_couch_replicator_connection_worker_crashes_total counter couchdb_couch_replicator_connection_worker_crashes_total 0 # TYPE couchdb_couch_replicator_db_scans_total counter couchdb_couch_replicator_db_scans_total 1 # TYPE couchdb_couch_replicator_docs_completed_state_updates_total counter couchdb_couch_replicator_docs_completed_state_updates_total 0 # TYPE couchdb_couch_replicator_docs_db_changes_total counter couchdb_couch_replicator_docs_db_changes_total 0 # TYPE couchdb_couch_replicator_docs_dbs_created_total counter couchdb_couch_replicator_docs_dbs_created_total 0 # TYPE couchdb_couch_replicator_docs_dbs_deleted_total counter couchdb_couch_replicator_docs_dbs_deleted_total 0 # TYPE couchdb_couch_replicator_docs_dbs_found_total counter couchdb_couch_replicator_docs_dbs_found_total 2 # TYPE couchdb_couch_replicator_docs_failed_state_updates_total counter couchdb_couch_replicator_docs_failed_state_updates_total 0 # TYPE couchdb_couch_replicator_failed_starts_total counter couchdb_couch_replicator_failed_starts_total 0 # TYPE couchdb_couch_replicator_jobs_adds_total counter couchdb_couch_replicator_jobs_adds_total 0 # TYPE couchdb_couch_replicator_jobs_crashed gauge couchdb_couch_replicator_jobs_crashed 0 # TYPE couchdb_couch_replicator_jobs_crashes_total counter couchdb_couch_replicator_jobs_crashes_total 0 # TYPE couchdb_couch_replicator_jobs_duplicate_adds_total counter couchdb_couch_replicator_jobs_duplicate_adds_total 0 # TYPE couchdb_couch_replicator_jobs_pending gauge couchdb_couch_replicator_jobs_pending 0 # TYPE couchdb_couch_replicator_jobs_removes_total counter couchdb_couch_replicator_jobs_removes_total 0 # TYPE couchdb_couch_replicator_jobs_running gauge couchdb_couch_replicator_jobs_running 0 # TYPE couchdb_couch_replicator_jobs_starts_total counter couchdb_couch_replicator_jobs_starts_total 0 # TYPE couchdb_couch_replicator_jobs_stops_total counter couchdb_couch_replicator_jobs_stops_total 0 # TYPE couchdb_couch_replicator_jobs_total gauge couchdb_couch_replicator_jobs_total 0 # TYPE couchdb_couch_replicator_requests_total counter couchdb_couch_replicator_requests_total 0 # TYPE couchdb_couch_replicator_responses_failure_total counter couchdb_couch_replicator_responses_failure_total 0 # TYPE couchdb_couch_replicator_responses_total counter couchdb_couch_replicator_responses_total 0 # TYPE couchdb_couch_replicator_stream_responses_failure_total counter couchdb_couch_replicator_stream_responses_failure_total 0 # TYPE couchdb_couch_replicator_stream_responses_total counter couchdb_couch_replicator_stream_responses_total 0 # TYPE couchdb_couch_replicator_worker_deaths_total counter couchdb_couch_replicator_worker_deaths_total 0 # TYPE couchdb_couch_replicator_workers_started_total counter couchdb_couch_replicator_workers_started_total 0 # TYPE couchdb_auth_cache_requests_total counter couchdb_auth_cache_requests_total 0 # TYPE couchdb_auth_cache_misses_total counter couchdb_auth_cache_misses_total 0 # TYPE couchdb_collect_results_time_seconds summary couchdb_collect_results_time_seconds{quantile="0.5"} 0.0 couchdb_collect_results_time_seconds{quantile="0.75"} 0.0 couchdb_collect_results_time_seconds{quantile="0.9"} 0.0 couchdb_collect_results_time_seconds{quantile="0.95"} 0.0 couchdb_collect_results_time_seconds{quantile="0.99"} 0.0 couchdb_collect_results_time_seconds{quantile="0.999"} 0.0 couchdb_collect_results_time_seconds_sum 0.0 couchdb_collect_results_time_seconds_count 0 # TYPE couchdb_couch_server_lru_skip_total counter couchdb_couch_server_lru_skip_total 0 # TYPE couchdb_database_purges_total counter couchdb_database_purges_total 0 # TYPE couchdb_database_reads_total counter couchdb_database_reads_total 0 # TYPE couchdb_database_writes_total counter couchdb_database_writes_total 0 # TYPE couchdb_db_open_time_seconds summary couchdb_db_open_time_seconds{quantile="0.5"} 0.0 couchdb_db_open_time_seconds{quantile="0.75"} 0.0 couchdb_db_open_time_seconds{quantile="0.9"} 0.0 couchdb_db_open_time_seconds{quantile="0.95"} 0.0 couchdb_db_open_time_seconds{quantile="0.99"} 0.0 couchdb_db_open_time_seconds{quantile="0.999"} 0.0 couchdb_db_open_time_seconds_sum 0.0 couchdb_db_open_time_seconds_count 0 # TYPE couchdb_dbinfo_seconds summary couchdb_dbinfo_seconds{quantile="0.5"} 0.0 couchdb_dbinfo_seconds{quantile="0.75"} 0.0 couchdb_dbinfo_seconds{quantile="0.9"} 0.0 couchdb_dbinfo_seconds{quantile="0.95"} 0.0 couchdb_dbinfo_seconds{quantile="0.99"} 0.0 couchdb_dbinfo_seconds{quantile="0.999"} 0.0 couchdb_dbinfo_seconds_sum 0.0 couchdb_dbinfo_seconds_count 0 # TYPE couchdb_document_inserts_total counter couchdb_document_inserts_total 0 # TYPE couchdb_document_purges_failure_total counter couchdb_document_purges_failure_total 0 # TYPE couchdb_document_purges_success_total counter couchdb_document_purges_success_total 0 # TYPE couchdb_document_purges_total_total counter couchdb_document_purges_total_total 0 # TYPE couchdb_document_writes_total counter couchdb_document_writes_total 0 # TYPE couchdb_httpd_aborted_requests_total counter couchdb_httpd_aborted_requests_total 0 # TYPE couchdb_httpd_all_docs_timeouts_total counter couchdb_httpd_all_docs_timeouts_total 0 # TYPE couchdb_httpd_bulk_docs_seconds summary couchdb_httpd_bulk_docs_seconds{quantile="0.5"} 0.0 couchdb_httpd_bulk_docs_seconds{quantile="0.75"} 0.0 couchdb_httpd_bulk_docs_seconds{quantile="0.9"} 0.0 couchdb_httpd_bulk_docs_seconds{quantile="0.95"} 0.0 couchdb_httpd_bulk_docs_seconds{quantile="0.99"} 0.0 couchdb_httpd_bulk_docs_seconds{quantile="0.999"} 0.0 couchdb_httpd_bulk_docs_seconds_sum 0.0 couchdb_httpd_bulk_docs_seconds_count 0 ...remaining couchdb metrics from _stats and _system
如果指定了额外的端口配置选项,则客户端可以使用该端口调用此 API,该端口不需要身份验证。此选项默认情况下为 false
(关闭)。当选项为 true
(打开)时,3 节点集群的默认端口为 17986
、27986
、37986
。有关详细信息,请参阅 Prometheus 端点的配置。
GET /_node/_local/_prometheus HTTP/1.1
Accept: text/plain
Host: localhost:17986
1.2.14. /_node/{node-name}/_system
¶
- GET /_node/{node-name}/_system¶
_system
资源返回一个 JSON 对象,其中包含正在运行的服务器的各种系统级统计信息。该对象结构化了顶级部分,将一系列条目的统计信息整理在一起,每个单独的统计信息都易于识别,并且每个统计信息的内容都是自描述的。文字字符串
_local
充当本地节点名称的别名,因此对于所有统计信息 URL,{node-name}
可以替换为_local
,以与本地节点的统计信息进行交互。- 请求头:
Accept –
application/json
text/plain
- 响应头:
application/json
text/plain; charset=utf-8
- 状态码:
200 OK – 请求已成功完成
请求:
GET /_node/_local/_system HTTP/1.1 Accept: application/json Host: localhost:5984
响应:
HTTP/1.1 200 OK Cache-Control: must-revalidate Content-Length: 187 Content-Type: application/json Date: Sat, 10 Aug 2013 11:41:11 GMT Server: CouchDB (Erlang/OTP) { "uptime": 259, "memory": {} }
这些统计信息通常仅供 CouchDB 开发人员使用。
1.2.15. /_node/{node-name}/_restart
¶
1.2.16. /_node/{node-name}/_versions
¶
- GET /_node/{node-name}/_versions¶
_versions
资源返回一个 JSON 对象,其中包含正在运行的服务器的各种系统级信息。字面字符串
_local
用作本地节点名称的别名,因此对于所有统计信息 URL,{node-name}
可以替换为_local
,以与本地节点的信息进行交互。请求:
GET /_node/_local/_versions HTTP/1.1 Accept: application/json Host: localhost:5984
响应:
HTTP/1.1 200 OK Cache-Control: must-revalidate Content-Length: 368 Content-Type: application/json Date: Sat, 03 Sep 2022 08:12:12 GMT Server: CouchDB/3.2.2-ea382cf (Erlang OTP/25) { "javascript_engine": { "version": "91", "name": "spidermonkey" }, "erlang": { "version": "25.0.4", "supported_hashes": [ "sha", "sha224", "sha256", ] }, "collation_driver": { "name": "libicu", "library_version": "70.1", "collator_version": "153.112", "collation_algorithm_version": "14" } }
1.2.17. /_search_analyze
¶
警告
搜索端点需要一个连接到每个集群节点的正在运行的搜索插件。有关详细信息,请参阅 搜索插件安装。
版本 3.0 中的新增功能。
- POST /_search_analyze¶
测试 Lucene 分析器标记化对示例文本的结果。
- 参数:
field – 分析器类型
text – 要测试的分析器标记
- 状态码:
200 OK – 请求已成功完成
400 错误请求 – 请求主体错误(格式错误或缺少一个必填字段)
500 内部服务器错误 – 发生了服务器错误(或其他类型的错误)
请求:
POST /_search_analyze HTTP/1.1
Host: localhost:5984
Content-Type: application/json
{"analyzer":"english", "text":"running"}
响应:
{
"tokens": [
"run"
]
}
1.2.18. /_utils
¶
- GET /_utils¶
访问 CouchDB 的内置 Fauxton 管理界面。
- 响应头:
位置 – 新的 URI 位置
- 状态码:
301 永久移动 – 重定向到
GET /_utils/
1.2.19. /_up
¶
版本 2.0 中新增。
- GET /_up¶
确认服务器已启动、正在运行并准备好响应请求。如果
maintenance_mode
为true
或nolb
,则端点将返回 404 响应。- 响应头:
Content-Type – application/json
- 状态码:
响应:
HTTP/1.1 200 OK Cache-Control: must-revalidate Content-Length: 16 Content-Type: application/json Date: Sat, 17 Mar 2018 04:46:26 GMT Server: CouchDB/2.2.0-f999071ec (Erlang OTP/19) X-Couch-Request-ID: c57a3b2787 X-CouchDB-Body-Time: 0 {"status":"ok"}
1.2.20. /_uuids
¶
版本 2.0.0 中的更改。
- GET /_uuids¶
从 CouchDB 实例请求一个或多个通用唯一标识符 (UUID)。响应是一个 JSON 对象,提供 UUID 列表。
- 请求头:
Accept –
application/json
text/plain
- 查询参数:
count (number) – 要返回的 UUID 数量。默认值为
1
。
- 响应头:
application/json
text/plain; charset=utf-8
ETag – 响应哈希
- 状态码:
请求:
GET /_uuids?count=10 HTTP/1.1 Accept: application/json Host: localhost:5984
响应:
HTTP/1.1 200 OK Content-Length: 362 Content-Type: application/json Date: Sat, 10 Aug 2013 11:46:25 GMT ETag: "DGRWWQFLUDWN5MRKSLKQ425XV" Expires: Fri, 01 Jan 1990 00:00:00 GMT Pragma: no-cache Server: CouchDB (Erlang/OTP) { "uuids": [ "75480ca477454894678e22eec6002413", "75480ca477454894678e22eec600250b", "75480ca477454894678e22eec6002c41", "75480ca477454894678e22eec6003b90", "75480ca477454894678e22eec6003fca", "75480ca477454894678e22eec6004bef", "75480ca477454894678e22eec600528f", "75480ca477454894678e22eec6005e0b", "75480ca477454894678e22eec6006158", "75480ca477454894678e22eec6006161" ] }
UUID 类型由 CouchDB 配置中的 UUID algorithm
设置决定。
UUID 类型可以通过 配置 API 随时更改。例如,可以通过发送以下 HTTP 请求将 UUID 类型更改为 random
PUT http://couchdb:5984/_node/nonode@nohost/_config/uuids/algorithm HTTP/1.1
Content-Type: application/json
Accept: */*
"random"
您可以通过获取 UUID 列表来验证更改
{
"uuids" : [
"031aad7b469956cf2826fcb2a9260492",
"6ec875e15e6b385120938df18ee8e496",
"cff9e881516483911aa2f0e98949092d",
"b89d37509d39dd712546f9510d4a9271",
"2e0dbf7f6c4ad716f21938a016e4e59f"
]
}
1.2.21. /favicon.ico
¶
1.2.22. /_reshard
¶
版本 2.4 中的新增功能。
- GET /_reshard¶
返回已完成、失败、正在运行、已停止和总作业的数量,以及集群上重新分片的狀態。
- 请求头:
Accept –
application/json
- 响应头:
application/json
- 响应 JSON 对象:
state (string) –
stopped
或running
state_reason (string) –
null
或描述与状态关联的附加信息或原因的字符串completed (number) – 已完成的重新分片作业数量
failed (number) – 失败的重新分片作业数量
running (number) – 正在运行的重新分片作业数量
stopped (number) – 已停止的重新分片作业数量
total (number) – 重新分片作业的总数
- 状态码:
200 OK – 请求已成功完成
401 Unauthorized – 需要 CouchDB 服务器管理员权限
请求:
GET /_reshard HTTP/1.1 Accept: application/json Host: localhost:5984
响应:
HTTP/1.1 200 OK Content-Type: application/json { "completed": 21, "failed": 0, "running": 3, "state": "running", "state_reason": null, "stopped": 0, "total": 24 }
- GET /_reshard/state¶
返回重新分片的狀態以及有关狀態的可选信息。
- 请求头:
Accept –
application/json
- 响应头:
application/json
- 响应 JSON 对象:
state (string) –
stopped
或running
state_reason (string) – 与狀態关联的附加信息或原因
- 状态码:
200 OK – 请求已成功完成
401 Unauthorized – 需要 CouchDB 服务器管理员权限
请求:
GET /_reshard/state HTTP/1.1 Accept: application/json Host: localhost:5984
响应:
HTTP/1.1 200 OK Content-Type: application/json { "reason": null, "state": "running" }
- PUT /_reshard/state¶
更改集群上的重新分片狀態。狀態为
stopped
或running
。这将在集群的所有节点上启动和停止全局重新分片。如果有任何正在运行的作业,它们将在狀態更改为stopped
时停止。当狀態更改回running
时,这些作业将继续运行。- 请求头:
Accept –
application/json
- 响应头:
application/json
- 请求 JSON 对象:
state (string) –
stopped
或running
state_reason (string) – 描述与狀態关联的附加信息或原因的可选字符串
- 响应 JSON 对象:
ok (boolean) –
true
- 状态码:
200 OK – 请求已成功完成
400 错误请求 – 无效请求。可能是错误的或缺少的狀態名称。
401 Unauthorized – 需要 CouchDB 服务器管理员权限
请求:
PUT /_reshard/state HTTP/1.1 Accept: application/json Host: localhost:5984 { "state": "stopped", "reason": "Rebalancing in progress" }
响应:
HTTP/1.1 200 OK Content-Type: application/json { "ok": true }
- GET /_reshard/jobs¶
注意
响应的形状以及
total_rows
和offset
字段(尤其是)旨在与_scheduler/jobs
端点保持一致。- 请求头:
Accept –
application/json
- 响应头:
application/json
- 响应 JSON 对象:
jobs (list) – json 对象数组,每个重新分片作业一个。有关每个作业的字段,请参阅 /_reshard/job/{jobid} 端点。
offset (number) – 作业对象列表中的偏移量。当前硬编码为
0
。total_rows (number) – 集群上重新分片作业的总数。
- 状态码:
200 OK – 请求已成功完成
401 Unauthorized – 需要 CouchDB 服务器管理员权限
请求:
GET /_reshard/jobs HTTP/1.1 Accept: application/json
响应:
HTTP/1.1 200 OK Content-Type: application/json { "jobs": [ { "history": [ { "detail": null, "timestamp": "2019-03-28T15:28:02Z", "type": "new" }, { "detail": "initial_copy", "timestamp": "2019-03-28T15:28:02Z", "type": "running" } ], "id": "001-171d1211418996ff47bd610b1d1257fc4ca2628868def4a05e63e8f8fe50694a", "job_state": "completed", "node": "[email protected]", "source": "shards/00000000-1fffffff/d1.1553786862", "split_state": "completed", "start_time": "2019-03-28T15:28:02Z", "state_info": {}, "target": [ "shards/00000000-0fffffff/d1.1553786862", "shards/10000000-1fffffff/d1.1553786862" ], "type": "split", "update_time": "2019-03-28T15:28:08Z" } ], "offset": 0, "total_rows": 24 }
- GET /_reshard/jobs/{jobid}¶
获取有关由
jobid
标识的重新分片作业的信息。- 请求头:
Accept –
application/json
- 响应头:
application/json
- 响应 JSON 对象:
id (string) – 作业 ID。
type (string) – 目前仅实现了
split
。job_state (string) – 作业的运行狀態。可以是
new
、running
、stopped
、completed
或failed
之一。split_state (string) – 特定于分片拆分的狀態详细信息。它指示分片拆分进展到何种程度,可以是
new
、initial_copy
、topoff1
、build_indices
、topoff2
、copy_local_docs
、update_shardmap
、wait_source_close
、topoff3
、source_delete
或completed
之一。state_info (object) – 与当前狀態关联的可选附加信息。
source (string) – 对于
split
作业,这将是源分片。target (list) – 对于
split
作业,这将是两个或多个目标分片的列表。history (list) – 记录作业狀態转换历史记录的 json 对象列表。
- 状态码:
200 OK – 请求已成功完成
401 Unauthorized – 需要 CouchDB 服务器管理员权限
请求:
GET /_reshard/jobs/001-171d1211418996ff47bd610b1d1257fc4ca2628868def4a05e63e8f8fe50694a HTTP/1.1 Accept: application/json
响应:
HTTP/1.1 200 OK Content-Type: application/json { "id": "001-171d1211418996ff47bd610b1d1257fc4ca2628868def4a05e63e8f8fe50694a", "job_state": "completed", "node": "[email protected]", "source": "shards/00000000-1fffffff/d1.1553786862", "split_state": "completed", "start_time": "2019-03-28T15:28:02Z", "state_info": {}, "target": [ "shards/00000000-0fffffff/d1.1553786862", "shards/10000000-1fffffff/d1.1553786862" ], "type": "split", "update_time": "2019-03-28T15:28:08Z", "history": [ { "detail": null, "timestamp": "2019-03-28T15:28:02Z", "type": "new" }, { "detail": "initial_copy", "timestamp": "2019-03-28T15:28:02Z", "type": "running" } ] }
- POST /_reshard/jobs¶
根据请求中指定的字段,将创建一个或多个重新分片作业。响应是一个 json 数组结果。每个结果对象代表特定节点和范围的单个重新分片作业。一些响应可能成功,而另一些可能失败。成功的結果将具有
"ok": true
键和值,而失败的作业将具有"error": "{error_message}"
键和值。- 请求头:
Accept –
application/json
- 响应头:
application/json
- 请求 JSON 对象:
类型 (字符串) – 作业类型。目前仅接受
"split"
。db (字符串) – 要拆分的数据库。这与
"shard"
字段互斥。node (字符串) – 在特定节点上拆分分片。这是一个可选参数。该值应为
_membership
端点返回的节点之一。range (字符串) – 在给定范围内拆分分片副本。范围格式为
hhhhhhhh-hhhhhhhh
,其中h
是十六进制数字。使用此格式是因为这是文件系统中表示范围的方式。此参数是可选的,并且与"shard"
字段互斥。shard (字符串) – 拆分特定分片。分片应指定为
"shards/{range}/{db}.{suffix}"
。其中range
具有hhhhhhhh-hhhhhhhh
格式,db
是数据库名称,suffix
是分片(时间戳)创建后缀。error (字符串) – 如果无法创建作业,则显示错误消息。
node – 创建作业并正在运行的集群节点。
- 响应 JSON 对象:
ok (布尔值) – 如果作业创建成功,则为
true
。
- 状态码:
201 已创建 – 成功创建了一个或多个作业
400 错误请求 – 无效请求。参数验证可能失败。
401 Unauthorized – 需要 CouchDB 服务器管理员权限
404 未找到 – 未找到 Db、节点、范围或分片
请求:
POST /_reshard/jobs HTTP/1.1 Accept: application/json Content-Type: application/json { "db": "db3", "range": "80000000-ffffffff", "type": "split" }
响应:
HTTP/1.1 201 Created Content-Type: application/json [ { "id": "001-30d7848a6feeb826d5e3ea5bb7773d672af226fd34fd84a8fb1ca736285df557", "node": "[email protected]", "ok": true, "shard": "shards/80000000-ffffffff/db3.1554148353" }, { "id": "001-c2d734360b4cb3ff8b3feaccb2d787bf81ce2e773489eddd985ddd01d9de8e01", "node": "[email protected]", "ok": true, "shard": "shards/80000000-ffffffff/db3.1554148353" } ]
- DELETE /_reshard/jobs/{jobid}¶
如果作业正在运行,请停止作业,然后将其删除。
- 响应 JSON 对象:
ok (布尔值) – 如果作业成功删除,则为
true
。
- 状态码:
200 确定 – 作业已成功删除
401 Unauthorized – 需要 CouchDB 服务器管理员权限
404 未找到 – 未找到作业
请求:
DELETE /_reshard/jobs/001-171d1211418996ff47bd610b1d1257fc4ca2628868def4a05e63e8f8fe50694a HTTP/1.1
响应:
HTTP/1.1 200 OK Content-Type: application/json { "ok": true }
- GET /_reshard/jobs/{jobid}/state¶
返回由
jobid
标识的重新分片作业的运行状态。- 请求头:
Accept –
application/json
- 响应头:
application/json
- 请求 JSON 对象:
state (字符串) –
new
、running
、stopped
、completed
或failed
之一。state_reason (字符串) – 与状态关联的附加信息
- 状态码:
200 OK – 请求已成功完成
401 Unauthorized – 需要 CouchDB 服务器管理员权限
404 未找到 – 未找到作业
请求:
GET /_reshard/jobs/001-b3da04f969bbd682faaab5a6c373705cbcca23f732c386bb1a608cfbcfe9faff/state HTTP/1.1 Accept: application/json Host: localhost:5984
响应:
HTTP/1.1 200 OK Content-Type: application/json { "reason": null, "state": "running" }
- PUT /_reshard/jobs/{jobid}/state¶
更改由
jobid
标识的特定重新分片作业的状态。状态可以从stopped
更改为running
,或从running
更改为stopped
。如果通过此 API 停止单个作业,即使全局重新分片状态从stopped
切换到running
,该作业也将保持stopped
状态。如果作业已完成,其状态将保持completed
状态。- 请求头:
Accept –
application/json
- 响应头:
application/json
- 请求 JSON 对象:
state (string) –
stopped
或running
state_reason (string) – 描述与狀態关联的附加信息或原因的可选字符串
- 响应 JSON 对象:
ok (boolean) –
true
- 状态码:
200 OK – 请求已成功完成
400 错误请求 – 无效请求。可能是错误的状态名称,例如。
401 Unauthorized – 需要 CouchDB 服务器管理员权限
404 未找到 – 未找到作业
请求:
PUT /_reshard/state/001-b3da04f969bbd682faaab5a6c373705cbcca23f732c386bb1a608cfbcfe9faff/state HTTP/1.1 Accept: application/json Host: localhost:5984 { "state": "stopped", "reason": "Rebalancing in progress" }
响应:
HTTP/1.1 200 OK Content-Type: application/json { "ok": true }