postgresql9.5主从复制部署文档


1 备份原理

postgresql在数据目录下的pg_xlog子目录中维护了一个WAL日志文件,该文件用于记录数据库文件的每次改变,这种日志文件机制提供了一种数据库热备份的方案,即:在把数据库使用文件系统的方式备份出来的同时也把相应的WAL日志进行备份,即便备份出来的数据块不一致,也能够重放WAL日志把备份的内容推到一致状态。这也就是基于时间点的备份(Point-in-Time Recovery),简称PITRsql

WAL日志传送到另外一台服务器有两种方式数据库

1.WAL日志归档(base-filevim

2.流复制(streaming replication服务器

第一种是写完一个WAL日志后,才把WAL日志文件拷贝到standby数据库中,就是经过cp命令实现远程备份,这样一般备份会落后主库一个WAL日志文件。而第二种流复制是postgresql9.x以后才提供的新的传递WAL日志的方法,它的好处是只要master库一产生日志,就会立刻传递到standby库,同第一种相比有更低同步延迟,因此咱们确定会选择流复制的方式。并发

在实际操做以前还有一点须要说明的是standby的搭建中最关键的一步,在standby中生成master的基础上备份。postgresql9.1以后提供了一个很方便的工具,pg_basebackup,关于它的详细介绍和参数能够在官网中查看。ide

2 基本环境

系统版本工具

主机名post

IP地址测试

postgresql版本ui

角色

10.0.0.14

postgresql-master

10.0.0.14

9.5.14

主库

10.0.0.15

postgresql-slave

10.0.0.15

9.5.14

从库

说明:两台服务器都已经提早用yum方式安装好了postgresql 9.5,本文档配置的是主从复制,主库能够读写,从库只能读取不能写入数据。

3 主库配置

3.1 修改配置文件

cat >>/var/lib/pgsql/9.5/data/postgresql.conf <<EOF

wal_level = hot_standby     #(默认是minimal

max_wal_senders=2           #(默认是0

wal_keep_segments=64        #(默认是0

EOF

说明

wal_level表示启动搭建Hot Standbymax_wal_senders则须要设置为一个大于0的数,它表示主库最多能够有多少个并发的standby数据库,而最后一个wal_keep_segments也应当设置为一个尽可能大的值,以防止主库生成WAL日志太快,日志尚未来得及传送到standby就被覆盖,可是须要考虑磁盘空间容许,一个WAL日志文件的大小是16M

1.png

如上图,一个WAL日志文件是16M,若是wal_keep_segments设置为64,也就是说将为standby库保留64WAL日志文件,那么就会占用16*64=1GB的磁盘空间,因此须要综合考虑,在磁盘空间容许的状况下设置大一些,就会减小standby从新搭建的风险。接下来还须要在主库建立一个超级用户来专门负责让standby链接去拖WAL日志

3.2 建立同步用户

建立同步用户

postgres=# create user rep1 superuser password '123456';

修改配置文件

vim /var/lib/pgsql/9.5/data/pg_hba.conf

86 # Allow replication connections from localhost, by a user with the

87 # replication privilege.

88 #local   replication     postgres                                peer

89 #host    replication     postgres        127.0.0.1/32            ident

90 host    replication      rep1            10.0.0.0/24             md5

91 #host    replication     postgres        ::1/128                 ident

容许从库服务器链接主库去拖WAL日志数据

3.3 重启postgresql服务

systemctl restart postgresql-9.5

4 从库配置

4.1 清空从库的数据目录

先关闭从库

systemctl stop postgresql-9.5

清空从库数据目录

rm -rf /var/lib/pgsql/9.5/data/*

4.2 从主库备份数据

pg_basebackup -h 10.0.0.14 -U rep1 -F p -x -P -R -D /var/lib/pgsql/9.5/data/ -1 rep_backup

备份过程实际上就是从主库的data目录里物理拷贝数据的过程。

参数说明

-F 指定了输出的格式,支持p(原样输出)或者ttar格式输出)。

-x 表示备份开始后,启动另外一个流复制链接从主库接收WAL日志。

-p 表示容许在备份的过程当中实时的打印备份的进度。

-R 表示会在备份结束后自动生成recovery.conf文件,这样就避免了手动建立。

-D 指定把备份写到哪一个目录,注意:在作基础备份以前从库的数据目录须要手动清空。

-1 表示指定一个备份的标识。

chown -R postgres.postgres /var/lib/pgsql/9.5/data/

修改配置文件

vim /var/lib/pgsql/9.5/data/postgresql.conf

243 # - Standby Servers -

244

245 # These settings are ignored on a master server.

246

247 #hot_standby = off          # "on" allows queries during recovery

248 hot_standby = on    #添加此行

249                     # (change requires restart)

250 #max_standby_archive_delay = 30s    # max delay before canceling queries

251                     # when reading WAL from archive;

252                     # -1 allows indefinite delay

253 #max_standby_streaming_delay = 30s  # max delay before canceling queries

4.3 启动从库

systemctl start postgresql-9.5

查看流复制的进程

2.png

5 测试

5.1 从库写入测试

3.png

5.2 建立库表测试

在主库上建立一个库wangning

4.png

登陆从库查看是否有wangning

5.png

在主库的wangning库中建一个test表并插入数据

6.png

进入从库的wangning库查看是否有test表和插入的数据

7.png

5.3 删除库测试

8.png

9.png

通过测试可看出,主从复制已配置成功。