一、主从复制原理
PostgreSQL的主从同步主要基于其预写日志(Write-Ahead Log, WAL)机制和流复制(Streaming Replication)功能来实现数据的高可用性和一致性。
WAL是PostgreSQL确保数据持久性和一致性的一个核心组件。它的工作原理是,任何对数据库的修改操作,在实际修改数据文件之前,都会先记录到WAL中。这意味着,事务的提交不仅仅依赖于数据页的更新,还依赖于相关日志记录到WAL并被确认。这个过程确保了即使在系统崩溃的情况下,也能通过重放WAL日志恢复到一致的状态。
流复制是PostgreSQL实现主从同步的主要方式,它建立在WAL机制之上,它允许将主服务器(Primary)上的事务日志(WAL, Write-Ahead Logging)实时发送到从服务器(Secondary)。从服务器接收到这些事务日志后,将其应用到自己的数据库中,从而保持与主服务器数据的一致性。
二、配置主数据库
2.1 创建同步账号
CREATE ROLE replica login replication encrypted password 'wsx-123';
2.2 配置同步账号访问控制
vi /data/db/postgresql/pg_hba.conf
host replication replica 192.168.179.135/32 md5
2.3 设置同步参数
vi /data/db/postgresql/postgresql.conf
wal_level = replica
max_wal_senders = 2
3.4 重启主数据库
pg_ctl -D /data/db/postgresql -l logfile restart
三、配置从数据库
3.1 停止从库
pg_ctl -D /data/db/postgresql -l logfile stop
3.2 清空从库数据文件
rm -rf /data/db/postgresql/*
3.3 拉取主库数据文件
pg_basebackup -h 192.168.179.134 -D /data/db/postgresql -p 5432 -U replica -Fp -Xs -Pv -R --checkpoint=fast
3.4 配置从库同步参数
由于从库数据文件是从主库拉取过来,需要先删除主库同步相关的参数,然后新增从库同步参数:
vi /data/db/postgresql/postgresql.conf
primary_conninfo = 'host=192.168.179.134 port=5432 user=replica password=wsx-123'
recovery_target_timeline = latest
hot_standby = on
3.5 启动从库
pg_ctl -D /data/db/postgresql -l logfile start
四、测试主从
4.1在主库查看从库连接状态
select client_addr,usename,backend_start,application_name,sync_state,sync_priority FROM pg_stat_replication;
4.2 新增数据测试同步
主库插入数据:
从库数据对比:
版权归原作者 m0_37559973 所有, 如有侵权,请联系我们删除。