PostgreSQL之wal_keep_segments参数

wal_keep_segments参数用于设定pg_wal目录中保留的最小wal文件数量,以保证备用服务器流复制的需求。当备用服务器滞后超过设置值时,可能会导致复制连接中断。在PostgreSQL 13.0中,此参数更名为了wal_keep_size,允许指定WAL的大小而非文件数,反映系统对WAL归档和checkpoint的需要。了解这一参数对于优化数据库备份和恢复策略至关重要。
摘要由CSDN通过智能技术生成

wal_keep_segments:用于指定pg_wal目录中保存的过去的wal文件(wal 段)的最小数量,以防备用服务器在进行流复制时需要。

(参数解释见:https://postgresqlco.nf/doc/zh/param/wal_keep_segments/)

每个wal文件通常为16兆字节。如果连接到发送服务器的备用服务器滞后超过wal_keep_segment个文件,发送服务器可能会删除备用服务器仍然需要的WAL段,在这种情况下流复制连接将被终止。因此,下游连接最终也会失败。(但是,如果使用了WAL归档,备用服务器可以通过从归档中获取段来恢复。)

 

前面说到,wal_keep_segments这只设置了pg_wal中保留的最小数目;  WHY?

因为系统可能需要为WAL归档或者checkpoint(wal_keep_size)保留更多的段。如果wal_keep_segments为0(默认值),系统不会备用服务器流复制保留任何额外的段,所以备用服务器可用的旧WAL段的数量取决于前一个检查点的位置和WAL归档状态。

注意:postgresql 13.0中,将wal_keep_segments重命名为wal_keep_size,让用户指定WAL大小,而不是WAL文件个数。在PG内核不断演进的过程中,PostgreSQL开发者在逐渐弱化wal段数量(wal文件个数)的概念,并强调wal的size,之前就有checkpoint_segments改变为max_wal_si

PostgreSQL 9.5支持主主复制,下面是详细的步骤: 1. 确保两个PostgreSQL服务器上都已经安装了9.5版本的PostgreSQL。 2. 在两台服务器上都创建一个数据库,假设它们的名称分别为db1和db2。 3. 在主服务器db1上修改postgresql.conf文件,启用复制功能。找到以下行并将其取消注释: ``` #listen_addresses = 'localhost' # what IP address(es) to listen on; # comma-separated list of addresses; # defaults to 'localhost'; use '*' for all # (change requires restart) #wal_level = minimal # minimal, archive, hot_standby, or logical #max_wal_senders = 0 # max number of walsender processes # (change requires restart) #wal_keep_segments = 0 # in logfile segments, 16MB each; 0 disables ``` 将其修改为: ``` listen_addresses = '*' wal_level = hot_standby max_wal_senders = 10 wal_keep_segments = 500 ``` 其中,listen_addresses设置为通配符,表示接受任何IP地址的数据包;wal_level设置为hot_standby,表示开启热备;max_wal_senders设置为10,表示最大允许10个数据流发送到备份服务器;wal_keep_segments设置为500,表示保留的wal文件数目。 4. 在主服务器db1上修改pg_hba.conf文件,确保允许从备份服务器上访问主服务器。找到以下行并将其取消注释: ``` # IPv4 local connections: host all all 127.0.0.1/32 md5 ``` 将其修改为: ``` host all all 0.0.0.0/0 md5 ``` 其中,0.0.0.0/0表示允许任何IP地址的数据包访问。 5. 在主服务器db1上创建一个复制用户,用于从备份服务器上访问主服务器。执行以下命令: ``` CREATE USER replication_user REPLICATION LOGIN CONNECTION LIMIT 10 ENCRYPTED PASSWORD 'your_password'; ``` 其中,replication_user是自定义的用户名,your_password是自定义的密码。 6. 在备份服务器db2上修改postgresql.conf文件,启用复制功能。找到以下行并将其取消注释: ``` #listen_addresses = 'localhost' # what IP address(es) to listen on; # comma-separated list of addresses; # defaults to 'localhost'; use '*' for all # (change requires restart) #wal_level = minimal # minimal, archive, hot_standby, or logical #max_wal_senders = 0 # max number of walsender processes # (change requires restart) #wal_keep_segments = 0 # in logfile segments, 16MB each; 0 disables ``` 将其修改为: ``` listen_addresses = '*' wal_level = hot_standby max_wal_senders = 10 wal_keep_segments = 500 hot_standby = on ``` 其中,listen_addresses设置为通配符,表示接受任何IP地址的数据包;wal_level设置为hot_standby,表示开启热备;max_wal_senders设置为10,表示最大允许10个数据流发送到备份服务器;wal_keep_segments设置为500,表示保留的wal文件数目;hot_standby设置为on,表示开启热备模式。 7. 在备份服务器db2上修改recovery.conf文件,用于指定备份服务器从主服务器上复制数据。在文件中添加以下内容: ``` standby_mode = 'on' primary_conninfo = 'host=<主服务器IP地址> port=5432 user=replication_user password=<replication_user的密码>' trigger_file = '/tmp/postgresql.trigger' ``` 其中,<主服务器IP地址>是主服务器的IP地址,replication_user的密码是步骤5中自定义的密码。 8. 将主服务器db1上的数据复制到备份服务器db2上。在备份服务器上执行以下命令: ``` pg_basebackup -h <主服务器IP地址> -D /var/lib/postgresql/9.5/main -U replication_user -P ``` 其中,<主服务器IP地址>是主服务器的IP地址,/var/lib/postgresql/9.5/main是备份服务器上数据存放的目录,replication_user是步骤5中自定义的用户名。 9. 在备份服务器db2上启动PostgreSQL服务。执行以下命令: ``` systemctl start postgresql ``` 10. 在主服务器上创建一个测试数据库,例如testdb,并向其中添加一些数据。 11. 在备份服务器db2上查看是否成功复制数据。执行以下命令: ``` psql -U postgres -c "select datname from pg_database;" ``` 如果看到testdb,则表示备份服务器上已经成功复制了主服务器上的数据。 以上就是PostgreSQL 9.5主主复制的详细步骤。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值