pg13.x主从节点搭建以及数据同步

步骤1:安装postgres

可参考:centos arm 安装Postgres
此处我搭建了2台postgres,分别为:10.211.110.55、10.211.110.56

步骤2:主库配置

比如在 PostgreSQL 中实现一主一从的集群模式,此处选定10.211.110.55为主节点,另一个为从节点,可以使用流复制(Streaming Replication)来实现主节点数据实时同步到从节点。以下是一般步骤:

1、创建用于复制的用户:

在主节点上创建用于复制的用户,以便从节点可以使用该用户连接到主节点进行流复制。

CREATE USER replication_user REPLICATION LOGIN CONNECTION LIMIT 10 ENCRYPTED PASSWORD 'your_password';

替换 replication_user 和 ‘your_password’ 为实际的用户名和密码。

特别注意:limit 后面的数字一定要大于从节点的数量,比如你的从节点为1个,数字必须大于等于2,我此处设置成了10。

2、修改主节点的 PostgreSQL 配置文件:

打开主节点上的 postgresql.conf 文件,找到并确保以下配置项设置为适当的值

listen_addresses = '*'       # 允许所有IP连接
wal_level = replica          # 设置为 replica,启用 WAL 日志流复制
max_wal_senders = 3          # 允许的最大 WAL 发送者数目

当然此处还可以添加其他配置,如果想要对流复制的参数进一步调整,可参考:postgresql.conf注释详解

3、修改主节点的 pg_hba.conf 文件:

打开主节点上的 pg_hba.conf 文件,确保允许从节点连接。添加如下规则:

找到# IPv4 local connections:在下面添加
host    all             all             0.0.0.0/0               trust

这个规则的作用是允许任何 IP 地址的主机连接到 PostgreSQL 数据库服务器,并且授予他们所有数据库和用户的访问权限,而且认证方式为 trust,这意味着不需要密码即可连接到数据库。在考虑安全性的前提下,指定数据库、用户和具体ip端口,然后把认证方式修改成加密认证:如md5。

找到# replication privilege.在下面添加
host    replication     replicator     10.211.55.18/32         trust

此处就指定了用户和ip,用户为上面创建的用户。

4、重启 PostgreSQL 服务:

pg_ctl -D /pgdata/ -l logfile.log restart

-D后的路径修改为自己的路径即可。

步骤3:从库配置

1、停止从库服务

pg_ctl -D /pgdata/ -l logfile.log stop

2、清空从库数据存储文件夹

rm -rf /pgdata/*

3、创建 PostgreSQL 数据库的基础备份

pg_basebackup -h 10.211.110.55 -U replicator  -D /pgdata --write-recovery-conf --progress --verbose
单独对上述命令做个解释:

pg_basebackup:pg_basebackup 是 PostgreSQL 提供的一个工具,用于创建 PostgreSQL 数据库的基础备份。

-h 10.211.110.55:-h 选项用于指定目标 PostgreSQL 服务器的主机地址。
在这个例子中,目标 PostgreSQL 服务器的 IP 地址是 10.211.110.55。

-U replicator:-U 选项用于指定连接到目标 PostgreSQL 服务器时使用的用户名。
在这个例子中,使用的用户名是 replicator。

-D /pgdata:-D 选项用于指定将备份数据存储到的目标目录。
在这个例子中,备份数据将被存储在 /pgdata 目录中。

–write-recovery-conf:–write-recovery-conf 选项用于在备份目录中生成standby.signal文件,该文件用于配置 PostgreSQL 流复制的主从关系。这对于创建用于流复制的基础备份是很重要的(在12版本之前,生成的是recovery.conf文件)。

–progress:–progress 选项用于显示备份过程的进度信息。
当执行备份时,你将看到备份进度的更新。

–verbose:–verbose 选项用于在标准输出中显示详细的备份信息。
这对于了解备份过程中发生的情况很有帮助。

4、修改standby.signal文件

文件在指定的数据存储目录下,在配置文件中添加以下配置

standby_mode = 'on'

这一行配置告诉 PostgreSQL 数据库,该实例将作为备用服务器。
在备用模式下,数据库实例将尝试连接到主服务器并获取 WAL 日志,以保持与主服务器的同步。
当然这个参数也可以不用配置,在 PostgreSQL 12 及更高版本中,standby_mode = ‘on’ 通常是由 PostgreSQL 自动管理的,而不需要手动在 standby.signal 文件中添加。当 PostgreSQL 实例检测到 standby.signal 文件存在时,它会自动以备用模式启动。

5、修改postgres.conf文件

# primary_conninfo: 配置与主数据库建立流复制连接的详细信息
#   - host: 主数据库的主机地址
#   - port: 主数据库的端口号,默认为 5432
#   - user: 连接到主数据库时使用的用户名
#   - password: 连接到主数据库时使用的密码
primary_conninfo = 'host=主节点IP port=5432 user=replicator password=replicator用户的密码'

# recovery_target_timeline: 配置备库使用的时间线(timeline)
#   - latest: 使用主数据库当前时间线上的最新 WAL 日志
recovery_target_timeline = latest

# max_connections: 配置备库的最大允许连接数
#   - 控制备库上的并发连接数
max_connections = 120

# hot_standby: 配置是否启用热备(热备份)模式
#   - on: 启用热备模式,使备库可以接受读请求
hot_standby = on

# max_standby_streaming_delay: 配置备库流复制的最大延迟时间
#   - 30s: 允许备库在流复制时最多延迟 30 秒,超过这个延迟将不再接收新的 WAL 日志
max_standby_streaming_delay = 30s

# wal_receiver_status_interval: 配置 WAL 接收器的状态更新间隔
#   - 10s: 每隔 10 秒更新一次 WAL 接收器的状态信息
wal_receiver_status_interval = 10s

# hot_standby_feedback: 配置是否启用热备反馈
#   - on: 启用热备反馈,用于在主库上清理不再需要的 WAL 日志
hot_standby_feedback = on

6、重启数据库

pg_ctl -D /pgdata/ -l logfile.log restart

步骤4:验证

此时主从节点配置已完成,数据以可自动同步。
可以采用以下方式做个简单验证:

连接主库
psql - U postgrres
新增一个用户
create user test with password '****';

执行\du

                              角色列表
  角色名称   |                    属性                    | 成员属于 
-------------+--------------------------------------------+----------
 postgres    | 超级用户, 建立角色, 建立 DB, 复制, 绕过RLS | {}
 replication | 复制                                      +| {}
             | 10个连接                                   | 
 test        |                                            | {}
连接从库,并执行\du
                              角色列表
  角色名称   |                    属性                    | 成员属于 
-------------+--------------------------------------------+----------
 postgres    | 超级用户, 建立角色, 建立 DB, 复制, 绕过RLS | {}
 replication | 复制                                      +| {}
             | 10个连接                                   | 
 test        |                                            | {}

可以发现新增的用户在从库中也已存在。

你可能感兴趣的:(postgresql)