postgres判断主备角色的五种方法

方式一:操作系统上查看WAL发送进程或WAL接收进程

流复制主库上有WAL发送进程,流复制备库上有WAL接收进程

主库

[postgres@postgres pg11]$ ps -ef | grep "wal" | grep -v "grep"
postgres   6199   6195  0 10:55 ?        00:00:01 postgres: walwriter      
postgres  25659   6195  0 19:03 ?        00:00:00 postgres: walsender replica 192.168.40.131(40508) streaming 0/5000360
[postgres@postgres pg11]$ 

备库

[postgres@postgreshot ~]$ ps -ef | grep "wal" | grep -v "grep"
postgres   4518   4511  0 10:19 ?        00:00:00 postgres: wal writer process   
postgres  93162  93157  0 19:03 ?        00:00:17 postgres: walreceiver   streaming 0/5000360
[postgres@postgreshot ~]$ 

方式二:数据库上查看WAL发送进程或WAL接收进程

数据库层面查看WAL发送进程和WAL接收进程,例如在主库上查询pg_stat_replication视图,如果返回记录说明是主库,备库上查询此视图无记录,如下所示:

postgres=# 
postgres=# SELECT pid,usename,application_name,client_addr,state,sync_state  FROM pg_stat_replication ;
  pid  | usename | application_name |  client_addr   |   state   | sync_state 
-------+---------+------------------+----------------+-----------+------------
 25659 | replica | pg1              | 192.168.40.131 | streaming | sync
(1 row)

postgres=# 

同样,在备库上查看pg_stat_wal_receiver视图,如果返回记录说明是备库,流复制主库上此视图无记录,

如下所示:

postgres=# \x
Expanded display is off.
postgres=# SELECT pid,status,last_msg_send_time,last_msg_receipt_time,conninfo
FROM pg_stat_wal_receiver ;
  pid  |  status   |      last_msg_send_time       |    last_msg_receipt_time     |                                                                          
                            conninfo                                                                                                      
-------+-----------+-------------------------------+------------------------------+--------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------------------------
 93162 | streaming | 2019-03-26 23:15:49.733418-04 | 2019-03-26 23:16:23.26434-04 | user=replica passfile=/home/postgres/.pgpass dbname=replication host=192.
168.40.130 port=5442 application_name=pg1 fallback_application_name=walreceiver sslmode=disable sslcompression=0 target_session_attrs=any
(1 row)

postgres=# 

 

方式三:通过系统函数查看

登录数据库执行以函数,如下所示:

postgres=# SELECT pg_is_in_recovery();
 pg_is_in_recovery 
-------------------
 t
(1 row)

postgres=# 

如果返回t说明是备库,返回f说明是主库

方式四:查看数据库控制信息

通过pg_controldata命令查看数据库控制信息,内容包含WAL日志信息、checkpoint、数据块等信息,通过Databasecluster state信息可判断是主库还是备库,如下所示:

[postgres@postgres ~]$ pg_controldata | grep cluster
Database cluster state:               in production
[postgres@postgres ~]$ 

以上查询结果返回in production表示为主库,返回in archive recovery表示是备库,

如下所示:

[postgres@postgreshot ~]$ pg_controldata | grep cluster
Database cluster state:               in archive recovery
[postgres@postgreshot ~]$ 

方式五:通过recovery.conf配置文件查看

在备库$PGDATA目录下会创建recovery.conf配置文件,如果存在这个文件说明是备库,如果$PGDATA目录不存在此文件或此文件后缀名是recovery.done则说明是主库。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Windows下设置PostgreSQL的主备(主服务器和份服务器)可以通过以下步骤完成: 1. 安装PostgreSQL:首先,在主服务器和份服务器上分别安装相同版本的PostgreSQL。你可以从官方网站(https://www.postgresql.org/download/windows/)下载最新的Windows安装程序。 2. 配置主服务器:在主服务器上,打开PostgreSQL安装目录中的postgresql.conf文件(默认路径为C:\Program Files\PostgreSQL\<版本号>\data\postgresql.conf)。找到以下行,并进行相应的更改: ``` # 启用归档模式 archive_mode = on # 指定归档命令 archive_command = 'copy "%p" "归档路径\%f"' ``` 确保将"归档路径"替换为一个份存储的有效路径。保存并关闭文件。 3. 配置份服务器:在份服务器上,打开PostgreSQL安装目录中的postgresql.conf文件。找到以下行,并进行相应的更改: ``` # 启用热 hot_standby = on # 指定主服务器的连接信息 primary_conninfo = 'host=主服务器IP地址 port=5432 user=用户名 password=密码' # 指定归档命令 restore_command = 'copy "归档路径\%f" "%p"' ``` 确保将"主服务器IP地址"、"用户名"和"密码"替换为实际的连接信息,并将"归档路径"替换为与主服务器相同的路径。保存并关闭文件。 4. 启动主服务器和份服务器:在两台服务器上分别启动PostgreSQL服务。你可以使用"pg_ctl"命令来启动服务,如: ``` pg_ctl start -D "安装目录\data" ``` 5. 配置流复制:在份服务器上,创建一个名为"recovery.conf"的文件,内容如下: ``` standby_mode = 'on' primary_conninfo = 'host=主服务器IP地址 port=5432 user=用户名 password=密码' trigger_file = '安装目录\data\trigger' ``` 确保将"主服务器IP地址"、"用户名"和"密码"替换为实际的连接信息。保存并关闭文件。 6. 启动份服务器:在份服务器上启动PostgreSQL服务后,它将连接到主服务器并开始进行流复制。 这样,你就完成了在Windows下设置PostgreSQL的主备配置。主服务器将负责处理所有的写操作,而份服务器将通过流复制从主服务器同步数据,并提供读访问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值