配置
master 192.168.2.21 5432
slave 192.168.2.22 5432
目录 /var/lib/pgsql/10/data/
配置主库
配置用户
psql
create role rep login replication encrypted password '1qaz2wsx';
配置访问权限 pg_hba.conf
在/var/lib/pgsql/10/data/pg_hba.conf增加
host replication rep 192.168.2.22/32 md5
配置同步文件
cd /var/lib/pgsql/10/data/
vi recovery.done
recovery_target_timeline = 'latest'
standby_mode = on
primary_conninfo = 'host=192.168.2.21 port=5432 user=rep password=1qaz2wsx'
# recovery_min_apply_delay = 0 #延迟多少分钟应用,用户可以配置延迟的备库,例如给一点误操作的缓冲时间。在备库不会这么早被应用。
启动主机
配置从库
创建目录
安装从机之后,不要初始化和启动数据库
mkdir /var/lib/pgsql/10/data/
chown postgres:postgres /var/lib/pgsql/10/data/
chmod 700 /var/lib/pgsql/10/data/
同步主库数据
su - postgres
pg_basebackup -D /var/lib/pgsql/10/data/ -F p -X stream -h 192.168.2.21 -p 5432 -U rep
修改配置文件
根据从机配置适当修改/var/lib/pgsql/10/data/postgresql.conf
配置recovery.conf
cd /var/lib/pgsql/10/data/
mv recovery.done recovery.conf
启动从库
service postgresql-10 restart
流复制节点的状态监控
主库
su - postgres
psql
postgres=# \x
Expanded display is on.
postgres=# select pg_size_pretty(pg_wal_lsn_diff(pg_current_wal_lsn(), sent_lsn)) as sent_delay,
pg_size_pretty(pg_wal_lsn_diff(pg_current_wal_lsn(), write_lsn)) as write_delay,
pg_size_pretty(pg_wal_lsn_diff(pg_current_wal_lsn(), flush_lsn)) as flush_delay,
pg_size_pretty(pg_wal_lsn_diff(pg_current_wal_lsn(), replay_lsn)) as replay_delay,
*
from pg_stat_replication;
-[ RECORD 1 ]----+------------------------------
sent_delay | 0 bytes
write_delay | 0 bytes
flush_delay | 0 bytes
replay_delay | 0 bytes
pid | 25628
usesysid | 16399
usename | rep
application_name | walreceiver
client_addr | 192.168.2.22
client_hostname |
client_port | 59674
backend_start | 2018-01-03 17:57:00.690789+08
backend_xmin |
state | streaming
sent_lsn | 0/F787EA30
write_lsn | 0/F787EA30
flush_lsn | 0/F787EA30
replay_lsn | 0/F787EA30
write_lag | 00:00:00.000259
flush_lag | 00:00:00.013562
replay_lag | 00:00:00.013563
sync_priority | 0
sync_state | async
从库
进入数据库
su - postgres
psql
查看当前WAL应用是否暂停
postgres=# select pg_is_wal_replay_paused();
-[ RECORD 1 ]-----------+--
pg_is_wal_replay_paused | f
f表示没有暂停,t表示暂停
查看WAL接收LSN点
postgres=# select pg_last_wal_receive_lsn();
-[ RECORD 1 ]-----------+-----------
pg_last_wal_receive_lsn | 0/FFA88FB8
查看WAL应用LSN点
postgres=# select pg_last_wal_replay_lsn();
-[ RECORD 1 ]----------+---------
pg_last_wal_replay_lsn | 1/1EC488
查看wal receiver的统计信息
postgres=# \x
Expanded display is on.
postgres=# select * from pg_stat_get_wal_receiver();
-[ RECORD 1 ]---------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
pid | 11648
status | streaming
receive_start_lsn | 0/3A000000
receive_start_tli | 1
received_lsn | 1/2DE1E28
received_tli | 1
last_msg_send_time | 2018-01-04 17:20:38.645492+08
last_msg_receipt_time | 2018-01-04 17:20:38.640939+08
latest_end_lsn | 1/2DE1E28
latest_end_time | 2018-01-04 17:20:38.645492+08
slot_name |
conninfo | user=rep password=******** dbname=replication host=192.168.2.21 port=5432 fallback_application_name=walreceiver sslmode=prefer sslcompression=1 krbsrvname=postgres target_session_attrs=any
暂停WAL的应用
select pg_wal_replay_pause();
-[ RECORD 1 ]-------+-
pg_wal_replay_pause |
postgres=# select pg_is_wal_replay_paused();
-[ RECORD 1 ]-----------+--
pg_is_wal_replay_paused | t
postgres=# select * from pg_stat_get_wal_receiver();
-[ RECORD 1 ]---------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
pid | 11648
status | streaming
receive_start_lsn | 0/3A000000
receive_start_tli | 1
received_lsn | 1/71D3E88
received_tli | 1
last_msg_send_time | 2018-01-04 17:23:52.302411+08
last_msg_receipt_time | 2018-01-04 17:23:52.297611+08
latest_end_lsn | 1/71D3E88
latest_end_time | 2018-01-04 17:23:52.302411+08
slot_name |
conninfo | user=rep password=******** dbname=replication host=192.168.2.21 port=5432 fallback_application_name=walreceiver sslmode=prefer sslcompression=1 krbsrvname=postgres target_session_attrs=any
恢复WAL的应用
postgres=# select pg_wal_replay_resume();
-[ RECORD 1 ]--------+-
pg_wal_replay_resume |
postgres=# select pg_is_wal_replay_paused();
-[ RECORD 1 ]-----------+--
pg_is_wal_replay_paused | f
注意事项
防止主库wal文件被删除,从库没有接收到
方法有:使用slot、配置足够大的wal keep、wal归档。
slot
配置方法
主 postgresql.conf
max_replication_slots = 10
备 recovery.conf
primary_slot_name = ''
当备库挂了或者不再使用,而忘记删除对应的SLOT时,可能导致主库WAL无限膨胀。
wal keep
配置方法
主 postgresql.conf
wal_keep_segments = 1024
会导致主库的WAL预留足够的个数,占用一定空间(walkeepsegments*16M
= 16G)。
wal归档
配置主库的归档,同时备库需要能获取到已归档的WAL文件。
配置方式
主 postgresql.conf
archive_mode = on
archive_command = '......'
备 recovery.conf
restore_command = '....'
同步账号密码的安全性
由于recovery.conf是明文,需要保护好recovery.conf文件的访问权限
或者限制只允许特定的从机访问
分享到:
相关推荐
在PG中,我们可以使用流复制(Streaming Replication)实现主从架构。这个压缩包包含了主从切换的配置,使得用户能够在主数据库出现故障时快速将流量切换到从库,保证业务连续性。主从复制的基本步骤包括设置主库,...
"postgres-REL_14_5.tar.gz" 是一个与 PostgreSQL 数据库服务器相关的...此外,了解备份和恢复策略、复制和高可用性解决方案(如流复制或 Patroni),以及监控和诊断工具,都是确保 PostgreSQL 系统正常运行的关键。
9. **复制与高可用**:PostgreSQL支持多种复制模式,如流复制、逻辑复制,用于构建高可用性和灾难恢复解决方案。 10. **故障排查**:理解日志文件的内容、错误代码的含义,以及如何解决常见的错误和问题。 11. **...
PostgreSQL是一种强大的开源关系型数据库管理系统,它支持SQL标准并提供许多高级特性,如事务处理、复制和复杂的查询。在企业级应用中,PostgreSQL因其稳定性和可靠性而被广泛采用。 然后,Prometheus是云原生计算...
【Postgres主从流复制+pgpool高可用方案】 一、方案介绍 1. 方案综述 在数据库系统中,高可用性是至关重要的,它确保即使在硬件故障或其他异常情况下,服务也能不间断地运行。PostgreSQL 提供了一种名为“流复制...
10. **复制与高可用性**:Postgres的复制功能(如流复制、归档复制)使得实现高可用性和灾难恢复成为可能。项目可能包含配置复制的步骤和注意事项。 通过这个项目,你可以亲自动手实践,从而巩固理论知识,并了解到...
### PostgreSQL基于ETCD mirror-make流复制搭建跨DC的PG集群高可用方案 #### 第1章 简介 本文档旨在介绍如何利用ETCD提供的工具`mirror-maker`以及Patroni来实现一个跨数据中心(DC)的PostgreSQL(PG)集群高可用...
6. **复制与扩展**:利用PostgreSQL的流复制功能实现高可用性和负载均衡,或者通过并行查询、分区等技术提升处理能力。 四、在服务器上的部署 在服务器环境中,确保PostgreSQL服务的稳定性至关重要。这包括定期检查...
7. **复制和高可用性**:PostgreSQL提供了多种复制选项,如流复制和逻辑复制,用于实现数据冗余和灾难恢复。 8. **性能优化**:这包括选择正确的数据类型,使用索引,避免全表扫描,以及监控和调整查询计划。 9. *...
为什么要使用逻辑复制逻辑复制是从Postgres数据库流式传输WAL日志的一种选择。 它允许以可以在其他应用程序中解析和使用的格式输出数据。 例如, 此设置中的lambda将输出如下的json文件: { " changes " : [ { " ...
**PostgreSQL 12流复制实施手册** 在深入探讨PostgreSQL 12的流复制之前,我们首先要理解复制的基本概念。复制是数据库系统中的一个重要特性,它允许数据在一个或多个服务器之间实时同步,以实现高可用性和灾难恢复...
Postgres支持多种复制模式,如异步复制、流复制和并行复制,以实现高可用性和灾难恢复。`wal2json`扩展可方便地将WAL日志转换为JSON格式,用于云存储和远程复制。 八、扩展与功能 Postgres允许开发和使用自定义函数...
repmgr, 最流行的PostgreSQL复制管理器( Postgres ) repmgr: PostgreSQL的复制管理器repmgr 是一组开源工具,用于在PostgreSQL服务器集群中管理复制和故障转移。 它使用实用程序设置备用服务器。监视复制和执行故障...
PostDock-Postgres + Docker 具有高可用性和自我修复功能的PostgreSQL集群,适用于任何云和docker环境(Amazon,Google Cloud,Kubernetes,Docker Compose,Docker Swarm,Apache Mesos)信息产品特点高可用性自我...
此外,还需在主库配置postgres.conf文件,设置wal_level参数为replica,意味着主从设置为在线模式,这是进行流复制所必须的。同时,还需设置max_wal_senders参数,表示允许连接进行流复制的进程数。wal_keep_...
张文杰-阿里云-PostgreSQL流复制优化.pdf 何祖文-贵州云飞-PG与智慧物流.pdf 张文升-探探科技-PostgreSQL和探探见证四亿次心动.pdf 姜瑞海-瀚高软件-PostgreSQL自适应流复制.pdf 张晓通-平安壹钱包-从金融...
首先,"postgresql-ha"镜像是基于PostgreSQL官方镜像进行扩展和增强的,旨在提供在Kubernetes集群中的自动故障切换和数据复制能力。它通常会包含如Patroni、etcd或Consul等协调器服务,这些服务负责监控PostgreSQL的...
特征为流创建SQL表使对象扁平化到父对象表中将行压缩到单独的表中在将新字段添加到流添加列和子表通过记录version和ACTIVATE_VERSION消息进行全流复制。安装添加libpq依赖# macosbrew install postgresql # ubuntu...
### 分布式流复制模式实现:pg + pgpool + Ubuntu 本篇文档旨在详细介绍如何通过PostgreSQL(简称pg)、pgpool-II与Ubuntu操作系统构建一个基于流复制技术的分布式数据库系统。这种架构能够有效提高系统的可用性和...