跳到主要内容

PostgreSQL 热备

PostgreSQL热备(Hot Standby)是一种高可用性解决方案,允许在主数据库(Primary)运行时,备用数据库(Standby)可以同时接收并应用来自主数据库的更改。这种机制确保了在主数据库发生故障时,备用数据库可以快速接管,从而减少停机时间并保证数据的连续性。

什么是热备?

热备是PostgreSQL流复制(Streaming Replication)的一种模式。在流复制中,主数据库将WAL(Write-Ahead Logging)日志实时传输到备用数据库,备用数据库通过重放这些日志来保持与主数据库的同步。热备模式下,备用数据库不仅可以接收日志,还可以提供只读查询服务。

备注

热备的主要优势在于:

  • 高可用性:在主数据库故障时,备用数据库可以快速接管。
  • 负载均衡:备用数据库可以处理只读查询,减轻主数据库的负载。
  • 数据冗余:备用数据库是主数据库的完整副本,确保数据安全。

配置热备

1. 配置主数据库

首先,在主数据库的postgresql.conf文件中启用流复制:

plaintext
wal_level = replica
max_wal_senders = 3
wal_keep_segments = 32
  • wal_level:设置为replica以启用WAL日志的流复制。
  • max_wal_senders:设置可以同时连接到主数据库的备用数据库数量。
  • wal_keep_segments:设置保留的WAL日志段数量,确保备用数据库可以获取所需的日志。

接下来,在主数据库的pg_hba.conf文件中,允许备用数据库连接:

plaintext
host replication standby_user 192.168.1.0/24 md5
  • standby_user:备用数据库连接主数据库时使用的用户名。
  • 192.168.1.0/24:备用数据库的IP地址范围。

2. 配置备用数据库

在备用数据库的postgresql.conf文件中,启用热备模式:

plaintext
hot_standby = on

在备用数据库的recovery.conf文件中,配置主数据库的连接信息:

plaintext
standby_mode = 'on'
primary_conninfo = 'host=192.168.1.1 port=5432 user=standby_user password=standby_password'
trigger_file = '/tmp/promote_standby'
  • standby_mode:设置为on以启用备用模式。
  • primary_conninfo:指定主数据库的连接信息。
  • trigger_file:指定一个文件路径,当该文件存在时,备用数据库将提升为主数据库。

3. 启动备用数据库

在备用数据库上启动PostgreSQL服务,它将自动连接到主数据库并开始同步数据。

实际案例

假设我们有一个电子商务网站,主数据库处理所有的写操作(如订单、库存更新),而备用数据库处理只读查询(如商品列表、用户评论)。当主数据库发生故障时,备用数据库可以快速接管,确保网站的正常运行。

总结

PostgreSQL热备是一种强大的高可用性解决方案,能够确保在主数据库故障时快速恢复服务。通过配置流复制和热备模式,您可以实现数据的实时同步和只读查询的负载均衡。

练习

  1. 尝试在本地环境中配置一个主数据库和一个备用数据库。
  2. 模拟主数据库故障,观察备用数据库如何接管服务。
  3. 在备用数据库上运行只读查询,验证其功能。