postgresql9.5主从hot_standby模式配置
参考
http://www.52php.cn/article/p-yfdnejwo-qx.html
前言简单记录一下postgresql主从的实现方式之一——基于Standby的异步流复制,这是PostgreSQL9.x版本(2010.9)之后提供的一个很nice的功能,类似的功能在Oracle中是11g之后才提供的active dataguard和SQL Server 2012版本之后才提供的日志传送,此处再次为pg鼓掌,确实是一个很棒的开源数据库。废话不多说,本篇blog就详细记录一下在pg9.5中实现Hot Standby异步流复制的完整配置过程和注意事项。 Standby数据库原理简单介绍一些基础概念与原理,首先我们做主从同步的目的就是实现db服务的高可用性,通常是一台主数据库提供读写,然后把数据同步到另一台从库,然后从库不断apply从主库接收到的数据,从库不提供写服务,只提供读服务。在postgresql中提供读写全功能的服务器称为primary database或master database,在接收主库同步数据的同时又能提供读服务的从库服务器称为hot standby server。 PostgreSQL在数据目录下的pg_xlog子目录中维护了一个WAL日志文件,该文件用于记录数据库文件的每次改变,这种日志文件机制提供了一种数据库热备份的方案,即:在把数据库使用文件系统的方式备份出来的同时也把相应的WAL日志进行备份,即使备份出来的数据块不一致,也可以重放WAL日志把备份的内容推到一致状态。这也就是基于时间点的备份(Point-in-Time Recovery),简称PITR。而把WAL日志传送到另一台服务器有两种方式,分别是:
第一种是写完一个WAL日志后,才把WAL日志文件拷贝到standby数据库中,简言之就是通过cp命令实现远程备份,这样通常备库会落后主库一个WAL日志文件。而第二种流复制是postgresql9.x之后才提供的新的传递WAL日志的方法,它的好处是只要master库一产生日志,就会马上传递到standby库,同第一种相比有更低的同步延迟,所以我们肯定也会选择流复制的方式。 在实际操作之前还有一点需要说明就是standby的搭建中最关键的一步——在standby中生成master的基础备份。postgresql9.1之后提供了一个很方便的工具—— pg_basebackup,关于它的详细介绍和参数说明可以在官网中查看,下面在搭建过程中再做相关具体说明,关于一些基础概念和原理先介绍到这里。 详细配置下面开始实战,首先准备两台服务器,我这里开了2个虚机做测试,分别是(centos6也可以):
如果是编译安装的,在编译安装完成后需要做一些初始化工作:
warning:从库服务器可以跳过初始化数据库那一步
配置环境变量: export PGHOME=/home/postgresexport PGDATA=/usr/local/pgsql/dataexport PATH=/usr/local/pgsql/bin:$PATH 以下工作都是在postgres用户下操作的。 主库配置注意此处的操作都是在主库(192.168.3.193)上进行的,首先打开数据目录下的postgresql.conf文件然后做以下修改:
下面稍作说明: 第一个不用说了, wal_level表示启动搭建Hot Standby, max_wal_senders则需要设置为一个大于0的数,它表示主库最多可以有多少个并发的standby数据库, wal_keep_segments也应当设置为一个尽量大的值,以防止主库生成WAL日志太快,日志还没有来得及传送到standby就被覆盖,但是需要考虑磁盘空间允许,一个WAL日志一个WAL日志文件是16M,如果wal_keep_segments设置为64,也就是说将为standby库保留64个WAL日志文件,那么就会占用16*64=1GB的磁盘空间,所以需要综合考虑,在磁盘空间允许的情况下设置大一些,就会减少standby重新搭建的风险。
开启数据库服务: pg_ctl start -l /usr/local/pgsql/log/pg_server.log 接下来还需要在主库创建一个超级用户来专门负责让standby连接去拖WAL日志: create user repl superuser password '222221'; 接下来修改/usr/local/pgsql/data/pg_hba.conf:
红色的为添加的,
注意添加的位置不能随意。
host postgres postgres 192.168.3.0/24 trust
意思是
允许用户postgres从192.168.3.0/24网络上前来同步本地数据库,如pg_rewind命令。
host replication repl 192.168.3.0/24 trust 意思是允许用户repl从192.168.3.0/24网络上发起到本数据库的流复制连接,简言之即允许从库服务器连接主库去拖WAL日志数据。如pg_basebackup命令 warning:为了方便可以配成“trust”(从库服务器前来拉数据时不需要密码)
主库配置很简单,到此就算结束了,重启主库服务: pg_ctl restart -l /usr/local/postgresql/log/pg_server.log 从库配置从此处开始配置从库(192.168.3.194),首先要通过pg_basebackup命令行工具在从库上生成基础备份,命令如下: ./pg_basebackup -h 192.168.3.193 -U repl -F p -x -P -R -D /usr/local/postgresql/data/ -l replbackup20161122 下面简单做一下参数说明(可以通过
如果在pg_hba.conf中指定的md5认证方式,则这里需要输入密码。 我们现在可以启动从库,在从库运行 pg_ctl start -l /usr/local/postgresql/log/pg_server.log 启动后看一下日志是否正常,有问题处理。
现在就可以建表做测试了。 在master服务器(192.168.3.193)中的postgres库下建一张表并添加几条数据; 然后在standby服务器(192.168.3.194)中进行查看同步情况; 可以看到完美同步,那么从库是否能删除呢?测试一下:
从库(192.168.3.195)操作同从库(192.168.3.194)
warning:也可以不创建superuser用户“repl”,而直接用postgres (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- ruby-on-rails – 如何将模型命名为FileURL
- vb.net 教程 3-4 窗体编程 公共控件11 ToolTip
- Ajax中向Servlet发送请求时中文乱码问题
- Oracle 中for update 与 for update nowait
- ArcGIS10.2导入数据到PostgreSQL
- c# – Lock for Dictionary.Count
- Integrate the flash slide show picture control with the
- 基于xml配置插入数据库数据例子(三)
- c# – 将一个使用块包装在另一个使用块中 – 是否过度杀伤?
- DM8168 ccs5.4 烧写u-boot到nandflash
- VB检测数组中的重复元素
- ruby-on-rails – 级联/继承/共享Rails配置环境
- c# – 返回Enumerable.Empty().AsQueryable()一个
- C BZ2_bz解压缩比bzip2命令慢
- c# – 使用Unity3d时Visual Studio中的IntelliSe
- jQuery使用ajax_动力节点Java学院整理
- ruby-on-rails – Ruby on Rails相当于Maven Arc
- c# – 如何在程序中为allow-null datetime字段(D
- c# – 单击WebBrowser控件中的HTML链接
- c# – 使用Entity Framework时,存储库应该是工作