如何在CentOS 8中配置PostgreSQL 12流复制?


介绍

PostgreSQL是最流行的开源关系数据库管理系统(RDBMS)之一。它提供了广泛的功能,例如数据完整性、容错性和可扩展性。PostgreSQL的一个重要功能是流复制。

它允许您通过持续地将更改从主节点流式传输到备用节点来创建PostgreSQL数据库集群的多个副本,几乎实时完成。流复制通过通过网络连接将主节点生成的预写日志(WAL)数据流式传输到一个或多个备用节点来工作。

配置用于流复制的主节点

在主节点上启用WAL归档

WAL(预写日志)是PostgreSQL中的一个关键组件,它允许崩溃恢复和时间点恢复。为了设置流复制,我们需要在主节点上启用WAL归档。这将确保所有在主节点上提交的事务除了写入WAL文件外,还会写入指定的归档位置。

要启用WAL归档,您需要使用以下参数更新`postgresql.conf`文件:

# Enable Archiving archive_mode = on archive_command = 'cp %p /var/lib/pgsql/12/archive/%f'

在这个例子中,我们启用了归档,并指定了一个归档命令,该命令将WAL段从其默认目录(`pg_xlog`)复制到`/var/lib/pgsql/12/archive`。您可以根据需要调整此路径。

配置pg_hba.conf文件以允许来自从节点的复制连接

为了让从节点连接并从主节点复制数据,我们需要相应地配置`pg_hba.conf`文件。您需要在此文件中添加一个条目,指定允许来自特定IP地址或子网的复制连接:

# TYPE DATABASE USER ADDRESS METHOD host replication repluser slave_ip/32 md5

在这个例子中,我们添加了一个条目,使用`md5`身份验证方法允许来自特定IP地址(`slave_ip`)的连接。此外,我们创建了一个名为`replication`的新数据库,我们的复制用户将可以访问该数据库。

在主节点上创建具有适当权限的复制用户

现在我们的主服务器已配置为流复制,并且我们的从服务器已授权连接,我们需要在主服务器上创建一个具有适当权限的新用户。此用户将负责对将复制到从服务器的主数据库进行必要的更改。要创建此用户,您可以使用以下SQL命令作为PostgreSQL超级用户:

CREATE ROLE repluser WITH REPLICATION LOGIN PASSWORD 'password';

在这个例子中,我们创建了一个名为`repluser`的新角色,并赋予其复制权限。

我们还指定了登录功能并为其分配了密码。现在我们的主节点已正确配置用于流复制,我们可以继续配置我们的从节点。

Learn SQL in-depth with real-world projects through our SQL certification course. Enroll and become a certified expert to boost your career.

配置用于流复制的从节点

在从节点上设置recovery.conf文件以连接到主节点

配置好用于流复制的主节点后,是时候设置您的从节点了。设置从节点的第一步是创建一个名为recovery.conf的配置文件。

此文件包含与主节点建立连接并启动流复制所需的信息。要创建此配置文件,您首先需要确定需要设置哪些值。

一般来说,有三个必需的值:standby_mode、primary_conninfo和restore_command。Standby_mode告诉PostgreSQL此服务器将作为备用服务器运行,并且应始终保持在复制模式。

Primary_conninfo提供有关如何连接到主节点的信息。Restore_command告诉PostgreSQL如何从已归档的WAL文件中检索任何丢失的数据。

确定这些值后,在PostgreSQL数据目录(通常为/var/lib/pgsql/12/data/)中打开一个名为“recovery.conf”的新文件。以以下格式添加这些值作为键值对:

standby_mode = 'on' primary_conninfo = 'host= port=5432 user= password=' restore_command = 'cp /path/to/archive/%f "%p"'

请注意,%f和%p是表示每个已归档WAL段的名称和目标路径的特殊字符。

启动从节点上的PostgreSQL服务以启动复制过程

一旦您创建了包含正确填写必要参数的recovery.conf文件,就可以启动从节点上的Postgres服务了。

sudo systemctl start postgresql-12.service sudo systemctl enable postgresql-12

此时,您的从服务器应成功与主服务器建立连接并开始复制预写日志数据。

默认情况下,Postgres将从服务器运行在一个连续循环中,检查新的WAL文件并在主服务器上可用时应用它们。您可以通过在从节点上运行以下查询来检查复制是否正常工作:

SELECT * FROM pg_stat_replication;

这应该为您提供确认,表明复制正在上线并按预期工作。

测试和验证流复制设置

在配置用于流复制的主节点和从节点之后,务必测试和验证复制是否已正确设置。为此,我们将使用一个名为pg_stat_replication的工具,该工具显示有关流复制状态的信息。

首先,让我们使用psql连接到主节点:

bash $ sudo -i -u postgres psql

现在执行以下命令以显示有关流复制的信息:

sql postgres=# SELECT client_addr, state, sync_state FROM pg_stat_replication;

上面的查询返回有关每个已连接的流复制客户端实例的信息。“client_addr”列显示连接到主节点的每个从节点的IP地址;“state”显示当前是否正在使用连接进行流复制;“sync_state”显示数据当前是否正在从主节点流式传输到从节点。

使用pg_stat_replication视图检查复制状态

pg_stat_replication视图提供了宝贵的见解,可以监控PostgreSQL 12中的副本。在监控PostgreSQL 12流复制时,它是最重要的系统视图之一。

让我们了解如何利用pg_stat_replication视图检查我们的副本(从属)服务器是否与我们的主(主)服务器同步。要检查所有副本是否与主服务器同步,请运行:

sql SELECT client_addr AS slave_ip_address, state AS connection_state, sync_state AS synchronization_status FROM pg_stat_replication;

此查询将显示每个副本的IP地址及其对应的连接状态和同步状态。

通过将从节点提升为新的主节点来测试故障转移

故障转移过程允许在当前主节点出现问题时切换。在PostgreSQL 12流复制中,故障转移过程必须手动完成。这意味着管理员需要干预并将其中一个从节点提升为新的主节点。

要执行故障转移,您需要执行以下步骤:

  • 断开当前主节点的所有复制连接。

  • 通过将recovery.conf中的“recovery_target_timeline”设置为“latest”来提升其中一个从节点。

  • 启动此提升的从节点上的PostgreSQL服务。

将从节点提升为新的主节点后,务必检查所有其他从节点是否连接到此新的主节点并正确接收数据。您可以再次使用pg_stat_replication视图来检查每个从节点是否成功连接:

sql SELECT client_addr AS slave_ip_address, state AS connection_state, sync_state AS synchronization_status FROM pg_stat_replication

一旦您确定一切正常工作,就可以将应用程序的连接设置从旧的(失败的)主服务器切换到新的主服务器(提升的从服务器)。

结论

在本文中,我们讨论了如何在CentOS 8中配置PostgreSQL 12流复制,并提供了有关设置主节点和从节点的详细说明。我们还学习了如何测试复制设置并使用pg_stat_replication视图监控副本服务器。我们还介绍了如何通过手动将其中一个从节点提升为新的主节点来执行故障转移。

更新于:2023年7月11日

995 次浏览

开启你的职业生涯

完成课程获得认证

开始
广告