PostgreSQL复制管理工具:OmniPITR与repmgr详解
立即解锁
发布时间: 2025-08-21 02:23:06 阅读量: 1 订阅数: 5 


PostgreSQL高可用性架构与优化实践
# PostgreSQL 复制管理工具:OmniPITR 与 repmgr 详解
在 PostgreSQL 数据库的管理中,复制管理工具起着至关重要的作用。它们能够帮助我们实现数据备份、恢复以及高可用性集群的维护。本文将详细介绍两种常用的复制管理工具:OmniPITR 和 repmgr,包括它们的安装、配置以及使用方法。
## 1. OmniPITR 的安装与配置
### 1.1 安装 OmniPITR
我们将使用两台服务器进行操作,备份服务器名为 `pg-backup`,主 PostgreSQL 服务器名为 `pg-primary`。请确保拥有 `postgres` 系统用户的密码。
以下是在 `pg-backup` 和 `pg-primary` 上安装 OmniPITR 的步骤:
1. 使用 `pgxn` 工具下载 OmniPITR:
```bash
pgxn download omnipitr
```
2. 以具有 root 权限的用户身份解压并移动 OmniPITR 文件:
```bash
unzip omnipitr-1.3.3.zip
cd omnipitr-1.3.3
sudo cp bin/* /usr/local/bin
sudo cp -R lib/OmniPITR /usr/local/lib
sudo cp -R doc /usr/local
```
3. 检查 OmniPITR 的安装情况:
```bash
sanity-check.sh
```
4. 在 `pg-primary` 上以 `postgres` 用户身份生成 RSA 密钥对并传输到 `pg-backup`:
```bash
ssh-keygen -t rsa -N ''
ssh-copy-id postgres@pg-backup
```
5. 在 `pg-backup` 上以 `postgres` 用户身份生成 RSA 密钥对并传输到 `pg-primary`:
```bash
ssh-keygen -t rsa -N ''
ssh-copy-id postgres@pg-primary
```
### 1.2 OmniPITR 工作原理
OmniPITR 是一套纯命令行工具,其作者没有创建一个合适的安装过程。我们首先从 PGXN 下载最新的 `omnipitr` 包,下载参数只是将指定的包检索并保存到本地目录。
将存档文件保存到本地后,我们开始提取其内容并进入生成的目录。OmniPITR 本身是一组位于 `bin/` 目录中的工具,我们将这些文件移动到 `/usr/local/bin` 以便于调用。由于 OmniPITR 的编写方式,它会在 `bin/` 目录的同一级别搜索 `doc/` 和 `lib/` 目录。因此,我们也将这些目录的内容复制到 `/usr/local`。
`doc/` 目录很重要,因为 OmniPITR 没有传统的手册页,查看每个命令的帮助主题的唯一方法是使用 `--help` 或 `--man` 参数,这只有在我们将 `doc/` 目录安装到 OmniPITR 期望找到的位置时才会生效。
接下来,我们需要验证 OmniPITR 是否正确安装并能按预期工作。它附带了一个名为 `sanity-check.sh` 的文件,我们将其与其他文件一起安装在 `bin/` 目录中。执行此命令将检查各种资源并生成报告。
如果健全性检查成功,我们仍然需要促进 `pg-backup` 和 `pg-primary` 之间的通信。为此,我们在每个服务器上以 `postgres` 用户身份生成 RSA 密钥对并发送到另一个系统,这样自动化工具就可以安全地传输文件。
### 1.3 使用 OmniPITR 管理 WAL 文件
WAL(Write-Ahead Logging)文件在 PostgreSQL 的崩溃恢复、备份恢复和复制中起着核心作用。使用 OmniPITR,我们可以升级服务器之间的通信,确保对 WAL 文件移动的每个步骤进行日志记录。
#### 1.3.1 准备工作
此操作依赖于 OmniPITR 已安装在所有需要使用它的服务器上。请先完成 OmniPITR 的安装和配置。
#### 1.3.2 操作步骤
以下是将 WAL 文件从 `pg-primary` 发送到 `pg-backup` 的步骤:
1. 在 `pg-backup` 服务器上,以具有 root 权限的用户身份创建一个可由 `postgres` 用户写入的目录:
```bash
sudo mkdir /db/pg_archived
sudo chown postgres:postgres /db/pg_archived
```
2. 在 `pg-primary` 的 `/etc` 目录中创建一个名为 `omnipitr.conf` 的文件,内容如下:
```plaintext
--data-dir /db/pgdata
--dst-remote postgres@pg-backup:/db/pg_archived
--log /var/log/postgresql/omnipitr.log
```
3. 修改 `pg-primary` 上的 `postgresql.conf` 文件,确保以下参数设置正确:
```plaintext
archive_mode = on
archive_command = 'omnipitr-archive \
--cfg=/etc/omnipitr.conf %p'
```
4. 以 `postgres` 用户身份重启 PostgreSQL 服务器:
```bash
pg_ctl -D /db/pgdata restart
```
5. 以 `postgres` 用户身份查看 `omnipitr.log` 日志文件的内容:
```bash
tail /var/log/postgresql/omnipitr.log
```
#### 1.3.3 工作原理
我们首先确保 `postgres` 用户可以写入 `pg-backup` 服务器上的 `/db/pg_archived` 目录,这是我们预留用于保存 WAL 文件的位置。
OmniPITR 以类似于命令行参数的方式读取配置文件。为了避免冗长和混乱的命令行,我们将几个参数保存到配置文件中。第一个是 PostgreSQL 数据目录的路径,为了日志记录的目的,最好将其明确设置为 `/db/pgdata`。第二个是 WAL 文件的远程路径,我们使用在 `pg-backup` 上创建的 `/db/pg_archived` 目录。最后,我们将日志记录到 `/var/log/postgresql` 目录。
确认 `archive_mode` 为 `on` 后,我们将 `archive_command` 设置为调用 `omnipitr-archive`。重启 PostgreSQL 后,它将使用 OmniPITR 管理其 WAL 文件。
需要注意的是,如果 `archive_mode` 之前设置为 `off`,则需要完全重启 Postgr
0
0
复制全文
相关推荐









