postgres主从搭建步骤




-----------------------------------------------------  删除备库用户
psql.exe -U postgres -h 127.0.0.1 -p 5432 -c "drop user if exists repl;"


---------------------------------------------------   新增备库用户
psql.exe -U postgres -h 127.0.0.1 -p 5432 -c "create user repl with login replication password 'repl';" postgres


----------------------------------------------------- 修改pg_hba.conf文件:

# replication privilege.
host    replication     repl            10.33.47.9/32		    md5


-----------------------------------------------------  修改 postgres.conf文件:

---- 取消注释wal_level = replica, 改为: wal_level = hot_standby

wal_level = hot_standby

----- 取消注释max_wal_senders = 10

max_wal_senders = 10

----- 取消注释wal_keep_segments = 0, 改为:wal_keep_segments = 256

wal_keep_segments = 256

-----------------------------------------------重启主库


net stop postgresql-x64-11

net start postgresql-x64-11

---------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------

------ 停止从库
net stop postgresql-x64-11


------ 删除从库data目录下文件
cd /d D:\PostgreSQL\11
for /d %i in (data\*.*) do (rd /s /q %i)
del /f /s /q data\*.*

------------------------------------------------------------


----- 使用 pg_basebackup 生成备库

cd /d D:\PostgreSQL\11\bin

--- 下述命令执行需要输入从库密码: repl
pg_basebackup.exe -D "D:\PostgreSQL\11\data" -Fp -Xs --progress -v -U repl -h 10.12.66.50 -p 5432


----修改配置文件postgresql.conf,配置备库的流复制参数,如下

---取消注释
hot_standby = on

-- 取消注释:wal_receiver_status_interval = 10s, 改为 wal_receiver_status_interval = 2s
wal_receiver_status_interval = 2s

---- 取消注释:hot_standby_feedback = off,  改为hot_standby_feedback = on
hot_standby_feedback = on

---------------------------------------

修改配置文件 recover.conf
cd /d D:\PostgreSQL\11
copy /y  share\recovery.conf.sample   data\recovery.conf

配置如下参数
--- 取消注释
recovery_target_timeline = 'latest'

---修改standby_mode = off为standby_mode = on
standby_mode = on

primary_conninfo = 'host=10.12.66.50 port=5432 user=repl password=repl'

-- 修改trigger_file = '', 为:trigger_file = 'tgfile'
trigger_file = 'tgfile'

重启:

net start  postgresql-x64-11




------------------------------------验证

--- 主库中查询
select * from pg_stat_replication;

-- 查询被分库
psql.exe -U postgres -h 10.33.47.9 -c "select datname from pg_database" postgres

-- 主库中建立新库
psql.exe -U postgres -h 10.12.66.50 -c "create database cmsdb" postgres

---再次查询备份库
psql.exe -U postgres -h 10.33.47.9 -c "select datname from pg_database" postgres


--备份机查询用户
psql.exe -U postgres -h 10.33.47.9 -c "select * from pg_user" postgres

--主机创建用户
psql.exe -U postgres -h 10.12.66.50 -c "create user test01 with password 'test01' " postgres


--备机再次查询用户
psql.exe -U postgres -h 10.33.47.9 -c "select * from pg_user" postgres


---------------------------------------------------------------------

psql.exe -U postgres -h 10.33.47.9 -c "select * from pg_tables where tablename='tb_test01'" postgres

psql.exe -U postgres -h 10.12.66.50 -c " create table tb_test01(id int, code varchar(64))" postgres

psql.exe -U postgres -h 10.33.47.9 -c "select * from pg_tables where tablename='tb_test01'" postgres































<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] ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值