可参考:centos arm 安装Postgres
此处我搭建了2台postgres,分别为:10.211.110.55、10.211.110.56
比如在 PostgreSQL 中实现一主一从的集群模式,此处选定10.211.110.55为主节点,另一个为从节点,可以使用流复制(Streaming Replication)来实现主节点数据实时同步到从节点。以下是一般步骤:
在主节点上创建用于复制的用户,以便从节点可以使用该用户连接到主节点进行流复制。
CREATE USER replication_user REPLICATION LOGIN CONNECTION LIMIT 10 ENCRYPTED PASSWORD 'your_password';
替换 replication_user 和 ‘your_password’ 为实际的用户名和密码。
特别注意:limit 后面的数字一定要大于从节点的数量,比如你的从节点为1个,数字必须大于等于2,我此处设置成了10。
打开主节点上的 postgresql.conf 文件,找到并确保以下配置项设置为适当的值
listen_addresses = '*' # 允许所有IP连接
wal_level = replica # 设置为 replica,启用 WAL 日志流复制
max_wal_senders = 3 # 允许的最大 WAL 发送者数目
当然此处还可以添加其他配置,如果想要对流复制的参数进一步调整,可参考:postgresql.conf注释详解
打开主节点上的 pg_hba.conf 文件,确保允许从节点连接。添加如下规则:
host all all 0.0.0.0/0 trust
这个规则的作用是允许任何 IP 地址的主机连接到 PostgreSQL 数据库服务器,并且授予他们所有数据库和用户的访问权限,而且认证方式为 trust,这意味着不需要密码即可连接到数据库。在考虑安全性的前提下,指定数据库、用户和具体ip端口,然后把认证方式修改成加密认证:如md5。
host replication replicator 10.211.55.18/32 trust
此处就指定了用户和ip,用户为上面创建的用户。
pg_ctl -D /pgdata/ -l logfile.log restart
-D后的路径修改为自己的路径即可。
pg_ctl -D /pgdata/ -l logfile.log stop
rm -rf /pgdata/*
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 选项用于在标准输出中显示详细的备份信息。
这对于了解备份过程中发生的情况很有帮助。
文件在指定的数据存储目录下,在配置文件中添加以下配置
standby_mode = 'on'
这一行配置告诉 PostgreSQL 数据库,该实例将作为备用服务器。
在备用模式下,数据库实例将尝试连接到主服务器并获取 WAL 日志,以保持与主服务器的同步。
当然这个参数也可以不用配置,在 PostgreSQL 12 及更高版本中,standby_mode = ‘on’ 通常是由 PostgreSQL 自动管理的,而不需要手动在 standby.signal 文件中添加。当 PostgreSQL 实例检测到 standby.signal 文件存在时,它会自动以备用模式启动。
# 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
pg_ctl -D /pgdata/ -l logfile.log restart
此时主从节点配置已完成,数据以可自动同步。
可以采用以下方式做个简单验证:
psql - U postgrres
create user test with password '****';
执行\du
角色列表
角色名称 | 属性 | 成员属于
-------------+--------------------------------------------+----------
postgres | 超级用户, 建立角色, 建立 DB, 复制, 绕过RLS | {}
replication | 复制 +| {}
| 10个连接 |
test | | {}
角色列表
角色名称 | 属性 | 成员属于
-------------+--------------------------------------------+----------
postgres | 超级用户, 建立角色, 建立 DB, 复制, 绕过RLS | {}
replication | 复制 +| {}
| 10个连接 |
test | | {}
可以发现新增的用户在从库中也已存在。