
如果你使用 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 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
本镜像整合了 TimescaleDB(基于 PostgreSQL 的时序数据库)和 Patroni(PostgreSQL 高可用解决方案),旨在提供开箱即用的高可用时序数据库部署方案。通过 Patroni 的自动故障转移与主从复制能力,结合 TimescaleDB 对时序数据的优化特性,实现时序数据存储的高可用性、可靠性与性能优化。
4.2.1 启动命令
bashdocker run -d \ --name timescaledb-patroni-test \ -p 5432:5432 \ -e POSTGRES_PASSWORD=StrongPassword123 \ -e REPLICATION_PASSWORD=ReplPassword456 \ -e PATRONI_SCOPE=timescale-cluster \ -e PATRONI_MODE=standalone \ -v timescaledb-data:/var/lib/postgresql/data \ docker.xuanyuan.run/timescale/timescaledb-ha:latest
4.2.2 参数说明
-p 5432:5432:映射 PostgreSQL 默认端口-v timescaledb-data:/var/lib/postgresql/data:持久化存储数据目录POSTGRES_PASSWORD:数据库管理员(postgres 用户)密码REPLICATION_PASSWORD:复制用户(replicator)密码(用于主从同步)PATRONI_SCOPE:Patroni 集群标识(同一集群需一致)PATRONI_MODE=standalone:单节点模式(非集群)4.3.1 前置条件
bashdocker run -d \ --name etcd \ -p 2379:2379 \ -e ETCD_LISTEN_CLIENT_URLS=http://0.0.0.0:2379 \ -e ETCD_ADVERTISE_CLIENT_URLS=http://etcd:2379 \ ***-quay.xuanyuan.run/coreos/etcd:v3.5.9
4.3.2 Docker Compose 集群配置(主从架构)
创建 docker-compose.yml:
yamlversion: '3.8' services: # 主节点 patroni-master: image: docker.xuanyuan.run/timescale/timescaledb-ha:latest container_name: patroni-master ports: - "5432:5432" environment: - POSTGRES_PASSWORD=StrongPassword123 - REPLICATION_PASSWORD=ReplPassword456 - PATRONI_SCOPE=timescale-cluster - PATRONI_MODE=master - PATRONI_ETCD_HOSTS=etcd:2379 - PATRONI_RETRY_TIMEOUT=10 - PATRONI_INITIAL_CLUSTER_SIZE=2 - TIMESCALEDB_TELEMETRY=off # 禁用遥测(可选) volumes: - master-data:/var/lib/postgresql/data depends_on: - etcd networks: - tsdb-network # 从节点 patroni-replica: image: docker.xuanyuan.run/timescale/timescaledb-ha:latest container_name: patroni-replica ports: - "5433:5432" # 避免端口冲突 environment: - POSTGRES_PASSWORD=StrongPassword123 - REPLICATION_PASSWORD=ReplPassword456 - PATRONI_SCOPE=timescale-cluster - PATRONI_MODE=replica - PATRONI_ETCD_HOSTS=etcd:2379 - PATRONI_RETRY_TIMEOUT=10 - TIMESCALEDB_TELEMETRY=off volumes: - replica-data:/var/lib/postgresql/data depends_on: - etcd networks: - tsdb-network # etcd 配置存储 etcd: image: ***-quay.xuanyuan.run/coreos/etcd:v3.5.9 container_name: etcd ports: - "2379:2379" environment: - ETCD_LISTEN_CLIENT_URLS=http://0.0.0.0:2379 - ETCD_ADVERTISE_CLIENT_URLS=http://etcd:2379 volumes: - etcd-data:/default.etcd networks: - tsdb-network volumes: master-data: replica-data: etcd-data: networks: tsdb-network: driver: bridge
4.3.3 启动集群
bashdocker-compose up -d
4.4.1 Patroni 高可用配置(环境变量)
| 参数名 | 说明 | 默认值 |
|---|---|---|
PATRONI_SCOPE | 集群唯一标识(所有节点需一致) | timescale |
PATRONI_MODE | 节点角色(master/replica/standalone) | standalone |
PATRONI_ETCD_HOSTS | etcd 集群地址(格式:host:port) | localhost:2379 |
PATRONI_RETRY_TIMEOUT | 故障转移重试间隔(秒) | 10 |
PATRONI_INITIAL_CLUSTER_SIZE | 初始集群节点数(用于自动发现) | 1 |
PATRONI_POSTGRESQL_DATA_DIR | PostgreSQL 数据目录 | /var/lib/postgresql/data |
4.4.2 TimescaleDB/PostgreSQL 配置(环境变量)
| 参数名 | 说明 | 默认值 |
|---|---|---|
POSTGRES_PASSWORD | postgres 用户密码(必填) | - |
REPLICATION_PASSWORD | 复制用户(replicator)密码(必填) | - |
POSTGRES_DB | 初始数据库名称 | postgres |
MAX_CONNECTIONS | 最大连接数 | 100 |
SHARED_BUFFERS | 共享内存缓冲区(建议物理内存 1/4) | 128MB |
TIMESCALEDB_AUTO_CREATE_HYPERTABLES | 是否自动创建时序表 | on |
模拟主节点故障:
bashdocker stop patroni-master
观察从节点自动提升: Patroni 会通过 etcd 检测主节点心跳丢失(默认 30 秒内),自动将从节点提升为新主。可通过以下命令验证新主节点:
bash# 进入从节点容器 docker exec -it patroni-replica bash # 查看 Patroni 状态 patronictl -c /etc/patroni.yml list
恢复原主节点: 重启原主节点后,Patroni 会自动将其作为从节点重新加入集群,同步新主数据:
bashdocker start patroni-master
/var/lib/postgresql/data,避免容器重启导致数据丢失。shared_buffers、work_mem 等参数,建议参考 PostgreSQL 性能调优最佳实践。您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
来自真实用户的反馈,见证轩辕镜像的优质服务
以下是 timescale/timescaledb-ha 相关的常用 Docker 镜像,适用于 不同场景 等不同场景: