PostgreSQL 13 异步流复制(#2.1)-202103

PostgreSQL 13 异步流复制(#2.1)-202103

简述:本章重点是异步流复制的学习。学习异步流复制前,我们先简单了解一下流复制的工作协助和启动顺序,这样才有助于我们更清晰的认识流复制配置的过程。

 

环境:

OS:RedHat 8.3

DB:PostgreSQL 13.1

Master:192.168.108.128

Replica:192.168.108.129

 

流复制中3个过程协作工作简介:

1.主库服务器上walsender进程把WAL数据发送到备库服务器

2.备库服务器上starup和walreceiver进程接受并重放这些WAL数据

3.walsender和walreceiver使用单个TCP连接进行通信

 

流复制进程启动顺序简介:

1.primary and standby servers

2.standby server start a startup process

3.standby server start walreceiver process

4.standby server walreceiver sends a connection request to primary server

5.when primary server receives a connection request, starts a walsender process and a tcp connection is established between the walsender and walreceiver 

6.walreceiver sends the latest LSN of standby’s database cluster

7.if standby’s LSN<primary’s LSN, the walsender sends WAL data from be former LSN to the latter LSN. The standby server replays the received WAL data. In this phase, the standby catches up with the primary.

8.streaming replication begins to work   

参考:http://www.interdb.jp/pg/pgsql11.html

 

1.主库                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                

1.1 安装postgresql db软件/初始化数据库

# 参考:《PostgreSQL 13 源码安装(#1.1)-202103》

1.2 监听设置

# 配置postgresql.conf

# listen_addresses:控制允许哪些ip地址访问,可以是一个ip,也可用是多个IP。高可用架构中一般情况使用vip连接,所以设置为’*’允许所有地址访问数据库

listen_addresses =‘*’

1.3 WAL模式设置

# 配置postgresql.conf

# wal_level 有3种模式,其中replica模式记录了WAL归档,复制,备库中启用只读查询等操作所需的WAL信息。WAL信息包含多少:minimal<replica<logical

wal_level = replica

1.4 主库被访问控制

# 配置pg_bha.conf

# 允许备库(192.168.108.129)使用repl用户通过md5口令认证连接replication数据库[replication是PostgreSQL用于复制的特殊伪数据库的名称]

host replication repl 192.168.108.129/32 md5

1.5 创建复制数据库用户及赋权

# 创建一个具有复制权限的角色

create role repl login replication encrypted password 'repl123!';

1.6 主库重启激活修改的参数

pg_ctl -D $PGDATA stop -m fast

pg_ctl -D $PGDATA -l logfile start

 

2.备库

2.1 安装postgresql db软件

# 参考:《PostgreSQL 13 源码安装(#1.1)-202103》

2.2 创建~/.pgpass(用于免密登录)

touch .pgpass

chmod 0600 .pgpass

vi ~/.pgpass

192.168.108.128:5432:replication:repl:repl123!

2.3 使用pg_basebackup基准数据恢复-R 自动创建standby.signal

pg_basebackup -h 192.168.108.128 -U repl -D /db/pg13/data/slavedb -Xs -P -R

# /db/pg13/data/slavedb是从库创建一个新目录,用来恢复主库的cluster databases

# -h 主库ip地址

# -U 指定连接主库的用户

# -D 从库复制数据的目录

# -Xs 主库备份时,以流式传输WAL日志内容

# -P 进度报告

# -R 创建一个standby.signal空文件,用于在集群中激活standby server,有这个standby.signal文件即为备库;另外也可以把主库一些连接信息primary_conninfo写入备库postgresql.auto.conf

参考:https://www.digitalocean.com/community/tutorials/how-to-set-up-physical-streaming-replication-with-postgresql-12-on-ubuntu-20-04

2.4 备库连接主库字符串查看

2.4.1 pg_basebackup -R 自动产生standby.signal

# standby.signal为空。如主备切换时,会自动删除这个文件。standby.signal空文件,用于在集群中激活standby server,有这个standby.signal文件即为备库

cat standby.signal 

2.4.2 pg_basebackup -R 把主库一些连接信息primary_conninfo写入备库postgresql.auto.conf

cat postgresql.auto.conf

# Do not edit this file manually!

# It will be overwritten by the ALTER SYSTEM command.

primary_conninfo = 'user=repl passfile=''/home/pg13/.pgpass'' channel_binding=disable host=192.168.108.128 port=5432 sslmode=disable sslcompression=0 ssl_min_protocol_version=TLSv1.2 gssencmode=disable krbsrvname=postgres target_session_attrs=any'

# In PostgreSQL 12 and newer versions, standby_mode is gone, replaced by standby.signal to trigger a standby state at recovery.

# primary_conninfo:Specifies a connection string to be used for the standby server to connect with a sending server.

# user:PostgreSQL连接数据库用户

# channel_binding:disable是阻止使用通道绑定

# host:连接的主机名称

# port:端口

# sslmode:disable是仅尝试使用non-SSL连接

# sslcompression:通过ssl连接发送数据;0是禁止压缩,1是压缩

# ssl_min_protocol_version:允许最小的SSL/TLS协议版本

# gssencmode:是否使用GSS TCP/IP;disable是仅尝试non-GSSAPI-encrypted加密连接 

# krbsrvname:当使用Kerberos service时,用postgres身份进行GSSAPI认证

# target_session_attrs:any所有连接均可以接受

# passfile:用于存储密码的文件

参考:https://www.postgresql.org/docs/13/libpq-connect.html#LIBPQ-CONNSTRING

 

3.重启cluster databases

3.1 备库启动激活修改的参数和流复制

pg_ctl -D $PGDATA -l logfile start

pg_ctl -D $PGDATA stop -m fast

# 重启不是必须的,但重启可以把我们所有修改的参数生效,索性重启了。先主后从,这个顺序不能变。

 

4.流复制验证

4.1 主库

\x

select * from pg_stat_replication;

postgres=# select * from pg_stat_replication;

-[ RECORD 1 ]----+------------------------------

pid              | 18026

usesysid         | 16384

usename          | repl

application_name | walreceiver

client_addr      | 192.168.108.129

client_hostname  | 

client_port      | 34840

backend_start    | 2021-03-30 13:55:13.460422+08

backend_xmin     | 

state            | streaming

sent_lsn         | 0/6000060

write_lsn        | 0/6000060

flush_lsn        | 0/6000060

replay_lsn       | 0/6000060

write_lag        | 

flush_lag        | 

replay_lag       | 

sync_priority    | 0

sync_state       | async

reply_time       | 2021-03-30 13:56:13.650865+08

4.2 从库

\x

select * from pg_stat_wal_receiver;

postgres=# select * from pg_stat_wal_receiver;

-[ RECORD 1 ]---------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

pid                   | 19398

status                | streaming

receive_start_lsn     | 0/6000000

receive_start_tli     | 1

written_lsn           | 0/6000060

flushed_lsn           | 0/6000060

received_tli          | 1

last_msg_send_time    | 2021-03-30 13:56:43.711174+08

last_msg_receipt_time | 2021-03-30 13:56:43.708336+08

latest_end_lsn        | 0/6000060

latest_end_time       | 2021-03-30 13:55:13.462654+08

slot_name             | 

sender_host           | 192.168.108.128

sender_port           | 5432

conninfo              | user=repl passfile=/home/pg13/.pgpass channel_binding=disable dbname=replication host=192.168.108.128 port=5432 fallback_application_name=walreceiver sslmode=disable sslcompression=0 ssl_min_protocol_version=TLSv1.2 gssencmode=disable krbsrvname=postgres target_session_attrs=any

 

4.3 主库创建测试database,测试备库的流复制状况

4.3.1 主库

Create database asyncdb;

\l

4.3.2 备库

\l

-[ RECORD 1 ]-----+--------------

Name              | asyncdb

Owner             | pg13

Encoding          | UTF8

Collate           | en_US.utf8

Ctype             | en_US.utf8

 

5. 异步流复制已完成配置。

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值