postgersql主从配置


环境信息

pg版本:10.12.1

主:172.20.0.231

备:172.20.0.152

安装目录:PGHOME = /home/nh/pg/pgsql/

data目录:PGDATA = /nhdata/busi_db/

主数据库

修改postgresql.conf文件

wal_level = hot_standby   #WAL日志信息的输出级别,minimal、replica、logical三种模式
synchronous_commit = off    #只能为off,否则主库会一直等待备机响应,备机故障时主机也会出问题
max_wal_senders = 10            #默认为10,一个流复制备库通常只需要消耗流复制主库一个WAL 发送进程,必须小于max_connections
wal_keep_segments = 512        #越大越好,根据归档存储空间定,默认单个WAL文件大小为16M,此处512×16MB=8GB
hot_standby = on                #开启流复制
logging_collector = on        #开启日志
log_directory = 'pg_log'    #开启日志路径
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'    #开启日志文件名

创建replication用户

./psql -U postgres

create user repli replication LOGIN password '123456';

配置pg_hba.conf文件

添加以下配置,考虑到主备角色互换,建议pg_hba.conf主备完全一样

host    replication      repli      172.20.0.231/32            md5
host    replication      repli      172.20.0.152/32            md5

重启数据库

pg_ctl -D $PGDATA restart

备数据库

1) 测试从服务器能否连接主服务器数据库

psql -h 172.20.0.231 -U postgres

#连接成功后停掉从库的服务,清空从节点数据
rm –rf $PGDATA/*

2) 从主节点拷贝数据到从节点

#pg_basebackup -h 10.251.9.39 -U repli -D $PGDATA -X stream –P
 ./pgsql/bin/pg_basebackup -D $PGDATA -Fp -Xs -v -P -h 172.20.0.231 -U repli

3) 修改recovery.conf文件

复制share目录(pgsql/share/postgresql/recovery.conf.sample)下的recovery.conf.sample文件

cp $PGHOME/share/recovery.conf.sample $PGDATA/recovery.conf

修改以下配置

standby_mode='on'
recovery_target_timeline = 'latest'
#配置主机的ip、用户、端口等,repli即主库创建的用于流复制的用户
primary_conninfo='host=172.20.0.231 port=5432 user=repli password=123456'
trigger_file='/nhdata/busi_db/trigger'

重启备库

pg_ctl -D $PGDATA restart

查看主备状态

  1. 通过进程查看 ps -aux | grep postgres

    主库为wal sender

    备库为wal receiver

  2. 执行SQL

    select  client_addr,sync_stat  from pg_stat_replication;
    --说明client_addr服务器是从节点,在接收流,而且是异步流复制
    select pg_is_in_recovery(); --主库是false 备库是true
  3. 通过建表、插入数据测试即可

主从切换

文件触发方式

1、配置备库recovery.conf文件trigger_file参数

2、关闭主库

$ pg_ctl stop -m fast

3、 在备库上创建trigger_file,

$ touch $PGDATA/trigger

触发器文件名称和路径需和recovery.conf配置文件trigger_file保持一致,再次查看recovery文件时,发现后辍由原来的.conf变成了.done,表示备库切换为主库成功。

4、老的主库切换成备库

拷贝老的备库recovery.done(recovery.conf)文件到新备库,修改IP地址为新主库IP

primary_conninfo='host=172.20.0.152 port=5432 user= repli password=123456'

5、启动新备库

$ pg_ctl -D $PGDATA start

pg_ctl promote方式

1、关闭主库

$ pg_ctl stop -m fast

2、在备库上执行pg_ctl prompt命令激活备库,如果recovery.conf变成recovery.done表示备库已切换成为主库。

3、 老的主库切换成备库

拷贝老的备库recovery.done(recovery.conf)文件到老主库,修改IP地址为新主库IP

primary_conninfo='host=172.20.0.152 port=5432 user= repli password=123456'

4、观察主、备库是否正常


文章作者: ghf
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 ghf !
评论
 上一篇
安装MinIO 安装MinIO
安装Minio下载地址:https://minio.org.cn/download.shtml#/linux 编辑启动脚本 #!/bin/sh export MINIO_ROOT_USER=admin export MINIO_ROOT_P
2023-10-09
下一篇 
网络IO模型 网络IO模型
同步(synchronous) IO和异步(asynchronous) IO,阻塞(blocking) IO和非阻塞(non-blocking)IO分别是什么,到底有什么区别?这个问题其实不同的人给出的答案都可能不同,比如wiki,就认为a
2020-09-24