天天看点

postgresql9.5主从复制部署文档1 备份原理2 基本环境3 主库配置4 从库配置5 测试

1 备份原理

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

把WAL日志传送到另一台服务器有两种方式

1.WAL日志归档(base-file)

2.流复制(streaming replication)

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

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

2 基本环境

系统版本 主机名 IP地址 postgresql版本 角色
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 Standby,max_wal_senders则需要设置为一个大于0的数,它表示主库最多可以有多少个并发的standby数据库,而最后一个wal_keep_segments也应当设置为一个尽量大的值,以防止主库生成WAL日志太快,日志还没有来得及传送到standby就被覆盖,但是需要考虑磁盘空间允许,一个WAL日志文件的大小是16M

postgresql9.5主从复制部署文档1 备份原理2 基本环境3 主库配置4 从库配置5 测试

如上图,一个WAL日志文件是16M,如果wal_keep_segments设置为64,也就是说将为standby库保留64个WAL日志文件,那么就会占用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(原样输出)或者t(tar格式输出)。

-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

查看流复制的进程

postgresql9.5主从复制部署文档1 备份原理2 基本环境3 主库配置4 从库配置5 测试

5 测试

5.1 从库写入测试

postgresql9.5主从复制部署文档1 备份原理2 基本环境3 主库配置4 从库配置5 测试

5.2 创建库表测试

在主库上创建一个库wangning

postgresql9.5主从复制部署文档1 备份原理2 基本环境3 主库配置4 从库配置5 测试

登录从库查看是否有wangning库

postgresql9.5主从复制部署文档1 备份原理2 基本环境3 主库配置4 从库配置5 测试

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

postgresql9.5主从复制部署文档1 备份原理2 基本环境3 主库配置4 从库配置5 测试

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

postgresql9.5主从复制部署文档1 备份原理2 基本环境3 主库配置4 从库配置5 测试

5.3 删除库测试

postgresql9.5主从复制部署文档1 备份原理2 基本环境3 主库配置4 从库配置5 测试
postgresql9.5主从复制部署文档1 备份原理2 基本环境3 主库配置4 从库配置5 测试

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

转载于:https://blog.51cto.com/wn2100/2238996