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 上已弃用的功能。我们强烈建议您不要在生产环境中使用此功能。如果您需要更多信息,请联系我们

  1. 创建 Docker 容器

    docker network create timescaledb-net
  2. 启动 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
  3. 在 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

  1. 启动 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
  2. 启动备份

    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 和数据库。

  1. 创建 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
  2. 从基础备份中恢复数据库文件

    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
  3. 重新创建配置文件。这些文件已从原始数据库实例中备份。

    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.conf
    docker 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.conf
    docker 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'
  4. 创建一个 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 片段。然后您可以重新启动数据库,并检查恢复是否成功。

  1. 重新启动 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
  2. 重新启动 TimescaleDB Docker 容器

    docker start timescaledb-recovered
  3. 验证数据库是否成功启动并恢复

    docker logs timescaledb-recovered

    如果在此阶段日志中看到一些归档恢复错误,请不要担心。这是因为只有当归档中找不到更多文件时,恢复才算完全完成。有关更多信息,请参阅 PostgreSQL 关于 持续归档 的文档。

关键词

在此页面上发现问题?报告问题 或在 GitHub 上编辑此页面