PostgreSQL异步流复制(一主一从)
1、主库创建流复制的用户
postgres=# CREATE ROLE replica login replication encrypted password 'replica';
CREATE ROLE
postgres=#
2、主库修改pg_hba.conf文件,允许备库IP通过复制用户访问数据库
# replication privilege.
#主库
host replication replica 10.240.1.12/32 md5
#从库
host replication replica 10.240.1.13/32 md5
#这里配置两条,因为主从可以相互切换的,主要为了保持主从配置一致性。
3、主库修改postgresql.conf文件
listen_addresses = '*'
max_connections = 4000
#建议物理内存的四分之一
shared_buffers = 4GB
wal_level = replica
wal_buffers = 16MB
max_wal_size = 2GB
min_wal_size = 80MB
archive_mode = on
archive_command = 'test ! -f /home/alexlei_liu/pg16/archive_wals/%f && cp %p /home/alexlei_liu/pg16/archive_wals/%f'
wal_keep_size = 2GB
hot_standby = on
hot_standby_feedback = on
#针对分区表的优化
constraint_exclusion = partition
logging_collector = on
log_directory = 'pg_log'
log_filename = 'postgresql-%u.log'
log_rotation_age = 1d
log_truncate_on_rotation = on
log_min_duration_statement = 3s
idle_in_transaction_session_timeout = 5min
shared_preload_libraries = 'pg_stat_statements'
pg_stat_statements.max = 10000
pg_stat_statements.track = all
pg_stat_statements.track_utility = on
pg_stat_statements.save = on
4、停止备库,删除相应的数据文件
pg_ctl stop -m fast
rm -rf /usr/local/pg16/data
5、备库上通过pg_basebackup命令对主库进行基础备份
pg_basebackup -h 10.240.1.10 -p 5432 -U replica --password -X stream -Fp --progress -D $PGDATA -R
6、启动备库
pg_ctl start
7、主库查看数据库复制信息
psql
select * from pg_stat_replication
或者
ps
至此,pg数据库的异步流复制(一主一从)搭建完毕。
8、压测
使用pgbench对主从进行压测
#创建数据库
psql
create database test_db;
#初始化压测数据
pgbench -i -s 100 -F90 -d test_db
#压测
pgbench -c 10 -T 60 -d test_db
pgbench -c 10 -j 10 -T 60 -d test_db
pgbench -b select-only -c 40 -j 10 -T 60 -d test_db