Postgresql主从集群流复制从无到有搭建(windows架构)

1.总体架构:

4台windows服务器架构图

2.环境:

1、 WindowsServier (windows10)
2、 postgres12.4
3、 AlwaysUp windows流氓进程开门狗程序

3.创建流复制环境搭建:

1、 安装数据库(这个就不做都演示了相信大家都会的)

CSDN图标

2、复制Data目录创建多个启动跨平台目录 提醒: 如果是异步架构linux与windows,区域编码要设置成C(不使用区域编码使用postgres里面默认的什么货币格式化,字符串排序等等),坏处:所有输出(日志啥的等等)全是英文,查询时字符串排序顺序不能从上往下,其实用C个人觉得还好可以让postgres查询性能提升。
只演示:pg3(服务器ip映射的名字) 我这边是四台服务器,每台服务器有三个从库 (这里只演示其中一套会一套其余的都一样的)

在这里插入图片描述

4.正式开始主从备份配置:

数据库结构:
pg1:5432
pg2:5434
pg3:5433
pg4:5435
复制代码

1.主机pg3配置

1、 pg3主库设置 启动数据库并建立同步用户(这个用户以后机器跟机器间做同步用的:流复制用户)
 create role sync login replication encrypted password '123456';
复制代码

2、 配置pg3主机ip映射(主从机都是一样的)
C:\Windows\System32\drivers\etc\hosts
复制代码

在这里插入图片描述


3、 配置pg3主库流复制允许那几个ip连接(备库) 提醒: 当前服务器是pg3,对应配置我需要让3台从机可以连接pg3,一主三从

文件: pg_hba.conf
复制代码

在这里插入图片描述


4、 配置pg3主库配置文件
文件: postgresql.conf
复制代码
#监听的地址(pg_hba里面配的)
listen_addresses = '*'
#流复制级别
wal_level = replica
#允许几个备库连接
max_wal_senders=20
#设置Wal段文件,64兆字节(默认16兆)
wal_keep_segments =64

#归档配置咯
archive_mode = on
archive_command = 'copy D:\\pg\\JituanData\\%p D:\\pg\\JituanWal\\%f'	
restore_command = 'copy D:\\pg\\JituanWal\\%f D:\\pg\\JituanData\\%p'	
recovery_target_timeline = 'latest'

#往备库里写数据配置
full_page_writes = on
wal_log_hints = on

#实时同步你用异步流也行
synchronous_standby_names = 'FIRST 2 (standby_pg1,standby_pg2,standby_pg4)'	
synchronous_commit = on  --默认值,可以设置为remote_write,对主库性能有利
复制代码
5、 重启主库(主库打完收工)
.\pg_ctl -D  D:\pg\JituanData -l C:\Users\Administrator\Desktop\postges集团主库 start
复制代码

在这里插入图片描述

2.从机p1配置

1、pg1备库基础配置
复制主库数据到备库数据需要,主从数据需要做同步
pg_basebackup -h pg3 -p 5433 -U sync -R -F p -P -D D:\pg\JituanData
复制代码
配置pg1从库配置文件(本身就是从主库复制来的不需要改多少东西)
这几个配的跟主库一致,其实里面大多是主库的配置,但是从生产环境下来说就应该这么配
(方便以后主从切换直接切,只需要改少量配置文件就行) 

listen_addresses = '*'
wal_level = replica
max_wal_senders=20
wal_keep_segments =64

archive_mode = on
archive_command = 'copy D:\\pg\\JituanData\\%p D:\\pg\\JituanWal\\%f'	
restore_command = 'copy D:\\pg\\JituanWal\\%f D:\\pg\\JituanData\\%p'
recovery_target_timeline = 'latest'

full_page_writes = on
wal_log_hints = on

备库需要配的里面只有一个需要改一下向主机反馈 其余三个默认就是这样
hot_standby = on   						    #在备份的同时允许查询,默认值	
max_standby_streaming_delay = 30s			#可选,流复制最大延迟		
wal_receiver_status_interval = 10s			#可选,从向主报告状态的最大间隔时间	
hot_standby_feedback = on					#可选,查询冲突时向主反馈		

复制代码
2、配置pg1备库 pg_hba.conf

在这里插入图片描述 3、创建pg1备库文件standby.signal

第一行参数:连接到主库信息
第二行参数:将来变成主库时需要用到的参数。
第三行参数:变成主库后需要清空的归档日志。
第四行参数:把备库变成read-only transaction模式,不允许进行写操作。允许查询。这一点非常好。

注意:application_name是备库实时同步的名称我用的是实时同步需要配

primary_conninfo = 'host=pg3 application_name=standby_pg1 port=5433  user=sync password=123456 options=''-c wal_sender_timeout=5000'''
restore_command = 'copy D:\\pg\\JituanWal\\%f D:\\pg\\JituanData\\%p'
archive_cleanup_command = 'D:\\pg\\bin\\pg_archivecleanup D:\\pg\\JituanWal %r'
standby_mode = on
复制代码

在这里插入图片描述 4、启动备库

.\pg_ctl -D  D:\pg\JituanData -l C:\Users\Administrator\Desktop\postges集团主库 start
复制代码
5、postgresql.auto.conf会产生一句连接主机命令,把命令中的这个application_name也改一下
application_name=standby_pg1
复制代码

在这里插入图片描述

3.从机p2配置

1、pg2备库基础配置
复制主库数据到备库数据需要,主从数据需要做同步
pg_basebackup -h pg3 -p 5433 -U sync -R -F p -P -D D:\pg\JituanData
复制代码
配置pg2从库配置文件(本身就是从主库复制来的不需要改多少东西)
这几个配的跟主库一致,其实里面大多是主库的配置,但是从生产环境下来说就应该这么配
(方便以后主从切换直接切,只需要改少量配置文件就行) 

listen_addresses = '*'
wal_level = replica
max_wal_senders=20
wal_keep_segments =64

archive_mode = on
archive_command = 'copy D:\\pg\\JituanData\\%p D:\\pg\\JituanWal\\%f'	
restore_command = 'copy D:\\pg\\JituanWal\\%f D:\\pg\\JituanData\\%p'
recovery_target_timeline = 'latest'

full_page_writes = on
wal_log_hints = on

备库需要配的里面只有一个需要改一下向主机反馈 其余三个默认就是这样
hot_standby = on   						    #在备份的同时允许查询,默认值	
max_standby_streaming_delay = 30s			#可选,流复制最大延迟		
wal_receiver_status_interval = 10s			#可选,从向主报告状态的最大间隔时间	
hot_standby_feedback = on					#可选,查询冲突时向主反馈		

复制代码
2、配置pg2备库 pg_hba.conf (这其实都是一样的我就拿pg1的图片了)

在这里插入图片描述 3、创建pg2备库文件standby.signal

第一行参数:连接到主库信息
第二行参数:将来变成主库时需要用到的参数。
第三行参数:变成主库后需要清空的归档日志。
第四行参数:把备库变成read-only transaction模式,不允许进行写操作。允许查询。这一点非常好。

注意:application_name是备库实时同步的名称我用的是实时同步需要配

primary_conninfo = 'host=pg3 application_name=standby_pg2 port=5433  user=sync password=123456 options=''-c wal_sender_timeout=5000'''
restore_command = 'copy D:\\pg\\JituanWal\\%f D:\\pg\\JituanData\\%p'
archive_cleanup_command = 'D:\\pg\\bin\\pg_archivecleanup D:\\pg\\JituanWal %r'
standby_mode = on
复制代码

在这里插入图片描述 4、启动备库

.\pg_ctl -D  D:\pg\JituanData -l C:\Users\Administrator\Desktop\postges集团主库 start
复制代码
5、postgresql.auto.conf会产生一句连接主机命令,把命令中的这个application_name也改一下
application_name=standby_pg2  图片就不演示了都是一样的
复制代码

3.从机p4配置

1、pg4备库基础配置
复制主库数据到备库数据需要,主从数据需要做同步
pg_basebackup -h pg3 -p 5433 -U sync -R -F p -P -D D:\pg\JituanData
复制代码
配置pg4从库配置文件(本身就是从主库复制来的不需要改多少东西)
这几个配的跟主库一致,其实里面大多是主库的配置,但是从生产环境下来说就应该这么配
(方便以后主从切换直接切,只需要改少量配置文件就行) 

listen_addresses = '*'
wal_level = replica
max_wal_senders=20
wal_keep_segments =64

archive_mode = on
archive_command = 'copy D:\\pg\\JituanData\\%p D:\\pg\\JituanWal\\%f'	
restore_command = 'copy D:\\pg\\JituanWal\\%f D:\\pg\\JituanData\\%p'
recovery_target_timeline = 'latest'

full_page_writes = on
wal_log_hints = on

备库需要配的里面只有一个需要改一下向主机反馈 其余三个默认就是这样
hot_standby = on   						    #在备份的同时允许查询,默认值	
max_standby_streaming_delay = 30s			#可选,流复制最大延迟		
wal_receiver_status_interval = 10s			#可选,从向主报告状态的最大间隔时间	
hot_standby_feedback = on					#可选,查询冲突时向主反馈		

复制代码
2、配置pg4备库 pg_hba.conf (这其实都是一样的我就拿pg1的图片了)

在这里插入图片描述 3、创建pg4备库文件standby.signal

第一行参数:连接到主库信息
第二行参数:将来变成主库时需要用到的参数。
第三行参数:变成主库后需要清空的归档日志。
第四行参数:把备库变成read-only transaction模式,不允许进行写操作。允许查询。这一点非常好。

注意:application_name是备库实时同步的名称我用的是实时同步需要配

primary_conninfo = 'host=pg3 application_name=standby_pg4 port=5433  user=sync password=123456 options=''-c wal_sender_timeout=5000'''
restore_command = 'copy D:\\pg\\JituanWal\\%f D:\\pg\\JituanData\\%p'
archive_cleanup_command = 'D:\\pg\\bin\\pg_archivecleanup D:\\pg\\JituanWal %r'
standby_mode = on
复制代码

在这里插入图片描述 4、启动备库

.\pg_ctl -D  D:\pg\JituanData -l C:\Users\Administrator\Desktop\postges集团主库 start
复制代码
5、postgresql.auto.conf会产生一句连接主机命令,把命令中的这个application_name也改一下
application_name=standby_pg4  图片就不演示了都是一样的
复制代码

验证测试

查看当前备库状态:
t :true,意味着处于recovery状态
f :false,意味着处于正常服务状态
select pg_is_in_recovery();  
查询当前主库用几个备库
select * from pg_stat_replication;
复制代码

在这里插入图片描述

配置Windows看门狗流氓进程

1、安装AlwaysUp 安装过程我就不说明咯 直接开配
启动程序 D:\pg\bin\pg_ctl.exe
启动参数 -D D:\pg\JituanData -l D:\pg\log\postgres集团备库.log restart
启动目录 D:\pg\bin
复制代码

在这里插入图片描述

2、除了这个外呢还要配一个自动登录执行程序 意思呢,就是我电脑重启了一般电脑都有用户名密码要先登录进去才能自启动程序 包括注销也不会销毁程序:详细可以去看官网

1.配置用户名密码 注意 Launch the application without admin rights 不要勾选
这个是不以管理员身份允许勾选了你就没有创建日志我就的权限了

2.最后一个可勾可不勾(不显示程序最小化托盘)
	当用户登录时,如果应用程序有托盘图标,不要显示应用程序的indos图标
复制代码

在这里插入图片描述

异步与实时同步区别

1.上面的配置是异步同步,对于主库的性能影响是最小的,但是会丢数据,我们可以把复制配置成实时同步。

2.当设置同步复制时,尽量记住以下几点:
• 最小化延迟
• 确保您有冗余延迟
• 同步复制比异步复制代价更高
复制代码

猜你喜欢

转载自juejin.im/post/7075278356152844324