postgresql主从流复制-让你的数据库可靠起来

此处仅讨论一种技术方法,不做适用性评判和实际场景解决方案优劣的比较。因为对于数据库高可靠有更完善的解决方案,但是对技术能力和硬件设备要求都是比较高的。此处通过简单的部署、配置;较少的服务器(一主一从两台)即可完成基本的数据库高可靠,并实现读写分离的基础环境。
网络上也有很多主从流方案的介绍,可圈可点,本文旨在更直白的阐述原理及部署过程,适当加入自己的理解,希望能对各位有所启发。
在这里插入图片描述
从动图很直观地了解到pg主从流复制过程中主从库交互情况:

  1. 主备数据库启动;
  2. 备库启动walreceiver进程,同时该进程向主库发送连接请求;
  3. 主库收到连接请求后启动walsender进程,并与walreceiver进程建立tcp连接;
  4. 备库walreceiver进程发送最新的wal lsn给主库;
  5. 主库进行lsn对比,将没有传递的wal日志进行发送,同时调用SyncRepWaitForLSN()函数来获取锁存器,并且等待备库响应;
  6. 备库调用操作系统write()函数将wal写入缓存,然后调用操作系统fsync()函数将wal刷新到磁盘。同时备库向主库返回ack信息,ack信息中包含write_lsn、flush_lsn、replay_lsn,这些信息会发送给主库,用以告知主库当前wal日志在备库的应用位置及状态。

主库配置

创建同步用户replica

create role replica login replication encrypted password '******';

pg_hba.conf

host all all 从机 ip/32 trust #允许从机连接
host replication replica 从机 ip/32 md5 #允许从机使用 replica 用户来复制,多个从机可配置多行

postgresql.conf

listen_addresses=’*#监听所有 IP
archive_mode= on #允许归档
archive_command = 'cp %p /var/lib/pgsql/10/data/pg_archive/%f' #用该命令归档 logfile segment
wal_level = hot_standby
max_wal_senders = 32 #设置最多有几个流复制连接
wal_sender_timeout=60s#设置流复制发送数据的超时时间
max_connection = 100 #从库 max_connections 必须大于主库的
wal_keep_segments= 5000#设置流复制保留的最多的 xlog 数目

从库配置

recovery.conf

standby_mode = on
primary_conninfo  =  ‘host= 主 机 ip  port=5432  user=replica
password=replica’
recovery_target_timeline = ‘latest’

postgresql.conf

wal_level = hot_standby
max_connection=1000
hot_standby=on
max_standby_streaming_delay = 30s
wal_receiver_status_interval =10s
hot_standby_feedback = on
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值