Timescale Cloud:性能、扩展、企业级
自托管产品
MST
在容器化环境中运行 TimescaleDB 时,您可以使用 持续归档 和 WAL-E
容器。这些容器有时被称为 sidecar(边车),因为它们与主容器并行运行。一个 WAL-E sidecar 镜像
既适用于 TimescaleDB,也适用于常规 PostgreSQL。在本节中,您可以使用名为
timescaledb
的主 TimescaleDB 容器和名为 wale
的 WAL-E sidecar,将归档设置到本地文件系统。当您准备在生产部署中实施此功能时,可以根据此处的说明将其调整为针对 AWS S3 等云提供商进行归档,并在 Kubernetes 等编排框架中运行。
在 Timescale 上免费试用
Timescale 是一个完全托管的服务,具备自动备份和恢复、带复制功能的高可用性、无缝扩展和调整大小等众多功能。您可以免费试用 Timescale 三十天。
为了让 TimescaleDB 使用 WAL-E sidecar 进行归档,这两个容器需要共享一个网络。为此,您需要创建一个 Docker 网络,然后使用新创建的网络启动已启用归档的 TimescaleDB。启动 TimescaleDB 时,您需要明确设置预写日志 (POSTGRES_INITDB_WALDIR
) 和数据目录 (PGDATA
) 的位置,以便可以与 WAL-E sidecar 共享它们。两者都必须驻留在 Docker 卷中,默认情况下会为 /var/lib/postgresql/data
创建一个卷。启动 TimescaleDB 后,您可以登录并创建表和数据。
弃用
本节描述了 Timescale 上已弃用的功能。我们强烈建议您不要在生产环境中使用此功能。如果您需要更多信息,请联系我们。
创建 Docker 容器
docker network create timescaledb-net启动 TimescaleDB,并开启归档
docker run \--name timescaledb \--network timescaledb-net \-e POSTGRES_PASSWORD=insecure \-e POSTGRES_INITDB_WALDIR=/var/lib/postgresql/data/pg_wal \-e PGDATA=/var/lib/postgresql/data/pg_data \timescale/timescaledb:latest-pg10 postgres \-cwal_level=archive \-carchive_mode=on \-carchive_command="/usr/bin/wget wale/wal-push/%f -O -" \-carchive_timeout=600 \-ccheckpoint_timeout=700 \-cmax_wal_senders=1在 Docker 中运行 TimescaleDB
docker exec -it timescaledb psql -U postgres
WAL-E Docker 镜像 运行一个 Web 端点,通过 HTTP API 接收 WAL-E 命令。这允许 PostgreSQL 通过内部网络与 WAL-E sidecar 通信以触发归档。您也可以直接使用容器来调用 WAL-E。该 Docker 镜像接受标准的 WAL-E 环境变量来配置归档后端,因此您可以从 AWS S3 等服务发出命令。有关配置信息,请参阅官方 WAL-E 文档
。
为了使 WAL-E Docker 镜像能够执行归档,它需要使用与 TimescaleDB 容器相同的网络和数据卷。它还需要知道预写日志和数据目录的位置。您可以在启动 WAL-E 时将所有这些信息传递给它。在此示例中,WAL-E 镜像在 timescaledb-net
内部网络的 80 端口监听命令,并将备份写入 Docker 主机上的 ~/backups
。
启动 WAL-E 容器,并提供容器所需的信息。在此示例中,容器名为
timescaledb-wale
docker run \--name wale \--network timescaledb-net \--volumes-from timescaledb \-v ~/backups:/backups \-e WALE_LOG_DESTINATION=stderr \-e PGWAL=/var/lib/postgresql/data/pg_wal \-e PGDATA=/var/lib/postgresql/data/pg_data \-e PGHOST=timescaledb \-e PGPASSWORD=insecure \-e PGUSER=postgres \-e WALE_FILE_PREFIX=file://localhost/backups \timescale/timescaledb-wale:latest启动备份
docker exec wale wal-e backup-push /var/lib/postgresql/data/pg_data或者,您可以使用 sidecar 的 HTTP 端点启动备份。这需要通过将 sidecar 的 80 端口映射到开放端口,从而在 Docker 主机上公开该端口。在此示例中,它映射到 8080 端口。
curl http://localhost:8080/backup-push
您应该每天定期进行基础备份,以最大程度地减少 WAL-E 重放的数量,并加快恢复速度。要进行新的基础备份,请手动或按计划重新触发基础备份,如这里所示。如果您在 Kubernetes 上运行 TimescaleDB,则内置支持调度 cron 作业,这些作业可以使用 WAL-E 容器的 HTTP API 调用基础备份。
要从备份归档中恢复数据库实例,请创建一个新的 TimescaleDB 容器,并从基础备份中恢复数据库和配置文件。然后您可以重新启动 sidecar 和数据库。
创建 Docker 容器
docker create \--name timescaledb-recovered \--network timescaledb-net \-e POSTGRES_PASSWORD=insecure \-e POSTGRES_INITDB_WALDIR=/var/lib/postgresql/data/pg_wal \-e PGDATA=/var/lib/postgresql/data/pg_data \timescale/timescaledb:latest-pg10 postgres从基础备份中恢复数据库文件
docker run -it --rm \-v ~/backups:/backups \--volumes-from timescaledb-recovered \-e WALE_LOG_DESTINATION=stderr \-e WALE_FILE_PREFIX=file://localhost/backups \timescale/timescaledb-wale:latest \wal-e \backup-fetch /var/lib/postgresql/data/pg_data LATEST重新创建配置文件。这些文件已从原始数据库实例中备份。
docker run -it --rm \--volumes-from timescaledb-recovered \timescale/timescaledb:latest-pg10 \cp /usr/local/share/postgresql/pg_ident.conf.sample /var/lib/postgresql/data/pg_data/pg_ident.confdocker run -it --rm \--volumes-from timescaledb-recovered \timescale/timescaledb:latest-pg10 \cp /usr/local/share/postgresql/postgresql.conf.sample /var/lib/postgresql/data/pg_data/postgresql.confdocker run -it --rm \--volumes-from timescaledb-recovered \timescale/timescaledb:latest-pg10 \sh -c 'echo "local all postgres trust" > /var/lib/postgresql/data/pg_data/pg_hba.conf'创建一个
recovery.conf
文件,告诉 PostgreSQL 如何恢复docker run -it --rm \--volumes-from timescaledb-recovered \timescale/timescaledb:latest-pg10 \sh -c 'echo "restore_command='\''/usr/bin/wget wale/wal-fetch/%f -O -'\''" > /var/lib/postgresql/data/pg_data/recovery.conf'
恢复数据和配置文件并创建恢复配置文件后,您可以重新启动 sidecar。您可能需要先删除旧的 sidecar。重新启动 sidecar 后,它会重放基础备份中可能缺失的最后一个 WAL 片段。然后您可以重新启动数据库,并检查恢复是否成功。
重新启动 WAL-E sidecar
docker run \--name wale \--network timescaledb-net \-v ~/backups:/backups \--volumes-from timescaledb-recovered \-e WALE_LOG_DESTINATION=stderr \-e PGWAL=/var/lib/postgresql/data/pg_wal \-e PGDATA=/var/lib/postgresql/data/pg_data \-e PGHOST=timescaledb \-e PGPASSWORD=insecure \-e PGUSER=postgres \-e WALE_FILE_PREFIX=file://localhost/backups \timescale/timescaledb-wale:latest重新启动 TimescaleDB Docker 容器
docker start timescaledb-recovered验证数据库是否成功启动并恢复
docker logs timescaledb-recovered如果在此阶段日志中看到一些归档恢复错误,请不要担心。这是因为只有当归档中找不到更多文件时,恢复才算完全完成。有关更多信息,请参阅 PostgreSQL 关于 持续归档
的文档。
关键词