暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

PostgreSQL 12.2官方手册学习(第19章 服务器配置之后备服务器与订阅者)

PostgreSQL数据库工作学习随笔 2021-08-25
870

后备服务器

 

这些设置空值接收复制数据的一个后备服务器的行为。它们的值与主服务器无关。

 

primary_conninfo (string)

 

指定备用服务器用来连接发送服务器的连接字符串。这个字符串的格式在第 33.1.1 节中描述。如果在这个字符串中有任何选项未被指定,那么将检查相应的环境变量(见第 33.14 节 )。如果环境变量也没有被设置,则使用默认值。

 

连接字符串应当指定发送服务器的主机名(或地址),以及端口号(如果它和备用服务器的默认端口不同)。 还要指定对应于发送服务器上合适权限角色的用户名(见第 26.2.5.1 节)。如果发送服务器要求口令认证,还需要提供一个口令。它可以在primary_conninfo字符串中提供,或者在后备服务器(使用replication作为数据库名)的一个单独~/.pgpass文件中提供。不要在primary_conninfo字符串中指定一个数据库名。

 

这个参数只能在服务器启动时被设置。如果服务器没有处于备用模式,则此设置无效。


primary_slot_name (string)

 

有选择地指定通过流复制连接到发送服务器时使用一个现有的复制槽来控制上游节点上

的资源移除(见第 26.2.6 节 )。这个参数只能在服务器启动时被设置。如果没有设置primary_conninfo则这个设置无效。


 

promote_trigger_file (string)

 

指定一个触发器文件,该文件的存在会结束后备机中的恢复。即使这个值没有被设置,

你也能够使用pg_ctl promote或调用pg_promote来提升后备机。这个参数只能在postgresql.conf文件中或在服务器命令行上设置。


 

hot_standby (boolean)

 

指定在恢复期间,你是否能够连接并运行查询,如第 26.5 节中所述。默认值是on。这

个参数只能在服务器启动时设置。它只在归档恢复期间或后备机模式下才有效。

 

max_standby_archive_delay (integer)


当热后备机处于活动状态时,这个参数决定取消那些与即将应用的 WAL 项冲突的后备机查询之前,后备服务器应该等待多久,如第 26.5.2 节 中所述。当 WAL 数据被从 WAL归档(并且因此不是当前的 WAL)时,max_standby_archive_delay可以应用。如果指定值时没有单位,则以毫秒为单位。默认值是 30 秒。值 -1 允许后备机一直等到冲突查询结束。这个参数只能在postgresql.conf文件中或在服务器命令行上设置。

 

注意,max_standby_archive_delay与取消之前一个查询能够运行的最长时间不同;它表示应用任何一个 WAL 段数据能够被允许的最长总时间。因此,如果一个查询早于 WAL 段导致了显著的延迟,后续冲突查询将只有更少的时间。


max_standby_streaming_delay (integer)

 

当热后备机处于活动状态时,这个参数决定取消那些与即将应用的 WAL 项冲突的后备机查询之前,后备服务器应该等待多久,如第 26.5.2 节 中所述。当 WAL 数据正在通过流复制被接收时,max_standby_streaming_delay可以应用。如果指定值时没有单位,则以毫秒为单位。默认值是 30 秒。值 -1 允许后备机一直等到冲突查询结束。这个参数只能在postgresql.conf文件中或在服务器命令行上设置。

注意,max_standby_streaming_delay与取消之前一个查询能够运行的最长时间不同;它

表示在从主服务器接收到 WAL 数据并立刻应用它能够被允许的最长总时间。因此,如果一个查询导致了显著的延迟,后续冲突查询将只有更少的时间,直到后备服务器再次赶上进度。


 

wal_receiver_status_interval (integer)

 

指定在后备机上的 WAL 接收者进程向主服务器或上游后备机发送有关复制进度的信息的最小频度,它可以使用pg_stat_replication视图看到。后备机将报告它已经写入的上一个预写式日志位置、它已经刷到磁盘的上一个位置以及它已经应用的最后一个位置。这个参数的值是报告之间的最大时间量。每次写入或刷出位置改变时会发送状态更新,或者至少按这个参数的指定的频度发送。因此,应用位置可能比真实位置略微滞后。如果指定值时没有单位,则以秒为单位。默认值是 10 秒。将这个参数设置为零将完全禁用状态更新。这个参数只能在postgresql.conf文件中或在服务器命令行上设置。 


 

hot_standby_feedback (boolean)

 

指定一个热后备机是否将会向主服务器或上游后备机发送有关于后备机上当前正被执行的查询的反馈。这个参数可以被用来排除由于记录清除导致的查询取消,但是可能导致在主服务器上用于某些负载的数据库膨胀。反馈消息的发送频度不会高于每个wal_receiver_status_interval周期发送一次。默认值是off。这个参数只能在postgresql.conf文件中或在服务器命令行上设置。

 

如果使用级联复制,反馈将被向上游传递直到它最后到达主服务器。后备机在接收到反馈之后除了传递给上游不会做任何其他操作。

 

这个设置不会覆盖主服务器上的old_snapshot_threshold的行为,后备服务器上一个超过了主服务器年龄阈值的快照可能会变得不可用,导致后备服务器上事务的取消。这是因为old_snapshot_threshold是为了对死亡行能够存在的时间给出一个绝对限制,不然就会因为一个后备服务器的配置而被违背。

 

 

wal_receiver_timeout (integer)

 

中止处于非活动状态超过这个时间量的复制链接。这对于正在接收的后备服务器检测主服务器崩溃或网络断开有用。 如果指定值时没有单位,则以毫秒为单位。默认值是 60秒。这个参数只能在postgresql.conf文件中或者服务器命令行中设置。


 

wal_retrieve_retry_interval (integer)

 

指定当从任何来源(流复制、本地pg_wal或者 WAL 归档)都得不到 WAL 数据时,后备服

务器应该等待多久才去重新尝试获取 WAL 数据。如果指定值时没有单位,则以毫秒为单位。默认值是 5 秒。这个参数只能在postgresql.conf文件或者服务器命令行中设置。

 

这个参数对恢复中的节点需要为新 WAL 数据可用等待多少时间的配置有用。例如,在归档恢复中,通过减小这个参数的值可以让恢复更积极地检测新的 WAL 日志文件。在一个 WAL 活动较低的系统上,增加这个参数的值可以减 少访问 WAL 归档所必需的请求数量,这对于例如云环境是有用的,在其中对于基础设施的访问时间也是被考虑的。 


 

recovery_min_apply_delay (integer)

 

默认情况下,后备服务器会尽快恢复来自于发送服务器的 WAL 记录。有一份数据的延时拷贝是有用的,它能提供机会纠正数据丢失错误。这个参数允许你将恢复延迟一段指定的时间量。例如,如果你设置这个参数为5min,对于一个事务提交,只有当后备机上的系统时钟超过主服务器报告的提交时间至少 5分钟时,后备机才会重放该事务。如果指定值时没有单位,则以毫秒为单位。默认为0,不增加延迟。

 

有可能服务器之间的复制延迟会超过这个参数的值,在这种情况下则不会增加延迟。 注意延迟是根据主服务器上写 WAL 的时间戳以及后备机上的当前时间来计算。由于网络延迟或者级联复制配置导致的传输延迟可能会显著地减少实际等待时间。如果主服务器和后备机上的系统时钟不同步,这会导致恢复比预期的更早应用记录。但这不是一个主要问题,因为这个参数有用的设置比服务器之间的典型事件偏差要大得多。

 

只有在事务提交的 WAL 记录上才会发生延迟。其他记录还是会被尽可能快地重放,这不

会成为问题,因为 MVCC 可见性规则确保了在对应的提交记录被应用之前它们的效果不会被看到。

 

一旦恢复中的数据库已经达到一致状态,延迟就会产生,直到后备机被提升或者触发。在那之后,后备机将会结束恢复并且不再等待。

 

这个参数的目的是和流复制部署一起使用,但是,如果指定了该参数,除了崩溃恢复之外所有的情况下都会遵守它。 使用这个特性也会让hot_standby_feedback被延迟,这可能导致主服务器的膨胀,两者一起使用时要小心。

 

 警告:synchronous_commit被设置为remote_apply时,同步复制会受到这个设置的影响,每一个COMMIT都需要等待被应用。

 

这个参数只能在postgresql.conf文件中或在服务器命令行中设置。


 

订阅者

 

这些设置控制逻辑复制订阅者的行为。它们在发布者上的值与此无关。

 

注意,配置参数wal_receiver_timeout、wal_receiver_status_interval以

wal_retrieve_retry_interval也影响逻辑复制工作者。

 

max_logical_replication_workers (int)

 

指定逻辑复制工作者的最大数目。这同时包括应用工作者和表同步工作者。逻辑复制工作者是从max_worker_processes定义的池中取出的。默认值是4。


 

max_sync_workers_per_subscription (integer)

 

每个订阅的同步工作者的最大数目。这个参数控制订阅初始化期间或者新表增加时的初

始数据拷贝的并行度。

 

当前,每个表只能有一个同步工作者。

 

同步工作者是从max_logical_replication_workers定义的池中取出的。

 

默认值为2。


 


文章转载自PostgreSQL数据库工作学习随笔,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论