
如果你使用 DeepSeek、元宝 AI、Copilot、ChatGPT 等 AI 工具,协助配置轩辕镜像、编写 docker pull 命令、修改 Docker Compose 镜像地址、配置镜像加速、排查镜像拉取失败、分析报错日志等问题,请先让 AI 阅读并遵守轩辕镜像的规则文档。
只需在 AI 对话中先发送下面这句话即可:
请先完整阅读并严格遵守以下文档中的全部规则与要求:
https://xuanyuan.cloud/agents.md
在未充分阅读并理解该文档前,不要生成任何命令、配置、修改建议、故障排查方案或技术回答。后续所有输出都必须严格以该文档中的规范为最高优先级执行。查看 agents.md 用法指南与完整示范。国内用户首推 元宝 AI、DeepSeek 的深度思考模式,不推荐豆包 AI;Cursor 等编辑器可在对话 @ 该链接,或加入 User Rules。 若 AI 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
oplogtoredis 是一个监听Mongo服务器oplog(操作日志)并将更改发布到Redis的工具,专为配合 https://github.com/cult-of-coders/redis-oplog 设计。与redis-oplog默认行为(要求所有写入Mongo的操作需手动发布Redis通知)不同,结合oplogtoredis与redis-oplog的externalRedisPublisher选项,可确保所有写入Mongo的更改自动发布到Redis。
该项目目前稳定,已在Tulip的生产环境中使用。在生产环境使用前,请查看以下已知限制,并在 staging 环境中测试。
使用externalRedisPublisher选项时,redis-oplog的部分功能暂不支持,因此与oplogtoredis配合使用时这些功能无法工作。这些功能属于 https://github.com/cult-of-coders/redis-oplog/blob/master/docs/finetuning.md%E3%80%82%E8%8B%A5%E4%B8%8D%E4%BD%BF%E7%94%A8%E8%BF%99%E4%BA%9B%E7%B2%BE%E7%BB%86%E8%B0%83%E4%BC%98%E9%80%89%E9%A1%B9%EF%BC%8C%E5%88%99%E4%B8%8D%E4%BC%9A%E9%81%87%E5%88%B0%E4%BB%A5%E4%B8%8B%E9%99%90%E5%88%B6%EF%BC%9A
要将其与redis-oplog配合使用,需配置redis-oplog:
externalRedisPublisher: trueglobalRedisPrefix: "<Mongo数据库名称>."例如,若Meteor的MONGO_URL为mongodb://mymongoserver/mydb,配置如下:
json{ "redisOplog": { "redis": { "port": 6379, "host": "myredisserver" }, "globalRedisPrefix": "mydb.", "externalRedisPublisher": true } }
可通过go build .从源码构建oplogtoredis,生成静态链接二进制文件运行。也可使用https://hub.docker.com/r/tulip/oplogtoredis/tags/%E3%80%82
必须设置以下环境变量:
OTR_MONGO_URL:必填。用于读取oplog的Mongo URL,需指向Mongo服务器的local数据库,与Meteor服务器的MONGO_OPLOG_URL一致。
OTR_REDIS_URL:必填。用于发布更新的Redis URL。通过TLS连接时,URL协议需指定为rediss://,否则使用redis://。
可选环境变量(配置日志级别):
OTR_LOG_DEBUG:可选。启用详细的调试日志,详见lib/log/main.go。
OTR_LOG_QUIET:不输出任何日志,适用于单元测试。
其他可用于调优性能和可靠性的环境变量,详见配置包文档。
使用Docker运行oplogtoredis:
bashdocker run -d \ -e OTR_MONGO_URL="mongodb://mymongoserver:27017/local?replicaSet=rs0" \ -e OTR_REDIS_URL="redis://myredisserver:6379" \ --name oplogtoredis \ tulip/oplogtoredis
oplogtoredis包含多项功能,支持在关键生产场景中使用。
oplogtoredis使用Redis进行消息去重,因此可安全运行多个实例(建议2-3个),以确保部分故障或崩溃时的可用性。多个实例会处理相同的oplog消息并发送到Redis,通过Lua脚本去重。注意:实例数量增加会线性增加Mongo和Redis的负载。
oplogtoredis使用Redis记录最后处理的消息。启动时会检查上次处理位置,并从该时间戳恢复监听oplog(不会回溯过久,避免过载Redis或Meteor服务器)。调优细节详见配置包文档,确保即使所有实例短暂下线,系统仍能正常工作。
oplogtoredis暴露HTTP服务器用于监控,默认监听0.0.0.0:9000,可通过环境变量OTR_HTTP_SERVER_ADDR修改。
健康检查端点:/healthz。检查Mongo和Redis连接,返回200。若请求超时或返回非200状态超过10-15秒,需重启程序(可通过Kubernetes存活探针、Icinga健康检查等实现)。
Prometheus指标端点:/metrics。Prometheus可抓取该端点收集指标。特别地,若指标otr_redispub_processed_messages(标签status=sent)的值低于Mongo写入量,可能表明oplogtoredis存在问题。
默认情况下,oplogtoredis以JSON格式输出信息、警告和错误日志,便于结构化日志系统处理。调试时可设置OTR_LOG_DEBUG=true,输出更详细的人类可读日志。
可使用go build构建和测试oplogtoredis,或使用docker-compose环境(docker-compose up),该环境包含Mongo、Redis和oplogtoredis:
oplogtoredis:运行oplogtoredis的容器,源代码变更时自动重载(通过https://github.com/pilu/fresh%EF%BC%89%E3%80%82
mongo:MongoDB服务器,其他容器使用dev数据库。通过docker-compose exec mongo mongo dev连接。
redis:Redis服务器。通过docker-compose exec redis redis-cli连接,使用monitor命令查看发布内容。
可选通过docker-compose -f docker-compose.yml -f docker-compose.meteor.yml启动两个Meteor应用服务器,运行简单待办应用,使用redis-oplog并连接相同的Mongo和Redis。首次运行需5-10分钟(Meteor初始下载/构建),后续启动更快。
额外的docker-compose.meteor.yml包含:
meteor1和meteor2:两个Meteor服务器,提供testapp/应用,分别监听localhost:9091和localhost:9092。正常工作时,一个服务器的客户端更改(或直接Mongo修改)应实时同步到另一个服务器的客户端。oplogtoredis有多种测试工具和套件,Travis会在每次提交时运行。本地可通过scripts/runAllTests.sh运行所有测试。
使用gometalinter检测风格和正确性问题,运行scripts/runLint.sh。需安装gometalinter及其依赖:go get github.com/alecthomas/gometalinter; gometalinter --install。
使用标准go test工具,通过scripts/runUnitTests.sh包装,设置超时并启用竞态检测器。
测试生产就绪的oplogtoredis Docker构建,通过docker-compose运行生产容器、Mongo和Redis,测试整个系统行为。在不同Mongo和Redis版本下,启用/禁用竞态检测器运行。通过scripts/runIntegrationAcceptance.sh运行(耗时较长),scripts/runIntegrationAcceptanceSingle.sh可快速单配置运行。
观察oplogtoredis在故障条件下的行为(如崩溃重启、Mongo/Redis临时不可用)。使用编译后的二进制而非Docker镜像,在单个Docker容器内由测试工具控制启停组件。通过scripts/runIntegrationFaultInjection.sh运行。
通过docker-compose启动oplogtoredis、Mongo、Redis和两个Meteor服务器(运行./testapp应用),通过websockets/DDP连接Meteor服务器,观察网络流量以验证oplogtoredis与redis-oplog配合是否正常。通过scripts/runIntegrationMeteor.sh运行。
环境类似验收测试,但仅针对单个Mongo和Redis版本,禁用竞态检测器。运行两个测试:批量写入Mongo(不等待通知)和批量写入并等待Redis通知。两者差异为oplogtoredis的延迟开销上限,超过35%则测试失败。通过scripts/runIntegrationPerformance.sh运行。
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
来自真实用户的反馈,见证轩辕镜像的优质服务