如何在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的新角色并赋予其复制权限。我们还指定了登录功能并为其分配了密码。现在我们的主节点已正确配置用于流复制我们可以继续配置我们的从节点。配置用于流复制的从节点在从节点上设置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 port5432 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视图监控副本服务器。我们还介绍了如何通过手动将其中一个从节点提升为新的主节点来执行故障转移。