在迁移到PostgreSQL时,一些用户可能很好奇PostgreSQL提供的复制类型。有些人可能想知道他们是否必须支付任何额外的企业许可证以实现这一要求。这是因为,一些商业数据库需要客户拍摄entepise许可证来设置复制。但是,PostgreSQL(如高级开源数据库)自动提供内置多种类型的复制方法。这意味着,我们从未考虑过任何额外的许可或企业解决方案,并在使用PostgreSQL时远离供应商锁定。在本文中,我们将讨论流媒体复制内部,并查看PostgreSQL 13中设置流复制所涉及的详细步骤。
流复制也可以称为物理复制。人们通常会听到Postgres中的术语主人和待机。主人是一个接受写入的服务器,并将流式传输到待机状态。它可以与一些数据库技术中的主数据库进行比较。虽然,备用备用复制来自主设备的更改,只接受读取。它可以在一些数据库技术中称为副本。
要了解流式复制工作原理的内部,我们需要从酸属性开始。酸中的字母D意味着耐用性。当关系数据库确保承诺的交易永远不会丢失,即使在崩溃时,也可以实现耐久性。通常,内存(或RAM)中的任何东西都可以丢失在崩溃时,但在磁盘上没有任何内容。
考虑到这一事实,PostgreSQL中存在后台实用程序进程,称为WAL Worker,其连续将WAL记录从内存写入磁盘上的WAL(注册日志)段。后端也可以将WAL缓冲区刷新到WAL段。这意味着只有在将其写入磁盘上的WAL段时,才会才能成功进行交易。当然,始终可以更改此默认行为。
在以下Streaming Replication架构图中,我们会看到由于更新语句,某些块/缓冲区已成为脏块的示例。由于该块中的元组(或记录)的变化,脏缓冲区或脏块是修改缓冲区。
如上面的Streaming Replication架构图所示,WAL段包含包含对数据块(以DML或DDL的形式)所做的更改的沃尔记录。
当我们设置流复制时,在主站上启动名为Wal Sender的新后台进程。此过程接受来自备用备用的请求,并将WAL记录持续向其备用流。类似地,在待机上启动名为WAL接收器的后台过程,其接收并应用这些更改。这里可以看到更多关于流复制协议的内部结构。
步骤1:创建具有复制角色的复制用户。 (在主人身上执行的步骤)
步骤2:允许备用的Replication用户连接到主要。请参阅pg_hba.conf的文档更多详细信息。 (在主人身上执行的步骤)
替换192.169.12.1与待机的IP地址允许允许复制连接到主设备。
第3步:执行重新加载以使变化生效。 (在主人身上执行的步骤)
步骤4:以下是配置参数列表,使我们能够为生产数据库执行强大的Replication Setup。 (在主人身上执行的步骤)
请注意:其中一些参数不是用于流式复制的强制性,但仅用于良好的设置。
max_wal_senders:可以在主设备上启动的WAL发件人进程数。每个复制品一个。 PG_BASEBACKUP可以使用一个或2个WAL发件人,这将在单独的博客文章中稍后讨论。 MAX_WAL_SENDERS通常默认为所有分布到10。因此,除非我们将超过5个待机到主站设置超过5个待机,否则不需要修改此参数。
listent_addresses:此参数确定允许连接的IP接口。它默认为localhost。它可以设置为公共IP接口或使用(*)的所有内容。
archive_mode:必须将此参数设置为“on”以启用存档。启用归档后,将在回收之前将WAL段复制到存档位置。 (archive_mode不是必需参数,但建议生产数据库)
archive_command:shell命令或归档者应执行全WAL段的存档的脚本。以下是使用Linux中的CP命令的示例设置。例如,
%P由Postgres代替与实际WAL段的路径。 %F用WAL文件名代替postgres。
(archive_command不是必需参数,但建议生产数据库)。除非Archive_Mode设置为“始终”,否则此参数对待机没有影响。
restore_command:shell命令或使用哪个备用备用备份从存档位置复制WAL段的脚本,当WAL段没有主机(当WAL段在其保留在主设备上时)。此参数对Master没有影响。只有在待机状态或使用完整备份和归档执行时间点恢复时才需要。例如,
wal_keep_size:在获得回收之前至少在PG_WAL目录中保留的WAL段数量。
wal_compression:这不是必需参数,但是当它设置为“开”时,将压缩将其写入WAL段之前的每一个完整页面。这会减少WAL写入并保存磁盘上的一些IOPS。
步骤5:根据参数更改时根据需要重新加载或重新启动。 (在主站上执行的步骤)
$ psql -p 5432 -c"选择pg_reload_conf()" $ psql -p 5432 -c"从pg_settings中选择名称,设置,pending_restart,其中pending_restart为true"
步骤6:拍摄主设备的完整备份以在备用备用备用备用内部创建数据目录的副本。用主机的IP或主机名替换为适用的IP地址。 (在待机上执行的步骤,如果从备用服务器远程拍摄主站的备份)
-XS:使用单独的通道/进程,从主站到备用流的持续更改(WAL记录),而备份正在进行中。
-c fast:此标志可用于执行快速检查点,并避免等待直到延迟检查点完成。
步骤7:如果设置了以下参数,则验证。否则,在待机状态下适当地设置它们。 (在待机上执行验证)
primary_conninfo:使用步骤6中的-R标志拍摄备份时,主_conninfo参数会自动添加到数据目录中的postgresql.auto.conf文件(在以下日志中看到)。 postgresql.conf或其他配置文件作为includ_dir的一部分,由postgres考虑在此文件中设置的参数。
$ cd $ pgdata $ grep primary_conninfo postgresql.auto.conf primary_conninfo =' user = replicator password = secretconal_binding = preferent host = 192.169.12.1端口= 5432 sslmode = preplet sslcomplession = 0 ssl_min_protocol_version = tlsv1.2 gssencmode = lover krbsrvname = postgres target_session_attrs =任何'
此参数有助于备用其主设备的连接详细信息。待机使用“添加到此配置”参数的用户,主机,端口和其他详细信息,以在Streaming Replication协议上从其主站开始流媒体记录。
restore_command:这是备用备用备用备件,从档案中恢复WAL段的命令,当时所需的WAL段没有其主机。当沃尔段未被待机流留出时,这通常会发生,但沃尔段已被主人回收。我们还可以使用物理复制插槽来避免主人回收WAL段,除非被确认待机收到。我们需要确保使用shell命令或指定给RESTORE_COMMAND的脚本来访问存档目录或服务器。
我们可以在本文档中查看关于Postgres Streaming Replication的配置参数的上述参数的更多详细信息。
步骤8:创建一个信号文件以提及服务器是备用服务器。备用备用文件必须在待机的数据目录中创建。 (在待机上执行的步骤)
步骤9:启动备用才能启用复制。 (在待机上执行的步骤)
步骤10:使用主机上的以下命令验证Master和Standby之间的复制。 (在主机上执行验证)
$ psql -x -c"从pg_stat_replication&#34中选择*; - [记录1] ---- + -------------------- ------- pid | 28435USSYSID | 16384Usename | replicatorapplication_name | walreceiverclient_addr | 192.169.12.1client_hostname | client_port | 49806Backend_start | 2021-03-31 12:39:22.876997 + 00 Backend_xmin |国家| Streamingsent_lsn | 0 / 3000148WRITE_LSN | 0 / 3000148FLUSH_LSN | 0 / 3000148REPLAY_LSN | 0 / 3000148WRITE_LAG | 00:00:00:00.126533FLUSH_LAG | 00:00:00:00.127325RAPLE_LAG | 00:00:00.127386Sync_priority | 0sync_state | asyncreply_time | 2021-03-31 12:39:23.021395 + 00
到目前为止,我们已经看到了在PostgreSQL 13中建立流复制所涉及的步骤。在我们未来的博客中,我们将看到如何设置同步复制,并了解我们如何执行故障转移和倒带的Demoted Master的倒带以添加它返回新大师的复制。订阅我们的博客文章,以保持最新的日期。联系我们了解更多信息如何帮助您调整和设置强大的PostgreSQL生产环境,以帮助您迁移到PostgreSQL。