备份、加载和恢复CouchDB集群
项目描述
创建一个正在运行的CouchDB节点的存档,保存CouchDB文件 data/.shards、data/_dbs.couch 和 data/shards,顺序如下。为了允许备份正在运行的CouchDB,在创建存档之前会复制文件。
将CouchDB节点的存档恢复到新的CouchDB。新的CouchDB可以是一个由多个节点组成的集群。在使用Couchcopy之前,应该已经完成了新的CouchDB配置,但是所有现有数据将被删除。在恢复过程中,CouchDB将在每个集群节点上停止并重新启动。
限制
至少测试过CouchDB 3.1.1和3.3.3。
为了恢复存档,Couchcopy需要停止和启动CouchDB。它假设CouchDB由systemd控制。如果您不使用systemd,可以更改参数 --couchdb-start 和 --couchdb-stop。
您的CouchDB n 值应高于或等于您的CouchDB集群中的节点数。否则,从一个节点保存的碎片不足以保存和恢复所有数据库。有关副本和节点的更多详细信息,请参阅CouchDB文档。
每个数据库的碎片数,即 q 的值,应该与源CouchDB和目标CouchDB相同。否则,tree /data/shards 将不同。
Couchcopy 假设您有对 CouchDB 数据目录的读写权限。如果没有,可以尝试使用 --use-sudo 选项。
开始使用
安装 Couchcopy
pip install --user couchcopy
从机器 old-server(CouchDB 数据在 /var/lib/couchdb)备份到 backup.tar.gz
couchcopy backup old-server,/var/lib/couchdb backup.tar.gz
将备份 backup.tar.gz 恢复到3节点 CouchDB 集群,机器可通过 SSH 访问 cluster_vm1、cluster_vm2、cluster_vm3
couchcopy restore backup.tar.gz admin:password@cluster_vm1,/var/lib/couchdb \
admin:password@cluster_vm2,/var/lib/couchdb \
admin:password@cluster_vm3,/var/lib/couchdb
通过启动 CouchDB 实例快速访问备份中的数据
couchcopy load backup.tar.gz
通过预配置 CouchDB 元数据,提高 couchcopy load 加载时间,因此不需要执行 Updating CouchDB metadata... 步骤
couchcopy unbrand slow_backup.tar.gz quick_backup.tar.gz
更多选项
couchcopy -h
couchcopy backup -h
couchcopy unbrand -h
couchcopy load -h
couchcopy restore -h
在 Fedora 上,可以使用以下命令安装和配置 CouchDB
sudo dnf copr enable -y adrienverge/couchdb
sudo dnf install couchdb
sudo sh -c 'echo "admin = password" >> /etc/couchdb/local.ini'
sudo systemctl restart couchdb
如果您与远程机器一起工作,CouchDB 需要监听每台机器上的远程 IP。您可以使用以下命令启用它(出于安全考虑,之后应将其禁用)
sudo sed -i 's/;bind_address = 127.0.0.1/bind_address = 0.0.0.0/g' /etc/couchdb/local.ini
实现细节
在恢复过程中,如果新 CouchDB 节点的名称与旧 CouchDB 不同,则使用 CouchDB /_node/_local/_dbs 端点更新节点名称。请参阅 CouchDB /_node/_local/_dbs 端点文档。
在恢复过程中,Couchcopy 首先更新一个 CouchDB 节点的元数据(即节点名称列表),然后允许 CouchDB 本身将元数据同步到其他节点。所有节点的同步完成后,Couchcopy 退出,使用非官方的 CouchDB /_dbs 端点来监控 CouchDB 节点的同步。如果您想跳过这部分,例如,当出现以下日志跟踪时可以安全退出 Couchcopy [等待 CouchDB 集群 同步...]。对于有 10^5 个数据库的 CouchDB,更新第一个节点的元数据需要 35 分钟,然后将元数据同步到其他节点需要 6 分钟。对于只有 100 个数据库的 CouchDB,这两个操作几乎是瞬时的。
开发者说明
为了加快 CouchDB 节点的同步,可以执行以下操作
在同步期间禁用压缩守护进程(对于 10^5 个数据库,节点同步时间从 6 分钟缩短到 4 分钟)。
在每个机器上复制保存的 _dbs.couch,但这听起来很危险,最好让 CouchDB 自己重建这些文件(对于 10^5 个数据库,节点同步时间从 6 分钟缩短到 0 秒)。
在恢复过程中,机器磁盘 IOPS 消耗约为 1200 IOPS。
有时,节点同步所需的时间不是 10^5 个数据库的 6 分钟,而是超过 3 小时。我无法找到原因或可靠地消除这种不良性能。我建议使用同一本地网络上的快速机器,并禁用压缩。
有关 CouchDB 的有趣讨论
在备份恢复后对节点重命名的问题
关于备份恢复的 CouchDB 集群内部回填
关于节点重命名速度和备份可行性的未解答问题
构建和发布
python setup.py sdist
twine upload dist/*
许可协议
本程序依据 GNU 通用公共许可证版本 3 许可。
项目详情
couchcopy-0.2.4.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | cd6d7ddd47b79133f4cca9bdc610afcbd489785f77a2500d3e72bde0b8779d58 |
|
MD5 | 5042e08f7df7fdcb08313157fe31bf6a |
|
BLAKE2b-256 | e01c4b79c8c9f0d7281af06afe303349471563ca1aad8f65854ce7b33cdbb892 |