timescale/timescaledb-ha本镜像整合了 TimescaleDB(基于 PostgreSQL 的时序数据库)和 Patroni(PostgreSQL 高可用解决方案),旨在提供开箱即用的高可用时序数据库部署方案。通过 Patroni 的自动故障转移与主从复制能力,结合 TimescaleDB 对时序数据的优化特性,实现时序数据存储的高可用性、可靠性与性能优化。
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 \ timescale/timescaledb-ha:latest
-p 5432:5432:映射 PostgreSQL 默认端口-v timescaledb-data:/var/lib/postgresql/data:持久化存储数据目录POSTGRES_PASSWORD:数据库管理员(postgres 用户)密码REPLICATION_PASSWORD:复制用户(replicator)密码(用于主从同步)PATRONI_SCOPE:Patroni 集群标识(同一集群需一致)PATRONI_MODE=standalone:单节点模式(非集群)bashdocker run -d \ --name etcd \ -p 2379:2379 \ -e ETCD_LISTEN_CLIENT_URLS=[***] \ -e ETCD_ADVERTISE_CLIENT_URLS=[***] \ quay.io/coreos/etcd:v3.5.9
创建 docker-compose.yml:
yamlversion: '3.8' services: # 主节点 patroni-master: image: 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: 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.io/coreos/etcd:v3.5.9 container_name: etcd ports: - "2379:2379" environment: - ETCD_LISTEN_CLIENT_URLS=[***] - ETCD_ADVERTISE_CLIENT_URLS=[***] volumes: - etcd-data:/default.etcd networks: - tsdb-network volumes: master-data: replica-data: etcd-data: networks: tsdb-network: driver: bridge
bashdocker-compose up -d
| 参数名 | 说明 | 默认值 |
|---|---|---|
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 |
| 参数名 | 说明 | 默认值 |
|---|---|---|
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 性能调优最佳实践。
manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务