如何通过VPN实现CouchDB本地数据库到远程服务器的持续复制?
实现跨VPN的CouchDB持续复制方案
刚好之前帮团队处理过类似的跨VPN CouchDB持续复制需求,给你整理几个实用的方案,一步步来就行:
先确认几个前提条件
- 确保VPN连接正常时,你能访问本地的
reviews数据库:可以用curl http://localhost:5984/reviews测试,能返回数据库基本信息就没问题 - 验证VPN状态下本地机器能访问外部服务器的CouchDB:比如执行
curl http://<外部CouchDB地址>:<外部端口>/,能看到CouchDB的欢迎信息就OK - 两边的CouchDB都要开启复制功能(默认是开启的,要是不确定,检查配置文件里的
[replicator]段,确保enable=true)
方案一:用CouchDB内置持续复制(最推荐,原生稳定)
这是CouchDB自带的复制机制,配置好后会自动后台运行,断连后恢复VPN还能自动续上:
编写复制任务配置
新建一个JSON文件(比如reviews-replication.json),内容如下:{ "_id": "reviews-to-external-continuous", "source": "http://<本地CouchDB用户名>:<本地密码>@localhost:5984/reviews", "target": "http://<外部CouchDB用户名>:<外部密码>@<外部CouchDB地址>:<外部端口>/reviews", "continuous": true, "create_target": true }几个关键点说明:
_id是这个复制任务的唯一标识,后续要修改或删除任务都靠它create_target设为true的话,会自动在外部服务器创建reviews数据库(如果还没有的话)- 如果本地CouchDB没开认证,
source可以简化成http://localhost:5984/reviews
提交复制任务到CouchDB
保持VPN连接,用curl把配置提交到本地CouchDB的_replicator数据库:curl -X PUT http://localhost:5984/_replicator/reviews-to-external-continuous \ -H "Content-Type: application/json" \ -d @reviews-replication.json检查复制任务状态
执行下面的命令查看任务是否正常运行:curl http://localhost:5984/_replicator/reviews-to-external-continuous要是返回结果里的
_replication_state字段是running,就说明持续复制已经在工作了。
方案二:用couchdb-replicator命令行工具(适合需要灵活控制的场景)
如果原生API满足不了你的定制需求,可以用官方的命令行工具来管理复制:
先安装工具
用npm全局安装:npm install -g couchdb-replicator启动持续复制
VPN连接状态下,运行下面的命令:couchdb-replicator \ --source http://localhost:5984/reviews \ --target http://<外部CouchDB用户名>:<外部密码>@<外部CouchDB地址>:<外部端口>/reviews \ --continuous这个命令会一直前台运行,你可以把它做成系统服务(比如Linux的systemd、Windows的服务),这样VPN恢复后能自动重启复制任务。
几个重要注意事项
- VPN断连后的恢复:用内置复制任务的话,VPN重新连接后会自动继续同步,不用手动干预;命令行工具的话,做成系统服务也能自动重启
- 密码安全:别在配置文件或命令行里明文写密码!推荐两边都创建专用的复制用户,或者用环境变量来传递密码
- 大数据库优化:如果
reviews数据量很大,建议先做一次全量复制(去掉continuous参数),完成后再开启持续增量复制,避免初始同步占太多带宽 - 监控复制进度:可以通过CouchDB的
_active_tasks端点查看实时复制状态:curl http://localhost:5984/_active_tasks
内容的提问来源于stack exchange,提问作者JoCuTo
相关产品推荐
相关产品推荐

