PostgreSql学习:物理复制与逻辑复制
在PostgreSQL中,复制可以分为物理复制(即基于WAL的复制)和逻辑复制。
物理复制:
物理复制是最常见的复制类型,通过WAL(Write-Ahead Logging)实现。它是PostgreSQL的基础,不需要额外的设置。
逻辑复制:
逻辑复制是PostgreSQL 10及更高版本中的特性,它复制的是逻辑变化,而不是物理数据。要使用逻辑复制,需要在主服务器上启用并配置流复制,并在从服务器上启用逻辑复制。
以下是如何设置这两种复制的简化示例:
物理复制设置:
-- 在主服务器上
CREATE ROLE replica LOGIN PASSWORD 'replica';
rpm --import https://www.postgresql.org/media/keys/ACCC4CF8.asc
yum install -y postgresql12-server
initdb -D /path/to/data-directory
postgresql.conf:
wal_level = replica
max_wal_senders = 3
max_replication_slots = 3
hot_standby = on
recovery.conf:
primary_conninfo = 'host=master port=5432 user=replica password=replica sslmode=prefer sslcompression=1'
pg_hba.conf:
host replication replica 192.168.1.0/24 md5
-- 在从服务器上
rpm --import https://www.postgresql.org/media/keys/ACCC4CF8.asc
yum install -y postgresql12-server
initdb -D /path/to/data-directory
postgresql.conf:
primary_conninfo = 'host=master port=5432 user=replica password=replica sslmode=prefer sslcompression=1'
primary_slot_name = 'slot_name'
recovery.conf:
standby_mode = on
primary_conninfo = 'host=master port=5432 user=replica password=replica sslmode=prefer sslcompression=1'
pg_hba.conf:
host replication replica 192.168.1.0/24 md5
-- 启动主服务器和从服务器
逻辑复制设置:
-- 在主服务器上
CREATE ROLE replica LOGIN PASSWORD 'replica';
postgresql.conf:
wal_level = logical
max_wal_senders = 3
max_replication_slots = 3
wal_log_hints = on
pg_hba.conf:
host replication replica 192.168.1.0/24 md5
-- 在从服务器上
postgresql.conf:
primary_conninfo = 'host=master port=5432 user=replica password=replica sslmode=prefer sslcompression=1'
primary_slot_name = 'slot_name'
logical_decoding_work_mem = 128MB
wal_receiver_status_interval = 10s
pg_hba.conf:
host replication replica 192.168.1.0/24 md5
-- 启动从服务器
psql -U replica -d postgres -c 'CREATE SUBSCRIPTION link_sub CONNECTION \'host=master port=5432 user=replica password=replica\'' PUBLICATION pub'
注意:这些示例提供了基本的配置步骤,并假定主服务器和从服务器之间的网络连接是安全的。在实际部署中,应该考虑使用更复杂的安全设置,例如SSL加密。
评论已关闭