`
lykops
  • 浏览: 86182 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

postgres--流复制

 
阅读更多

配置

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文件的访问权限
或者限制只允许特定的从机访问
分享到:
评论

相关推荐

    Postgres-10.12.1v-20200803.tar.gz

    在PG中,我们可以使用流复制(Streaming Replication)实现主从架构。这个压缩包包含了主从切换的配置,使得用户能够在主数据库出现故障时快速将流量切换到从库,保证业务连续性。主从复制的基本步骤包括设置主库,...

    postgres-REL_14_5.tar.gz

    "postgres-REL_14_5.tar.gz" 是一个与 PostgreSQL 数据库服务器相关的...此外,了解备份和恢复策略、复制和高可用性解决方案(如流复制或 Patroni),以及监控和诊断工具,都是确保 PostgreSQL 系统正常运行的关键。

    postgres-REL-15-3.tar.gz

    9. **复制与高可用**:PostgreSQL支持多种复制模式,如流复制、逻辑复制,用于构建高可用性和灾难恢复解决方案。 10. **故障排查**:理解日志文件的内容、错误代码的含义,以及如何解决常见的错误和问题。 11. **...

    postgres_exporter-0.9.0.linux-amd64.tar.gz

    PostgreSQL是一种强大的开源关系型数据库管理系统,它支持SQL标准并提供许多高级特性,如事务处理、复制和复杂的查询。在企业级应用中,PostgreSQL因其稳定性和可靠性而被广泛采用。 然后,Prometheus是云原生计算...

    Postgres主从流复制+pgpool高可用方案.docx

    【Postgres主从流复制+pgpool高可用方案】 一、方案介绍 1. 方案综述 在数据库系统中,高可用性是至关重要的,它确保即使在硬件故障或其他异常情况下,服务也能不间断地运行。PostgreSQL 提供了一种名为“流复制...

    postgres-example:Postgres示例项目

    10. **复制与高可用性**:Postgres的复制功能(如流复制、归档复制)使得实现高可用性和灾难恢复成为可能。项目可能包含配置复制的步骤和注意事项。 通过这个项目,你可以亲自动手实践,从而巩固理论知识,并了解到...

    PostgreSQL基于ETCD mirror-make流复制搭建跨DC的PG集群高可用方案

    ### PostgreSQL基于ETCD mirror-make流复制搭建跨DC的PG集群高可用方案 #### 第1章 简介 本文档旨在介绍如何利用ETCD提供的工具`mirror-maker`以及Patroni来实现一个跨数据中心(DC)的PostgreSQL(PG)集群高可用...

    postgres-REL_14_3.tar.gz

    6. **复制与扩展**:利用PostgreSQL的流复制功能实现高可用性和负载均衡,或者通过并行查询、分区等技术提升处理能力。 四、在服务器上的部署 在服务器环境中,确保PostgreSQL服务的稳定性至关重要。这包括定期检查...

    postgres-codes

    7. **复制和高可用性**:PostgreSQL提供了多种复制选项,如流复制和逻辑复制,用于实现数据冗余和灾难恢复。 8. **性能优化**:这包括选择正确的数据类型,使用索引,避免全表扫描,以及监控和调整查询计划。 9. *...

    Live-data-streaming-from-RDS-Postgres-to-Redshift:Key2Market的Clod Formation模板可设置从RDS Postgres到Redshift的实时数据流

    为什么要使用逻辑复制逻辑复制是从Postgres数据库流式传输WAL日志的一种选择。 它允许以可以在其他应用程序中解析和使用的格式输出数据。 例如, 此设置中的lambda将输出如下的json文件: { " changes " : [ { " ...

    PostgreSQL 12流复制实施手册

    **PostgreSQL 12流复制实施手册** 在深入探讨PostgreSQL 12的流复制之前,我们首先要理解复制的基本概念。复制是数据库系统中的一个重要特性,它允许数据在一个或多个服务器之间实时同步,以实现高可用性和灾难恢复...

    postgres数据库用户手册

    Postgres支持多种复制模式,如异步复制、流复制和并行复制,以实现高可用性和灾难恢复。`wal2json`扩展可方便地将WAL日志转换为JSON格式,用于云存储和远程复制。 八、扩展与功能 Postgres允许开发和使用自定义函数...

    repmgr, 最流行的PostgreSQL复制管理器( Postgres ).zip

    repmgr, 最流行的PostgreSQL复制管理器( Postgres ) repmgr: PostgreSQL的复制管理器repmgr 是一组开源工具,用于在PostgreSQL服务器集群中管理复制和故障转移。 它使用实用程序设置备用服务器。监视复制和执行故障...

    PostDock:PostDock-Postgres和Docker-适用于任何Docker环境的Postgres流复制集群

    PostDock-Postgres + Docker 具有高可用性和自我修复功能的PostgreSQL集群,适用于任何云和docker环境(Amazon,Google Cloud,Kubernetes,Docker Compose,Docker Swarm,Apache Mesos)信息产品特点高可用性自我...

    PostgreSQL 12.2流复制实施步骤详细手册

    此外,还需在主库配置postgres.conf文件,设置wal_level参数为replica,意味着主从设置为在线模式,这是进行流复制所必须的。同时,还需设置max_wal_senders参数,表示允许连接进行流复制的进程数。wal_keep_...

    Postgresql中国用户大会 2016(PG大象会)所有PPT汇总.zip

    张文杰-阿里云-PostgreSQL流复制优化.pdf 何祖文-贵州云飞-PG与智慧物流.pdf 张文升-探探科技-PostgreSQL和探探见证四亿次心动.pdf 姜瑞海-瀚高软件-PostgreSQL自适应流复制.pdf 张晓通-平安壹钱包-从金融...

    postgresql-ha镜像补充

    首先,"postgresql-ha"镜像是基于PostgreSQL官方镜像进行扩展和增强的,旨在提供在Kubernetes集群中的自动故障切换和数据复制能力。它通常会包含如Patroni、etcd或Consul等协调器服务,这些服务负责监控PostgreSQL的...

    target-postgres:Postgres的Singer.io目标

    特征为流创建SQL表使对象扁平化到父对象表中将行压缩到单独的表中在将新字段添加到流添加列和子表通过记录version和ACTIVATE_VERSION消息进行全流复制。安装添加libpq依赖# macosbrew install postgresql # ubuntu...

    pg+pgpool+Ubuntu 实现分布式流复制模式

    ### 分布式流复制模式实现:pg + pgpool + Ubuntu 本篇文档旨在详细介绍如何通过PostgreSQL(简称pg)、pgpool-II与Ubuntu操作系统构建一个基于流复制技术的分布式数据库系统。这种架构能够有效提高系统的可用性和...

Global site tag (gtag.js) - Google Analytics