PostgreSQL 主从复制方案
PostgreSQL 主从复制方案是一种常见的数据库高可用性方案,它允许在主服务器上进行写入操作,而从服务器则复制主服务器上的数据,并可以承担读取操作的负载。
以下是一个基本的 PostgreSQL 主从复制方案:
-
配置主服务器:在主服务器上设置
wal_level
参数为logical
或者hot_standby
,并启用archive_mode
参数。这些设置可以通过修改 PostgreSQL 的配置文件postgresql.conf
进行。 -
配置从服务器:在从服务器上设置
standby_mode
参数为on
,并指定主服务器的 IP 地址和端口号。这些设置可以通过修改 PostgreSQL 的配置文件postgresql.conf
进行。 -
启动主服务器:在主服务器上启动 PostgreSQL 数据库服务。
-
创建备份:在主服务器上创建一个备份文件,它将用于初始化从服务器。
-
初始化从服务器:在从服务器上使用
pg_basebackup
工具从主服务器上复制数据,并将其初始化为从服务器。 -
启动从服务器:在从服务器上启动 PostgreSQL 数据库服务。
-
验证主从复制:在主服务器上执行写入操作,在从服务器上查询数据以验证是否同步。
请注意,这只是一个基本的 PostgreSQL 主从复制方案。如果需要更高级的功能和灵活性,可以考虑使用第三方工具或框架,例如 Patroni、pgpool-II 或者 repmgr。此外,在实施主从复制方案之前,应该详细了解 PostgreSQL 主从复制的原理和注意事项,以确保数据的一致性和可靠性。
一 、在基本的 PostgreSQL 主从复制方案中,我们需要先对主服务器进行配置。具体步骤如下:
-
打开 PostgreSQL 的配置文件 postgresql.conf。
-
查找并编辑 wal_level 参数。wal_level 是指 WAL 日志的详细程度,可设置为 minimal、replica 或 logical。在主从复制场景中,应将 wal_level 设置为 replica 或 logical,以保证从服务器可以正确复制主服务器上的数据变更。如果使用了逻辑复制,则应将其设置为 logical。
-
查找并编辑 archive_mode 参数。archive_mode 是指是否启用归档模式,即将 WAL 日志存档到别处。在主从复制场景中,应启用归档模式以确保从服务器可以通过归档日志来恢复主服务器丢失的数据。
-
保存并关闭配置文件。
需要注意的是,在修改配置文件后,需要重启 PostgreSQL 服务以使配置生效。
二、在基本的 PostgreSQL 主从复制方案中,要在从服务器上设置 standby_mode 参数为 on,并指定主服务器的 IP 地址和端口号。这些设置通常可以通过编辑 PostgreSQL 的配置文件 postgresql.conf 在从服务器上进行。
具体来说,您需要在从服务器上编辑 postgresql.conf 文件,将以下参数设置为所需的值:
# 指定主服务器的 IP 地址和端口号
primary_conninfo = 'host=<主服务器IP地址> port=<主服务器端口号>'
# 启用从服务器作为备用节点
standby_mode = on
请注意,上述示例仅为参考,请根据您的环境和需求进行适当修改。
完成以上步骤后,重新启动从服务器,它将开始连接到主服务器并接收来自主服务器的 WAL 日志,以使数据保持同步。
三、您需要在主服务器上启动 PostgreSQL 数据库服务。
通常,您可以通过运行以下命令来启动 PostgreSQL 服务:
$ sudo systemctl start postgresql
请注意,上述命令假定您的系统使用 systemd 管理程序来管理服务。如果您的系统使用其他服务管理器,请相应地调整命令。
完成以上步骤后,主服务器将开始接受来自客户端的连接,并将 WAL 日志发送给任何已配置成从服务器的节点,以便它们可以保持数据同步。
四、您需要在主服务器上创建一个备份文件,它将用于初始化从服务器。
通常,您可以使用以下命令在主服务器上创建 PostgreSQL 数据库的备份:
$ pg_basebackup -D /path/to/backup/directory -Ft -z -P -R
该命令包括以下选项:
-
-D /path/to/backup/directory
:指定备份文件存储路径。请将此路径设置为对从服务器可用的位置。 -
-Ft
:指定备份文件格式为 tar 归档文件。 -
-z
:启用压缩以减少备份文件大小。 -
-P
:显示进度信息。 -
-R
:启用备份文件中的流复制数据。
运行该命令后,PostgreSQL 将在指定的目录下生成一个备份文件,其中包含了主服务器的所有数据和 WAL 日志。这个备份文件可以通过拷贝到从服务器并解压来初始化从服务器。
请注意,备份文件可能会非常大,具体取决于主服务器上的数据量和活动负载。因此,您应该密切关注备份过程中的磁盘空间和网络使用情况,并确保足够的存储空间和带宽可用。
五、使用 pg_basebackup
工具可以将主服务器上的数据复制到从服务器,并初始化从服务器。以下是在从服务器上使用 pg_basebackup
工具完成初始化的步骤:
-
在从服务器上创建一个目录来存放备份文件。例如,您可以在
/var/lib/postgresql/12/main
目录下创建一个名为backup
的子目录:$ sudo mkdir /var/lib/postgresql/12/main/backup
-
使用如下命令从主服务器复制数据到从服务器:
$ pg_basebackup -h 主服务器 IP 地址 -U 复制用户名 -D /var/lib/postgresql/12/main/backup -P --wal-method=stream
上述命令包括以下选项:
-
-h 主服务器 IP 地址
:指定主服务器的 IP 地址。 -
-U 复制用户名
:指定用于从主服务器复制数据的 PostgreSQL 用户名。 -
-D /var/lib/postgresql/12/main/backup
:指定用于存放备份文件的目录路径。 -
-P
:显示进度信息。 -
--wal-method=stream
:启用流式 WAL 日志复制方式。
-
-
复制完成后,在从服务器上修改
recovery.conf
文件以启用从服务器的恢复过程。打开recovery.conf
文件并添加以下内容:standby_mode = 'on' primary_conninfo = 'host=主服务器 IP 地址 user=复制用户名 password=密码 port=5432' trigger_file = '/var/lib/postgresql/12/main/trigger'
上述内容包括以下选项:
standby_mode = 'on':启用从服务器的恢复模式。
primary_conninfo:指定主服务器的连接信息,其中包括主服务器 IP 地址、复制用户名、密码和端口号。
trigger_file:指定一个触发文件的路径,当该文件存在时,从服务器将停止恢复过程并转为只读模式。 -
重启从服务器的 PostgreSQL 服务以使配置生效:
$ sudo systemctl restart postgresql@12-main.service
完成上述步骤后,从服务器即可开始从主服务器中复制数据并进行恢复过程。您可以通过检查 PostgreSQL 日志文件来确保复制和恢复过程均已成功完成。
六、要在从服务器上启动 PostgreSQL 数据库服务以进行主从复制,您需要执行以下步骤:
-
确保从服务器已经安装了 PostgreSQL 数据库软件。如果没有安装,请先安装。
-
修改从服务器的 PostgreSQL 配置文件(postgresql.conf),以便它能够连接到主服务器并启用复制功能。找到以下几行配置:
# The IP address(es) of the master server(s).
# If there are multiple masters, separate them with commas.
# Example: '192.168.0.101,192.168.0.102'
# (change requires restart)
#replication_target = ''
#external_master = ''
# Enable read-only mode for the slave and
# start streaming replication from the master.
# (change requires restart)
#hot_standby = off
将 replication_target
的值设置为主服务器的 IP 地址或主服务器的 DNS 名称。将 hot_standby
的值设置为 on
,以启用从服务器的只读模式和流复制。
- 修改从服务器的 pg_hba.conf 文件,以允许主服务器连接到从服务器。找到以下一行:
# "local" is for Unix domain socket connections only
local all all peer
将其修改为:
# "local" is for Unix domain socket connections only
local replication all trust
这样就是允许来自主服务器的复制用户使用 trust
方法来认证。
- 启动从服务器的 PostgreSQL 数据库服务。您可以使用以下命令启动数据库服务:
$ sudo systemctl start postgresql
- 检查从服务器的 PostgreSQL 日志文件,确保它已经连接到了主服务器并开始了复制过程。您可以使用以下命令查看日志:
$ sudo tail -f /var/log/postgresql/postgresql-X.Y-main.log
其中 X.Y
是 PostgreSQL 版本号。
以上是启动从服务器的基本步骤。如果您遇到任何问题,请参考 PostgreSQL 文档或咨询相关技术支持人员。
七、要设置基本的 PostgreSQL 主从复制方案,您可以按照以下步骤启动从服务器:
-
在从服务器上安装 PostgreSQL 软件和所有必要的库。
-
在从服务器上编辑 PostgreSQL 配置文件
postgresql.conf
,并确保以下参数设置与主服务器相同:listen_addresses = '*' archive_mode = on archive_command = 'cp %p /path/to/archive/%f' max_wal_senders = 5 wal_level = replica hot_standby = on primary_conninfo = 'host=<primary_server_ip> port=5432 user=<replication_user> password=<password> application_name=<name>' restore_command = 'cp /path/to/archive/%f "%p"'
注意:请根据您的环境修改以上参数。
-
在从服务器上创建一个用于复制的用户,并将其添加到主服务器中的
pg_hba.conf
文件中。该用户需要具有在主服务器上复制 WAL 日志的权限。 -
在从服务器上创建一个空目录来存储 WAL 日志备份。
-
启动从服务器。
-
使用
pg_basebackup
工具从主服务器复制初始数据到从服务器。例如:pg_basebackup -h <primary_server_ip> -D /path/to/standby/pgsql/data -U <replication_user> -v -P --xlog-method=stream
注意:请根据您的环境修改以上参数。
-
在从服务器上编辑 PostgreSQL 配置文件
postgresql.auto.conf
,并添加以下参数:standby_mode = on primary_conninfo = 'host=<primary_server_ip> port=5432 user=<replication_user> password=<password> application_name=<name>' recovery_target_timeline = 'latest'
-
启动从服务器。
完成上述步骤后,您可以验证主从复制是否正常工作。在主服务器上执行写入操作,然后在从服务器上查询数据以验证是否同步。