postgresql异步流复制安装与配置

使用配置 

数据库 postgresql-15.3

操作系统 centos-7        

hostportdbnamedatadire
主库10.0.0.198/245432postgres/home/postgres/pg/data
从库10.0.0.199/2425432postgres/home/postgres/pgback

首先主从之间的白名单和监听要打开

目录

主库配置

备库配置

主库进程

从库进程

主库配置

在主库上修改postgresql.conf相关参数

listen_addresses = '*'
 max_wal_senders = 10
wal_level = replica  或者使用logcial

min_wal_size=800MB

hot_standby = off  默认情况下是“off”   在从库启动后还会再次做介绍

这些参数的设定都需重启服务才能生效,所以在部署的时候相关参数就需要设定好。

另外,min_wal_size参数的默认值为“80MB”,该值通常太小,很容易导致备库失效,

也需要设置得大一些,默认的max_wal_size 是1GB 所以当要设置的值大于此时,两个参数需要同时调大。

在主库上修改pg_hba.conf相关参数增加一下两条内容

ip地址也可以使用0/0 替代  代表任意IP地址。

 可以指定用户  也可以使用ALL  这个用户权限必须具备replica        tion权限

主库中创建该用户

create user pgback with replication;

备库配置

在备库上生成基础备份

pg_basebackup -h 10.0.0.198 -U pgback -F p -P -X stream -R -D /home/postgres/pgback
- -h:指定要连接的服务器的主机名或IP地址。
- -U:指定连接使用的用户名。
- -Fp:指定备份的格式。在这种情况下,备份以纯文本格式存储。
- -P:指定在备份过程中显示进度信息。
- -X stream:指定备份的流式传输方法。
- -R:指定包括所有必需的WAL文件以进行一致性备份。
- -D:指定备份存储的目录。

 基础备份完成

在备份路径下/home/postgres/pgback/postgresql.auto.conf 文件可以查看备份时链接的相关信息。

pg_basebackup做基础备份时,没有设置-R参数相关的链接信息也就不会被记录到/home/postgres/pgback/postgresql.auto.conf 文件中

启动从库

pg_ctl -D pgback/ start 

此时的从库是一个只读状态,

从库被启动后再数据目录下还会生成一个standby.signal 的标识文件

用于指示 PostgreSQL 数据库引擎当前服务器是一个备用服务器,并通过流复制进行数据复制。

删除了 standby.signal 文件,数据库再次重启将不再被识别为备用服务器,并且流复制将停止。便需要再创建一个空的 standby.signal 文件,再重启数据服务。

---查看主从进程区别进程

ps -ef |grep postgres    ----查看主从进程区别进程

主库进程

主库进程会多一个walsender 进程   并可以知道从库的IP地址、库名以及wal日志发送的LSN发送节点。

从库进程

  从库会有一个walreceiver 进程,并告知当前接收的LSN接收节点      

 查看流复制状态

主库中可以使用 视图pg_stat_replication查看当前流复制的状态以及相关节点信息

 select  *  from pg_stat_replication; 

 
通过sync_state字段 显示为async 说明 我们现在创建的流复制是一个异步流复制状态,我会在下一篇文章继续给大家讲同步流复制的搭建
- pid:主库walsender进程ID。
- usesysid:登录到这个 WAL 发送进程的用户的 OID。
- usename:登录到这个 WAL 发送进程的用户名。
- application_name:连接到从库服务器的应用程序的名称。
- client_addr:连接到从库服务器的客户端的IP地址。
- client_hostname:连接上的客户端的主机名,由一次对client_addr的逆向 DNS 查找报告。 这个域将只对 IP 连接非空,并且只有在 log_hostname被启用时非空。。
- client_port:客户端用来与这个 WAL 发送进程通讯的 TCP 端口号,如果使用 Unix 套接字则为-1
- backend_start:这个进程开始的时间,即客户端是何时连接到这个WAL 发送进程的(从库数据库的服务被拉起,就会被记录到这个时间)。
- backend_xmin:从库服务器需要保留的最旧事务ID。
- state:当前的 WAL 发送进程状态。 可能的值是:

                startup: 这个WAL发送器正在启动。

                catchup: 这个WAL发送者连接的从库服务器正在赶上主服务器。

                streaming: 在其连接的从库服务器赶上主服务器之后,这个WAL发送方正在流化变化。

                backup: 这个WAL发送器正在发送一个备份。

                stopping: 这个WAL发送器正在停止。
- sent_location:已发送到从库服务器的WAL流中的位置(LSN)。
- write_location:已写入从库服务器磁盘上的WAL流中的位置(LSN)。
- flush_location:已刷新到从库服务器磁盘上的WAL流中的位置(LSN)。
- replay_location:已在从库服务器上重放的WAL流中的位置(LSN)。
- sync_priority:用于同步复制的从库服务器的优先级。
- sync_state:从库服务器的同步状态。 可能的值是:

                async: 从库服务器是异步的。

                potential: 从库服务器现在是异步的,但可能在当前的同步后备失效时变成同步的。

                sync: 从库服务器服务器是同步的。

                quorum: 从库服务器服务器被当做规定数量后备服务器的候选。

reply_time : 从库服务器收到的最后一条回复信息的发送时间。

从库中使用 pg_stat_wal_receiver 视图 查看流复制相关节点状态

select  *  from pg_stat_wal_receiver ;

- pid:从库walreceiver的进程ID。
- status:WAL接收器进程的活动状态(如果看到的流复制状态“state”的值不是“streaming”,也说明备库的流复制有问题。 )。
- receive_start_lsn:WAL接收器启动时使用的第一个写入前日志(WAL)位置。
- receive_start_tli:WAL接收器启动时使用的第一个时间线号。
- written_lsn:已接收并写入磁盘但尚未刷新的最后一个WAL位置。
- flushed_lsn:已接收并刷新到磁盘的最后一个WAL位置。
- received_tli:已接收并刷新到磁盘的最后一个WAL位置的时间线号。
- last_msg_send_time:从源WAL发送者接收到的最后一条消息的发送时间。
- last_msg_receipt_time:从源WAL发送者接收到的最后一条消息的接收时间。
- latest_end_lsn  :向源头WAL发送器报告的最后的预写式日志位置
- latest_end_time:这个WAL接收器使用的复制槽的名称
- sender_hos:这个WAL接收器连接到的PostgreSQL实例的主机。 这可以是主机名、IP地址,或者目录路径,如果连接是通过Unix套接字进行的。(路径的情况可以区分,因为它总是以/开头的绝对路径。)
- sender_port:这个WAL接收器连接的PostgreSQL实例的端口号。
- conninfo :这个WAL接收器使用的连接字符串,对安全敏感的字段进行了模糊处理。

使用pg_controldata 分别查看主从库的状态

还可以通过函数pg_is_in_recovery();判断时候属于从库

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值