Postgresql12主从配置及切换

一、主从安装

1、依据“Centos7安装最新版Postgresql”操作,注意个别细节选择主从配置

2、注意:从服务器只能查询,不能写入

3、主库IP=103,备库IP=104

 

二、主服务器

1、添加pg用于同步的用户名

su - postgres

psql

# 创建具有复制流操作的用户:replica

CREATE ROLE replica login replication encrypted password '123456';

 

1、修改配置文件:pg_hba.conf,信任从服务器访问

1)vi /app/pgsql/data/pg_hba.conf

文件尾部添加信任的从服务器

# replica为postgres用户

# XX.XX.XX.XX为从节点的完整IP,如果为网段配置就不是32了,md5为允许密码验证,trust为免密

# TYPE DATABASE USER ADDRESS METHOD

host replication replica 192.168.100.104/32 trust

 

2、修改配置文件:postgresql.conf

vi /app/pgsql/data/postgresql.conf

# 新增或修改下列属性设置(使用命令“/”来查找,否则眼花)

listen_addresses = '*' # (修改)监听所有IP

max_connections = 100 # (修改)最大连接数,据说从机需要大于或等于该值

 

archive_mode = on # (修改)开启归档

archive_command = 'test ! -f /app/pgsql/pg_archive/%f && cp %p /app/pgsql/pg_archive/%f'

 

wal_level = replica # (添加)

wal_keep_segments = 16 # (修改)暂时还不知道设置为多大合适

wal_sender_timeout = 60s # (修改)

 

3、重启服务

systemctl restart postgresql-12

 

4、在从节点上验证访问

psql -h 192.168.100.103 -U postgres

# 如果发现不知道密码或密码不正确,修改postgres用户密码(数据库)

ALTER USER postgres WITH PASSWORD '你的密码';

 

三、从服务器

1、停止服务

systemctl stop postgresql-12

 

2、切换用户(一定要)

su - postgres

 

3、清空数据文件夹(是这样的,没错)

rm -rf /app/pgsql/data/*

cd /app/pgsql/data

 

4、从主节点获取数据

# 使用replica用户,从主节点获取备份数据(这条命令建议照抄,有兴趣在深究内部参数)

pg_basebackup -h 192.168.100.103 -p 5432 -U replica -Fp -Xs -Pv -R -D /app/pgsql/data

 

5、编辑standby.signal文件(就在数据文件夹内,以此标识从节点,当从节点提升为主节点后会自动删除)

# 添加

standby_mode = 'on'

 

6、修改postgresql.conf文件

vi /app/pgsql/data/postgresql.conf

primary_conninfo = 'host=192.168.100.103 port=5432 user=replica password=123456'

recovery_target_timeline = latest # 默认

max_connections = 120 # 大于等于主节点,正式环境应当重新考虑此值的大小

hot_standby = on

max_standby_streaming_delay = 30s

wal_receiver_status_interval = 10s

hot_standby_feedback = on

 

7、重新启动从节点

systemctl start postgresql-12

 

四、验证主从

方法一:

登录主节点数据库执行如下命令

su postgres

psql

select client_addr,sync_state from pg_stat_replication;

结果如下:

postgres=# select client_addr,sync_state from pg_stat_replication;

client_addr | sync_state

---------------+------------

192.168.100.104 | async

(1 row)

说明104服务器是从节点,在接收流,而且是异步流复制

 

方法二:

在主节点与从节点分别执行如下命令

ps -ef | grep postgres

可以看到主节点有wal receiver进程

postgres 2638 2606 0 17:12 ? 00:00:00 postgres: walsender replica 192.168.100.104(51504) streaming 0/7000660

可以看到从节点有wal receiver进程

postgres 1960 1953 0 17:12 ? 00:00:02 postgres: walreceiver streaming 0/7000660

 

 

五、主备切换(主库出现故障时)

当主库出现故障时,我们需要将备库提升为主库进行读写操作。

0、在pg12之前我们一般使用2种方式:

1)pg_ctl 方式: 在备库主机执行 pg_ctl promote shell 脚本

2)触发器文件方式: 备库配置 recovery.conf 文件的 trigger_file 参数,之后在备库主机上创建触发器文件

 

1、pg12开始新增了一个pg_promote()函数,让我们可以通过SQL命令激活备库。

pg_promote()语法:

pg_promote(wait boolean DEFAULT true, wait_seconds integer DEFAULT 60)

两个参数:

wait: 表示是否等待备库的 promotion 完成或者 wait_seconds 秒之后返回成功,默认值为 true。

wait_seconds: 等待时间,单位秒,默认 60

 

2、切换举例:

1)主库操作:关闭主库,模拟主库故障:

systemctl stop postgresql-12

2)备库操作:激活备库:

su postgres

psql

select pg_promote(true,60);

 

4、验证:

/usr/pgsql-12/bin/pg_controldata /app/pgsql/data

主备库英文显示如下:

Database cluster state: in production

Database cluster state: in archive recovery

主备库中文显示如下:

数据库簇状态: 在运行中

数据库簇状态: 正在归档恢复

 

 

六、原主库修复后降为备库(其实大部分操作与建立备库时一样,只是修改几个IP地址)

1、新主库(104):

# vi /app/pgsql/data/pg_hba.conf

host replication replica 192.168.100.103/32 trust

# systemctl restart postgresql-12

 

2、新备库(103)

# systemctl stop postgresql-12

# su - postgres

# rm -rf /app/pgsql/data/*

# cd /app/pgsql/data

# pg_basebackup -h 192.168.100.104 -p 5432 -U replica -Fp -Xs -Pv -R -D /app/pgsql/data

# vi standby.signal

# 添加

standby_mode = 'on'

 

vi /app/pgsql/data/postgresql.conf

primary_conninfo = 'host=192.168.100.104 port=5432 user=replica password=123456'

 

# systemctl start postgresql-12

 

七、再次将老主库切回主库

1、当前备库:

> 停止服务

> 删除“/app/pgsql/data/standby.signal”文件

> 启动服务

2、当前主库:

> 停止服务

> 以“postgres”用户创建“/app/pgsql/data/standby.signal”文件,添加内容:standby_mode = 'on'

> 启动服务

 

 

  • 1
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
好的,下面是 Docker PostgreSQL12 流复制主从同步的配置切换步骤: 1. 首先,在主数据库中修改 postgresql.conf 和 pg_hba.conf 文件,分别设置流复制相关参数和允许从服务器连接。 postgresql.conf 文件中需要设置以下参数: ``` wal_level = replica max_wal_senders = 5 wal_keep_segments = 32 ``` pg_hba.conf 文件中需要添加以下规则: ``` host replication all <从服务器IP地址>/32 md5 ``` 2. 重新启动主服务器,使配置生效。 3. 在从服务器中创建一个空的目标数据库,并且在 postgresql.conf 文件中设置以下参数: ``` hot_standby = on ``` 4. 使用 pg_basebackup 命令将主服务器上的数据复制到从服务器上: ``` pg_basebackup -h <主服务器IP地址> -U <用户名> -D /var/lib/postgresql/data -P --xlog-method=stream ``` 5. 在从服务器中创建一个 recovery.conf 文件,指定流复制配置参数: ``` standby_mode = on primary_conninfo = 'host=<主服务器IP地址> port=<主服务器端口> user=<用户名> password=<密码>' ``` 6. 启动从服务器。 7. 可以使用 pg_ctl 命令来检查主从同步状态: ``` pg_ctl status -D /var/lib/postgresql/data ``` 8. 如果需要切换主从角色,需要在从服务器上执行以下步骤: - 在主服务器上停止 PostgreSQL 服务; - 在从服务器上编辑 recovery.conf 文件,修改 primary_conninfo 参数为从服务器的连接信息; - 在从服务器上启动 PostgreSQL 服务; - 验证从服务器是否已成为新的主服务器。 希望这些步骤能够帮助到你,如果有任何问题,请随时问我。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值