AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 73812
Accepted
Dina
Dina
Asked: 2014-08-13 12:14:58 +0800 CST2014-08-13 12:14:58 +0800 CST 2014-08-13 12:14:58 +0800 CST

PostgreSQL 流与基于文件的复制(在服务器行为和配置方面)

  • 772

我正在尝试了解 PostgreSQL 复制的最佳用途及其工作原理,以便在生产环境中进行故障排除。

我很难理解这两种复制类型在(1)配置(2)2台服务器主/从服务器在每种情况下的执行方式方面的区别

PostgreSQL(9.2+)上的复制本质上是 16MB 大小的 XLOG 文件(取决于创建每个文件的频率设置)正在主服务器上创建并通过某种方法发送到从服务器。

我的设置(出于此问题的目的)

在 Master
archive_command='rsync -av %p postgres@[SlaveIP]:[wal_archive_folder]/%f' 上配置 Postgresql.conf

在 Slave 上配置 Recovery.conf 以读取日志文件
restore_command = 'cp [wal_archive_folder]/%f \"%p\"'
primary_conninfo = 'host=[MasterIP] port=5432 user=postgres'

我的问题是这个配置的哪一部分使得这种“流式”复制与“日志传送”?我的主服务器配置为使用 rsync 将日志发送到从服务器(这是日志传送吗?)我的从服务器配置为能够连接到 recovery.conf 中的主服务器(这是流式传输吗?)

问题的第二部分:发生了什么?我知道通过 WAL_sender 和 WAL_receiver 在 PostgreSQL 上有另一个协议。但我不清楚这是否仅用于流式传输,如果是,主控中如何使用 rsync?

:) 谢谢!!对不起,如果这是一个明显的问题。我一直在阅读大量博客/书籍,但很难理解。Postgres wiki 是如此深入,以至于需要很长时间才能完成所有工作(而且我有截止日期)

postgresql postgresql-9.3
  • 1 1 个回答
  • 5939 Views

1 个回答

  • Voted
  1. Best Answer
    Craig Ringer
    2014-08-13T17:05:39+08:002014-08-13T17:05:39+08:00

    “流式复制”是指通过连接上的 walsender 协议在主服务器和副本之间通过 TCP/IP 连接连续发送 WAL 记录replication。master 读取自己的 WALpg_xlog并按需将其发送到副本。它配置了一个primary_conninfo指令 inrecovery.conf和pg_hba.confmaster 上的条目以允许replication连接。您还需要wal_keep_segments文档中涵盖的其他一些选项。

    “日志传送”是指通过文件传输协议将 WAL 记录作为整个 WAL 存档定期发送到副本可以从中获取它们的存档位置。它配置了一个restore_command指令 inrecovery.conf和一个archive_commandin 主控。PostgreSQL 不关心文件在哪里或它们是如何传输的,只关心archive_command将它们放在那里并restore_command获取所需的存档;这允许构建像 PgBarman 和 WAL-E 这样的系统。

    流式复制没有太多延迟,因为记录在生成时发送。但是,它要求主副本和副本都在线并且能够直接通信。它还要求副本保持足够好,以使主服务器仍然具有副本所需的 WAL 的磁盘副本,并且通常需要您花费额外的pg_xlog空间来为副本保留额外的 WAL。

    日志传送复制有更多的延迟,因为副本只有在发送整个存档后才能看到 WAL。但是,即使主服务器和副本无法使用共享存储位置通过 TCP/IP 直接通信,它也可以工作。即使副本关闭了一段时间,它也会继续工作,因为pg_xlog只有在归档之后主服务器才会丢弃 WAL,所以即使主服务器无法发送 WAL 仍然在归档中并且可供副本使用通过流式传输。请注意,archive_command永不放弃,pg_xlog如果归档失败,可以填写;出于这个原因,最好存档到一个可靠的位置,然后让副本服务器从该位置获取。

    一般来说,您实际上将两者结合起来,即同时使用两者。在这种情况下,当一切正常时,就会使用流复制。如果副本太落后并且主服务器已经丢弃了它需要的 xlog,出现连接问题等,那么副本将切换到读取存档的 WAL,直到它赶上。它会定期重新尝试切换回流式传输,直到成功。

    如果您只打算使用一个,请使用日志传送,因为没有日志传送回退的流式复制(直到 PostgreSQL 9.4)可能容易出现复制滞后,从而导致故障迫使重新构建副本。


    PostgreSQL 9.4 稍微改变了这一点,因为流式复制现在可以使用“复制槽”。这让 master 可以跟踪副本需要多少 WAL,并避免在副本重放之前将其丢弃。因此,wal_keep_segments如果您使用复制槽(不是默认值),则不再需要。

    请参阅我的文章PostgreSQL 9.4 中的流式复制槽。

    9.4 还介绍了流式逻辑复制的基础,这是另一种机制,专为逻辑复制系统(如 Londiste、Slony-I)和新的双向异步多主复制功能而设计。

    • 18

相关问题

  • 我可以在使用数据库后激活 PITR 吗?

  • 运行时间偏移延迟复制的最佳实践

  • 存储过程可以防止 SQL 注入吗?

  • PostgreSQL 中 UniProt 的生物序列

  • PostgreSQL 9.0 Replication 和 Slony-I 有什么区别?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve