postgresql主从复制配置「建议收藏」

postgresql主从复制配置「建议收藏」postgresql主从复制是一种高可用解决方案,可以实现读写分离。postgresql主从复制是基于xlog来实现的,主库开启日志功能,从库根据主库xlog来完成数据的同步。主从复需要注意的地方:启动从库之前,不能执行初始化。 启动从库之前,需要通过base_backup从主服务器上同步配置与数据。 启动从库之前,需要对同步之后的配置文件进行修改。 启动从库之前,需要设置一个恢复的…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

postgresql主从复制是一种高可用解决方案,可以实现读写分离。postgresql主从复制是基于xlog来实现的,主库开启日志功能,从库根据主库xlog来完成数据的同步。

主从复需要注意的地方:

  • 启动从库之前,不能执行初始化。
  • 启动从库之前,需要通过base_backup从主服务器上同步配置与数据。
  • 启动从库之前,需要对同步之后的配置文件进行修改。
  • 启动从库之前,需要设置一个恢复的配置文件。
  • 从库只能读,不能写。

下面介绍主从复制的实现,这里以两台虚拟机为例,主节点IP是192.168.56.201,从节点IP是192.168.56.202,这里两台机器都是通过源码编译安装的方式安装的postgresql,版本是11.4。编译安装指定的前缀是/usr/local,因此安装完成,可执行程序会在/usr/local/bin目录下。

postgresql主从复制配置「建议收藏」

首先需要在主库上初始化数据库,并启动数据库服务。  

启动的时候,不能以root用户来启动。

postgresql主从复制配置「建议收藏」

编译安装不会创建postgres用户,因此我们需要先创建postgres用户和用户组。 我们会将postgresql数据存储路径设置在/home/postgres/data下。

groupadd postgres
useradd -g postgres postgres

切换用户,然后初始化数据库。

postgresql主从复制配置「建议收藏」

初始化成功之后,会有个提示,如何启动数据库,按照提示命令,我们启动数据库。

/usr/local/bin/pg_ctl -D /home/postgres/data -l logfile start

postgresql主从复制配置「建议收藏」

这里启动数据库之后,我们登陆数据库,做两件事情:准备一些数据,将来从节点同步之后,用来做数据验证。创建一个admin/123456的用户,用来做主从复制。

postgresql主从复制配置「建议收藏」

这样在主库上的操作就完成了,接下来就是修改配置文件,然后重启主库。

修改pg_hba.conf,增加刚才创建的用户到文件末尾,method指定为md5,表示密码开启md5验证。

postgresql主从复制配置「建议收藏」

修改postgresql.conf,开启注释,并修改以下配置:

listen_addresses=”*”
wal_level=hot_standby
max_wal_senders=2
wal_keep_segments=64
max_connections=100 

重启主库,至此,完成主库的所有准备工作:

postgresql主从复制配置「建议收藏」

/\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

下面就是配置和启动从库了,前面注意事项里面提到,不能初始化从库,因为我们需要首先从主库备份数据,备份之后,从库的/home/postgres/data里面的数据和配置信息就和主库一致了。

首先从库也需要postgres/postgres用户组和用户,先创建:

groupadd postgres
useradd -g postgres postgres
 

之后,切换到postgres用户,进行数据备份和启动操作。

首先是利用base_backup命令进行备份:

/usr/local/bin/pg_basebackup -h 192.168.56.201 -p 5432 -U admin -F p -P -D /home/postgres/data 

postgresql主从复制配置「建议收藏」

因为是从库访问,而且是用的admin用户,因此需要输入密码。这里显示备份成功。

因为配置postgresql.conf是从主库同步过来的,这里需要修改一些配置,改为从库的配置:

#wal_level=hot_standby                      #从库不需要这个配置
#max_wal_senders=2                         #同上
#wal_keep_segments=64                   #同上
hot_standby=on                                  #开启hot_standby模式
max_standby_streaming_delay=30s  #可选,流复制最大延迟
wal_receiver_status_interval=10s       #可选,向主库报告状态的最大间隔时间
hot_standby_feedback=on                  #可选,查询冲突时向主库反馈
max_connections=1000                      #最大连接数一般大于主库就行 

还需要准备一个恢复配置文件,这个文件在安装postgresql时,会生成到/usr/local/share/postgresql目录下,名字是recovery.conf.sample。我们复制并修改名称为recovery.conf并放置在/home/postgres/data目录下,修改配置:

recovery_target_timeline = ‘latest’
standby_mode = on
primary_conninfo = ‘host=192.168.56.201 port=5432 user=admin password=123456’ 

这三个配置很直观,recovery_target_timeline=’latest’表示恢复最新的数据,standby_mode表示从节点的角色是备选,primay_conninfo表示主库连接信息。

至此,从库的配置工作准备完成,接着就可以启动数据库了。

postgresql主从复制配置「建议收藏」

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

主从复制到此就配置完成了,接下来就是验证阶段:

1、从主从机器运行的进程验证:

postgresql主从复制配置「建议收藏」

主节点服务器会增加一个walsender进程

postgresql主从复制配置「建议收藏」

从节点服务器增加一个walreceiver进程 

 2、从数据上验证:

postgresql主从复制配置「建议收藏」

主库在首次启动的时候,没有做主从配置之前,就插入了4条记录在test数据库xx_user表中。如今再次插入一条数据,也显示成功,查询会显示5条记录。 

postgresql主从复制配置「建议收藏」

从库在首次启动之后,数据是从主库备份过来的,第一次进入查找就有4条记录。等主库插入一条记录之后,再次查看是5条记录,从库数据均同步成功,表示主从复制配置正确。

最后我们在从库中做插入操作,显示操作失败,因为从库是只读的,不能做增删改的写操作,只能查询。

3、这里可以从/usr/local/bin/pg_controldata /home/postgres/data命令的结果状态中可以验证,主从关系,主库的集群状态是in production,从库是in archive recovery,当我们的主库崩溃,我们可以切换从库为主库。这时候主库状态是shut down,而从库是in production。这里我们模拟停掉主库。

pg_ctl stop -m fast

马上在从库上切换从库为主库:

pg_ctl promote

这里显示了从库的状态由in archive recovery 变为in production的截图:

正常从库的状态:

postgresql主从复制配置「建议收藏」

主库shutdown,从库执行切换主库操作之后: 

postgresql主从复制配置「建议收藏」

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/170336.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • cdr9导出对话框遮挡怎么办_sldprt文件ug怎么打开

    cdr9导出对话框遮挡怎么办_sldprt文件ug怎么打开说明因为之前旧项目采用的是MFC+BCG界面库的方法实现的。维护旧项目过程中,遇到选择文件对话框没有从默认位置选择的问题,学习和思考后,问题得到解决,特此记录。原来的BCG中配置选择的方法是这样的: lpszDefExt=_T(“DAT”); lpszFilter=_T(“文件|*.dat|\ 文件|*.bln|\ 文件|*.xyz|\ 文件|*.txt||”); m_editDataName.EnableFileBrowseButton(

    2022年10月8日
    5
  • WinRAR去除广告,亲测可用

    WinRAR去除广告,亲测可用原文地址:最新去除中文winrar压缩软件弹出广告方法-百度经验(baidu.com) 此文用作备用文,在原文看不到的情况下,参考本文。感谢原文作者!!! 安装RAR简体中文版 下载并安装Restorator2007 找到RAR安装文件夹,可以双击打开RAR.exe看是否弹出广告 打开Restorator2007 选着左上角“文件-打开”,在“C:\ProgramFiles\WinRAR”文件夹中打开“WinRAR.exe” 打开后.

    2022年6月3日
    43
  • 程序员如何自我学习和成长?[通俗易懂]

    程序员如何自我学习和成长?

    2022年2月19日
    108
  • C++爱心代码[通俗易懂]

    C++爱心代码[通俗易懂]C++爱心代码效果图代码#include<stdio.h>#include<Windows.h>intmain(){ floatx,y,a; for(y=1.5;y>-1.5;y-=0.1) { for(x=-1.5;x<1.5;x+=0.05) { a=x*x+y*y-1; putchar(a*a*a-x*x*y*y*y<=0.0

    2022年10月13日
    4
  • BufferedWriter[通俗易懂]

    BufferedWriter[通俗易懂]  带有默认缓冲的字符输出流。使用:  构造:BufferedWriterbf=newBufferedWriter(“outFilePath”);  写入:write(“thing”);  换行:newLine();  刷新缓冲区,会将内容写进目标文件:flush();  关闭该流的操作:close();importjava.io.BufferedWrit…

    2022年5月1日
    47
  • maven 打的包在哪_maven打包流程学习「建议收藏」

    maven 打的包在哪_maven打包流程学习「建议收藏」前言:最近工作中遇到了几次跟maven打包相关的问题,每个问题上网查资料解决都花了不少时间,很影响工作进度。既然遇到好几次,每次都能发现知识盲点,干脆总结整理一下,啃掉这个难啃的骨头。ps:最近看到了一个很有意思句子:因为今天不想跑步,所以才去跑,这是长距离跑者的思维方式。转载:正文:还是首先描述一下最近遇到的几个问题吧:一、初见springboot多模块项目mvn打包遇到的问题-存在依赖但却…

    2022年5月11日
    43

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号