主备的判断方法:
1、通过pg_controldata命令
主:
备:
2、通过进程ps -ef|grep postgres查看,显示wal sender的是主机,显示wal receiver的是备机
主:
备:
3、连接数据库服务器,输入语句进行判断
postgres=# select procpid,usename,application_name,client_addr,client_port,state,sync_state from pg_stat_replication;
主:
procpid | usename | application_name | client_addr | client_port | state | sync_state
---------+---------+------------------+---------------+-------------+-----------+-----------
7101 | repuser | walreceiver | 192.168.2.137 | 46655 | streaming | async
备:
(0 row)
postgres=# select pg_is_in_recovery();
主:
pg_is_in_recovery
-------------------
f
备:
pg_is_in_recovery
-------------------
t
模拟主机故障,备机切换为主机
主:
[postgres@cqs data]$ pg_ctl stop -D /home/postgres/data/
备:
主机数据库关闭后,备机的数据库日志出现了大量的错误
[postgres@cqs ~]$ cat /home/postgres/data/pg_log/xxxxxx.csv
[postgres@cqs ~]$ cd /home/postgres/data/
[postgres@cqs data]$ cat recovery.conf
standby_mode='on' --标记pg为standby server
primary_conninfo='host=192.168.214.134 port=5432 user=postgres password=000 '--标记主库的信息
trigger_file='/home/postgres/data/trigger_active.5432'--标识触发器文件
[postgres@cqs data]$ touch trigger_active.5432
通过创建触发器文件trigger_active.5432后,recovery.conf变成了recover.done
[postgres@cqs data]$ vim pg_hba.conf
host replication postgres 192.168.214.0/24 md5
重启数据库服务,备机已经转为主机数据库了。
[postgres@cqs data]$ pg_ctl restart -D /home/postgres/data/
[postgres@cqs data]$ pg_controldata
至此,原备机的配置完成
接下来,原主机将进行以下配置:
[postgres@cqs data]$ pwd
/home/postgres/data
[postgres@cqs data]$ vim recovery.conf
recovery_target_timeline = 'latest'
standby_mode = 'on'
primary_conninfo = 'host=192.168.214.134 port=5432 user=postgres password=000'
trigger_file='/home/postgres/data/trigger_active.5432'
[postgres@cqs data]$ vim postgresql.conf
#hot_standby = off
修改为hot_standby = on
重启数据库服务
[postgres@cqs data]$ pg_ctl restart -D /home/postgres/data/
完成了原主机转为备机的配置。