pgsql 主从搭建

在 PostgreSQL 中,主从复制(Master-Slave Replication)是一种常见的数据库高可用性和数据备份解决方案。它允许你创建一个主数据库服务器(Master),并在一个或多个从数据库服务器(Slave)上复制主数据库的数据。这有助于提高系统的可用性,因为在主服务器发生故障时,可以切换到从服务器来提供服务。以下是在 PostgreSQL 中设置主从复制的基本步骤:

注意: 在开始之前,请确保你已经安装了 PostgreSQL,并且主从服务器都可以访问彼此。

配置主服务器(Master):

a. 打开主服务器的 PostgreSQL 配置文件,通常位于 /etc/postgresql/<version>/main/postgresql.conf。

b. 确保以下参数设置正确:

listen_addresses = '*' # 允许远程连接

wal_level = replica     # 设置 WAL 日志级别为 replica

max_wal_senders = 3     # 允许的 WAL 发送者数量,根据需要进行调整

wal_keep_segments = 64  # 保留的 WAL 日志段数量,根据需要进行调整

打开 pg_hba.conf 文件(通常位于相同目录),确保允许从服务器连接到主服务器。添加以下行:

host replication <replication_user> <slave_ip> md5

其中 <replication_user> 是用于复制的用户名,<slave_ip> 是从服务器的IP地址。例如:

host replication replicator 192.168.1.2/32 md5

重新启动 PostgreSQL 以使更改生效。

创建复制用户和权限:

在主服务器上创建一个用于复制的用户,并授予适当的权限。登录到主服务器的 PostgreSQL,然后执行以下命令:

CREATE USER replicator REPLICATION LOGIN CONNECTION LIMIT 3;

备份和还原数据:

在主服务器上执行备份操作,并将备份文件传输到从服务器。可以使用 pg_dump 命令创建备份:

pg_dump -U <username> -h <hostname> -F c -b -f <backup_file> <database_name>

将 <username> 替换为数据库用户名,<hostname> 替换为数据库主机名,<backup_file> 替换为备份文件的路径,<database_name> 替换为要备份的数据库名称。

在从服务器上执行还原操作:

pg_restore -U <username> -h <hostname> -d <database_name> <backup_file>

配置从服务器(Slave):

a. 打开从服务器的 PostgreSQL 配置文件,通常位于 /etc/postgresql/<version>/main/postgresql.conf。

b. 设置以下参数以启用从服务器:

listen_addresses = '*'  # 允许远程连接

hot_standby = on        # 启用热备份模式

c.创建一个 recovery.conf 文件,通常位于与数据目录相同的位置,包含以下内容:

standby_mode = 'on'

primary_conninfo = 'host=<master_ip> port=<master_port> user=<replication_user> password=<password>'

restore_command = 'cp /var/lib/postgresql/<version>/main/archive/%f %p'

archive_cleanup_command = '/usr/lib/postgresql/<version>/bin/pg_archivecleanup /var/lib/postgresql/<version>/main/archive %r'

trigger_file = '/tmp/postgresql.trigger'

替换 <master_ip>, <master_port>, <replication_user>, <password> 以及相关的路径和版本信息。

d. 重新启动从服务器的 PostgreSQL。

启动主从复制:

在从服务器上,启动 PostgreSQL 服务后,它会自动连接到主服务器并开始复制数据。你可以在主服务器上进行监视和管理复制进程。

测试主从复制:

在主服务器上进行一些数据更改,然后验证这些更改是否在从服务器上反映出来。你可以使用 pg_stat_replication 视图来监视复制状态。

这只是一个基本的主从复制设置过程,实际环境中可能需要更复杂的配置,例如使用流复制(streaming replication)或逻辑复制(logical replication)来满足特定需求。此外,确保在生产环境中采取适当的安全措施,如加密和访问控制,以保护你的数据库。

<think>好的,用户想了解如何搭建PostgreSQL 15的主从复制架构。我需要先回忆一下相关知识,并确保步骤正确。根据之前的引用内容,主从复制涉及安装PostgreSQL、配置主库和从库、设置复制用户、执行基础备份等步骤。 首先,用户的环境需要两个节点,主库和从库,操作系统可能是Rocky Linux或CentOS。引用[2]提到使用shell脚本安装,这可能简化安装过程。安装完成后,需要编辑postgresql.conf文件,调整参数如wal_level和max_wal_senders,如引用[3]所述。此外,pg_hba.conf需要允许从库连接,引用[3]和引用[4]都有涉及这部分。 然后,创建复制专用用户,并处理数据目录的权限。引用[4]提到使用pg_basebackup进行基础备份,并调整数据目录的权限。从库的recovery.conf或standby.signal文件配置也是关键,不过PostgreSQL 15可能已经改为使用standby.signal,需要确认。 还需要注意步骤中的细节,比如重启服务、验证复制状态。引用[5]提到流复制可以提高高可用性和读写分离,这也是用户可能关心的好处。用户可能遇到的问题包括配置参数错误、权限问题或网络连接问题,所以步骤中需要强调这些检查点。 现在需要将步骤结构化,分主库配置、从库配置,并确保命令正确无误。同时,引用相关引用来源,确保用户可以参考具体资料。最后,生成相关问题,帮助用户进一步学习。</think>### PostgreSQL 15 主从复制架构搭建指南 #### 一、环境准备 1. **操作系统**:推荐使用 Rocky Linux 9/CentOS 7 或更高版本 2. **节点规划**: - 主库:IP `10.10.0.41` - 从库:IP `10.10.0.42` 3. **安装 PostgreSQL 15** 通过脚本一键安装(引用[2])或手动安装: ```bash # 添加 PostgreSQL 官方仓库 sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-9-x86_64/pgdg-redhat-repo-latest.noarch.rpm # 安装 PostgreSQL 15 sudo dnf install -y postgresql15-server postgresql15-contrib ``` --- #### 二、主库配置 1. **初始化数据库** ```bash sudo /usr/pgsql-15/bin/postgresql-15-setup initdb sudo systemctl start postgresql-15 ``` 2. **修改配置文件 `postgresql.conf`** ```bash sudo vi /var/lib/pgsql/15/data/postgresql.conf ``` 修改以下参数(引用[3]): ```ini listen_addresses = '*' wal_level = replica max_wal_senders = 10 hot_standby = on ``` 3. **配置访问权限 `pg_hba.conf`** ```bash sudo vi /var/lib/pgsql/15/data/pg_hba.conf ``` 添加从库连接规则: ```ini host replication replica 10.10.0.42/32 scram-sha-256 ``` 4. **创建复制专用用户** ```sql sudo -u postgres psql CREATE ROLE replica WITH REPLICATION LOGIN PASSWORD 'replica_password'; ``` 5. **重启主库服务** ```bash sudo systemctl restart postgresql-15 ``` --- #### 三、从库配置 1. **执行基础备份** 在从库节点运行(引用[4]): ```bash sudo -u postgres pg_basebackup -h 10.10.0.41 -U replica -D /var/lib/pgsql/15/data -P --wal-method=stream --write-recovery-conf ``` 调整目录权限: ```bash sudo chown -R postgres:postgres /var/lib/pgsql/15/data sudo chmod 700 /var/lib/pgsql/15/data ``` 2. **配置 `standby.signal`** ```bash sudo -u postgres touch /var/lib/pgsql/15/data/standby.signal ``` 3. **修改 `postgresql.conf`** 确保从库配置包含: ```ini hot_standby = on ``` 4. **启动从库服务** ```bash sudo systemctl start postgresql-15 ``` --- #### 四、验证主从同步 1. **主库查询状态** ```sql SELECT client_addr, state, sent_lsn, write_lsn FROM pg_stat_replication; ``` 应显示从库 IP 和同步状态。 2. **从库验证** 检查日志文件: ```bash sudo tail -f /var/lib/pgsql/15/data/log/postgresql.log ``` 出现 `started streaming WAL` 表示同步成功[^5]。 --- #### 五、故障排查 1. **连接失败**:检查防火墙和 `pg_hba.conf` 规则 2. **权限问题**:确保 `replica` 用户密码正确且具有 `REPLICATION` 权限 3. **WAL 日志异常**:确认 `wal_level` 设置为 `replica`[^3] ---
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猫一样的女子245

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值