1.1 物理复制和逻辑复制
物理复制也称为流复制,是实例级别的复制。
流复制同步方式有同步、异步两种,如果主节点和备节点不是很忙,通常异步模式下备库和主库的延迟时间能控制在毫秒级。
逻辑复制也称之为选择性复制,可以做到基于表级别的复制。
WAL:Write-Ahead Logging 日志记录数据库的变化,格式为二进制格式,当主机异常断电时,如果WAL文件已经写入成功,但还没来得及刷新数据文件,当数据库再次启动时会根据WAL日志文件信息进行事务前回滚,从而恢复数据库到一致性状态。
流复制是基于WAL物理复制,逻辑复制是基于WAL逻辑解析,将WAL解析成一种清晰、易于理解的格式。
1.2 流复制和逻辑复制的差异
注意:由于PG12版本开始不再支持通过recovery.conf的方式进行主备切换,如果数据目录中存在recovery.conf,则数据库无法启动。
2.1 服务器规划
192.168.0.99 db01 主库
192.168.0.100 db02 从库
2.2 准备数据库环境
安装PostgreSQL 15.2,之前的文章已分享PG15.2的安装方法,此处不再赘述。
2.3 修改配置文件
主库操作
cd /web/data_5432
vim postgres.conf
listen_addresses = '*'
port = 5432
max_connections = 100
wal_level = hot_standby
hot_standby = on
archive_mode = on
max_wal_senders = 10
wal_sender_timeout = 180s
vim pg_hba.conf
host all all 192.168.0.0/24 md5
host replication rep 192.168.0.100/32 md5
启动数据库
su - postgres
/web/pgsql/bin/pg_ctl -D /web/data_5432 -l /web/data_5432/logfile start
登录数据库
/web/pgsql/bin/psql
创建用于复制的用户
create user rep replication login encrypted password 'test123!@#';
从库操作
切换到root用户
ctrl +d
删除data_5432目录下所有数据(保留data_5432目录)
cd /web/data_5432
rm -fr *
备份主库数据库
cd /web/pgsql/bin
./pg_basebackup -R -D /web/data_5432/ -Fp -Xs -v -P -h 192.168.0.99 -U rep -p 5432
chown -R postgres.postgres /web/data_5432/
启动数据库
su - postgres
/web/pgsql/bin/pg_ctl -D /web/data_5432 -l /web/data_5432/logfile start
查看流复制同步效果
select pg_is_in_recovery();
查看主从信息
cd /web/pgsql/bin
./pg_controldata /web/data_5432/
2.4 验证主从流复制
主库操作
创建测试库并建表插入数据,并验证主从复制性
create database test with template = template0 owner = postgres;
\c test;
create table test(id int primary key,name varchar(20),salary real);
\d test;
insert into test values(10,'hf qgutech',10000.00);
insert into test values(2,'wang jie',12000.00);
至此,PostgreSQL主从流复制安装完成。