2024年3月10日发(作者:)

postgreSQL(Windows)主从环境部署

一、 准备工作

操作系统:Windows Server 2012 数据中心版

数据库:postgreSQL 10.3-3windows(官网下载)

辅助工具:navicat for postgreSQL

环境规划:

IP

项目 名称

WIN-40CB17R2OCR 192.168.200.134

服务器1

WIN-HEP9O6966PI 192.168.200.135

服务器2

注:postgreSQL从9.0开始支持流复制,所以不需要一定时最新版本,不过建议不同节点

使用统一版本数据库。windows也不必固定版本,不同的windows版本也可以运行和部署主从

环境(server和非server,从win7到最新版应该都没有问题)。

二、 安装windows

1、安装windows,过程略,注意关防火墙即可。

三、 安装PostgreSQL及主从

1、安装postgresql

两个节点使用安装文件独立安装postgresql和navicat,过程略,基本按下一步就行,

就安装目录需要配置。

安装目录为D:Program Files。

2、配置主节点(134)

1)创建replica用户设置密码,登录和备份权限,打开navicat,执行下面语句:

CREATE ROLE replica login replication encrypted password 'replica'

设置了replica这个用户可以从192.168.200.0对应的网段进行流复制请求,编辑

pg_,路径D:Program FilesPostgreSQL10datapg_添加一行,保存:

host replication replica 192.168.200.0/24 md5

如图:

2)编辑 ,路径D:Program

hot_standby = on

wal_level = hot_standby

max_wal_senders = 5

# 这个设置了可以最多有几个流复制连接,

4)保存后重启节点1的服务。

wal_keep_segments = 128

# (可选择设置)

wal_sender_timeout = 60s

# (可选择设置)设置流复制主机发送数据的超时时间

3)重启134的节点。

# (可选择设置)这个默认就是100,从库的值必须要

max_connections = 100

大于主库的

3、配置从节点(135)

1)关闭postgresql服务,删除本地库(data目录)

删除D:Program FilesPostgreSQL10data目录下所有文件和文件夹

2)复制库

打开cmd,进入目录D:Program FilesPostgreSQL10bin执行一下语句:

pg_basebackup -F p -P -R --progress -D "D:Program

FilesPostgreSQL10data" -h 192.168.200.134 -p 5432 -U replica --password

3)成功之后,就可以看到data目录中现有的文件和主节点服务器都是一样的而且还

有一个自动生成的。

4)编辑 ,修改一下项目

max_connections = 200

hot_standby = on

max_standby_streaming_delay = 30s # 数据流备份的最大延迟时间

wal_receiver_status_interval = 10s # 类似心跳

hot_standby_feedback = on # 如果有错误的数据复制,是否向主进行反馈

5)启动从节点postgresql服务即完成

4、完成检查

完成后,可以在主节点134上查看主从设置:

select * from pg_stat_replication

结果如图:

5、修改异步为同步

1)主节点数据库配置(134),给同步主机命名standby01,修改:

synchronous_standby_names = 'standby01'

然后重启postgresql服务。

2)从节点数据库配置(135)配置

standby_mode = on

primary_conninfo = 'application_name=standby01 host=192.168.200.134

port=5432 user=replica password=replica'

recovery_target_timeline = 'latest'

然后重启postgresql服务。

四、 主从切换

postgresql是可以实现失效切换的,比如在主节点不提供服务后,可以将从节点转换

为主节点继续提供服务。

1、原从节点切成主节点(135)

A、关闭主节点(134)的postgresql服务。

B、在从节点(135)上打开cmd(管理员权限),进入目录D:Program

FilesPostgreSQL10bin执行一下语句:

pg_ctl promote -D "D:Program FilesPostgreSQL10data"

执行结果如图

2、原主节点切成从节点(134)

A、首先修改134的

wal_log_hints项为ON

wal_log_hints = on

B、然后启动134的postgresql服务,再关闭。

C、打开cmd(管理员权限),进入postgresql的bin目录输入

D:Program FilesPostgreSQL10bin>pg_rewind -D "D:Program

FilesPostgreSQL10data" --source-server="host=192.168.200.135 port=5432

user=postgres password=1q2w"

结果如图:

D、

修改

为,内容修改如下:

standby_mode = 'on'

primary_conninfo = 'application_name=standby01 host=192.168.200.137

port=5432 user=replica password=replica'

recovery_target_timeline = 'latest'

E、然后启动134的postgresql服务。(这样切换完成的模式还

是异步主从,因为135的

里的synchronous_standby_names没有启

用,需要将synchronous_standby_names = 'standby01',才能实现同步主从。