PG学习笔记(1)—— 主从复制:流复制
闲云野鹤,乡夫俗子,不过一隅静土。
 
背景
PostgreSQL 9.1之前,主从复制传输以WAL日志文件为单位,主库写完WAL日志后再传输给从库,导致主从延迟较大。基于这种情况,PostgreSQL 9.1引入主从流复制,以WAL日志的record为传输单位,从库及时同步主库数据,并且应用每个WAL record,因此能做到同步复制。另外实现了Hot Standby,从库在应用WAL record的同事能够提供制度服务。
架构
PG主从流复制的核心有三个进程构成:
- walsender:用于主库发送WAL日志记录到从库;
 - walreceiver:用于从库接收主库的WAL日志记录;
 - startup:用于从库apply日志。
 

流复制的启动
1.启动过程

- 启动主从服务器;
 - 从库节点启动startup进程;
 - 从库节点启动walreceiver进程;
 - walreceiver进程向主库节点发送连接请求,如果主库尚未启动,walreceiver会定期重发该请求;
 - 当主节点收到连接请求时,将启动walsender进程,并建立walsender和walreceiver之间的TCP连接;
 - walreceiver发送从库节点最新的LSN;
 - 如果从库最新的LSN小于主库最新LSN,即落后。walsender会将前一个LSN到后一个LSN之间的wal数据发送到walreceiver;
 - 流复制开始工作。
 
2.walsender状态
通过pg_stat_replication试图可以查看所有运行的walsender状态
walsender进程可能的状态如下
- start-up
 - catch-up
 - streaming
 - backup
 
3。从库节点长期停机启动
- PostgreSQL 9.4之前,如果从库节点请求的WAL段在主库节点已经被覆盖,那么备份节点将无法追上主节点。暂时没有解决方案,需要把wal_keep_segments参数调大;
 - PostgreSQL 9.4之后,使用复制槽(replication)来预防——通过暂停walreceiver进程,将含有未发送wal段的pg_xlog保存在复制槽中。复制槽可以提供wal数据发送的灵活性,主要用于逻辑复制。
 
流复制过程
流复制包括两个方面:日志传输和数据同步
- 流复制基于日志传输,主节点会在写入日志记录时,将WAL数据发送到已连接的从库节点;
 

                  
                  
                  
                  
本文详细介绍了PostgreSQL的主从复制——流复制,包括其背景、架构、启动过程、同步策略以及从库故障检测。流复制通过walsender、walreceiver和startup进程实现,能实时同步主库数据,确保高可用性。
          
最低0.47元/天 解锁文章
                          
                      
      
          
                
                
                
                
              
                
                
                
                
                
              
                
                
              
            
                  
					944
					
被折叠的  条评论
		 为什么被折叠?
		 
		 
		
    
  
    
  
            


            