从0到1,PostgreSQL复制的不同策略详解( 五 )


复制过程首先对发布者数据库上的数据进行快照 , 然后将其复制到订阅者 。订阅者从他们订阅的发布中提取数据 , 并可能稍后重新发布数据 , 以允许级联复制或更复杂的配置 。订阅者以与发布者相同的顺序应用数据 , 以便保证单个订阅内的发布的事务一致性 , 也称为事务复制 。
逻辑复制的典型场景如下:

  • 将单个数据库(或数据库的子集)中的增量更改发送给订阅者 。
  • 在多个数据库之间共享数据库的一个子集 。
  • 在单个更改到达订阅者时触发它们的触发事件 。
  • 将多个数据库合并为一个 。
  • 为不同的用户组提供对复制数据的访问 。
订阅者数据库的行为方式与任何其他 PostgreSQL 实例相同 , 并且可以通过定义其发布来用作其他数据库的发布者 。
当订阅者被应用程序配置成只读时 , 单个订阅不会发生冲突 。不过 , 如果应用程序或其他订阅者对同一组表进行了写入 , 则可能会出现冲突 。
PostgreSQL 同时支持这两种机制 。逻辑复制允许对数据复制和安全性进行细粒度控制 。
复制模式PostgreSQL 复制主要有两种模式:同步和异步 。同步复制允许同时将数据写入主服务器和从服务器 , 而异步复制确保数据先写入主服务器 , 然后再复制到从服务器 。
在同步模式复制中 , 只有当这些更改已复制到所有副本时 , 主数据库上的事务才被视为完成 。副本服务器必须始终可用 , 以便在主服务器上完成事务 。同步复制模式用于具有即时故障转移要求的高端事务环境 。
在异步模式下 , 当只在主服务器上完成更改时 , 可以声明主服务器上的事务已完成 。这些更改随后会及时复制到副本中 。副本服务器可以在一段时间内保持不同步 , 称为复制滞后 。在崩溃的情况下 , 可能会发生数据丢失 , 但异步复制提供的开销很小 , 因此在大多数情况下是可以接受的(不会使主服务器负担过重) 。
如何设置 PostgreSQL 复制接下来 , 我们将演示如何在 linux 操作系统上设置 PostgreSQL 复制过程 。对于本例 , 我们将使用 Ubuntu 18.04 LTS 和 PostgreSQL 10 。
一、安装通过以下步骤在 Linux 上安装 PostgreSQL:
  1. 首先 , 通过在终端中键入以下命令来导入 PostgreSQL 签名密钥
wget -q https://www.postgresql.org/media/keys/ACCC4CF8.asc -O- | sudo apt-key add -
  1. 然后 , 添加 PostgreSQL 存储库:
echo "deb http://apt.postgresql.org/pub/repos/apt/ bionic-pgdg main" | sudo tee /etc/apt/sources.list.d/postgresql.list
  1. 更新存储库索引:
 sudo apt-get update
  1. 使用 apt 命令安装 PostgreSQL 包:
sudo apt-get install -y postgresql-10
  1. 最后 , 使用以下命令为 PostgreSQL 用户设置密码:
sudo passwd postgres在进行 PostgreSQL 复制过程之前 , 主服务器和备份服务器都必须安装 PostgreSQL 。
在两台服务器上设置 PostgreSQL 后 , 可以继续进行主服务器和备份服务器的复制设置 。
二、主服务器配置
  1. 首先 , 使用以下命令登录到 PostgreSQL 数据库:
su - postgres
  1. 使用以下命令创建复制用户:
psql -c "CREATEUSER replication REPLICATION LOGIN CONNECTION LIMIT 1 ENCRYPTED PASSWORD'YOUR_PASSWORD';"
  1. 在 Ubuntu 中使用任何 nano 应用程序编辑pg_hba.cnf并添加以下配置:
 nano /etc/postgresql/10/main/pg_hba.conf
  1. 使用以下命令配置该文件:
 host replicationreplicationMasterIP/24md5


推荐阅读