PostgreSQL9.6 主从复制

PostgreSQL9.6 主从复制

  • PostgreSQL9.6安装
  • 配置主备
    • 创建Replication用户
    • 配置网络策略
    • Master配置
    • Slave配置
  • 启动主备
    • 启动Master
    • 启动Slave

PostgreSQL9.6安装

1、配置yum安装源:

yum install https://download.postgresql.org/pub/repos/yum/9.6/redhat/rhel-7-x86_64/pgdg-centos96-9.6-3.noarch.rpm

Note:如果https不通的话,可以改成http尝试一下
2、安装postgresql96-server

yum install postgresql96-server

有时候会报一些错误,例如:

failure: repodata/repomd.xml from pgdg10: [Errno 256] No more mirrors to try.
https://download.postgresql.org/pub/repos/yum/10/redhat/rhel-7-x86_64/repodata/repomd.xml: [Errno 14] curl#60 - "SSL certificate problem: unable to get local issuer certificate"

可以把除9.6版本之外的源都disable掉。编辑pgdg-redhat-all.repo:

cd /etc/yum.repos.d/
vi pgdg-redhat-all.repo

disable对应的源:enabled改为0
PostgreSQL9.6 主从复制_第1张图片
同时把9.6版本对应的url改成http:
PostgreSQL9.6 主从复制_第2张图片
3、初始化数据库

rm -rf /var/lib/pgsql/9.6/data/
/usr/pgsql-9.6/bin/postgresql96-setup initdb

4、启动服务

systemctl start postgresql-9.6

测试使用是否正常:

psql -U postgres
psql: FATAL:  Peer authentication failed for user "postgres"

修改/var/lib/pgsql/9.6/data/pg_hba.conf:
在这里插入图片描述
修改peer为trust,则可以免密登录。

配置主备

创建Replication用户

也可以直接使用postgre用户,但为了安全,最好创建新用户

CREATE ROLE replicator login replication password 'myPass';

配置网络策略

目的是为了可以通过网络访问,修改/var/lib/pgsql/9.6/data/pg_hba.conf如下:
在这里插入图片描述
允许具有replication权限的用户replicator复制数据。此处配置为trust,免密码,主要是为了后面复制数据时可以无需输入密码,便于通过脚本操作。

Master配置

修改/var/lib/pgsql/9.6/data/postgresql.conf中的如下参数,参数说明可以参考(19.5. Write Ahead Log;19.6. Replication):

wal_level:四个级别,minimal,archive,hot_standby,logical;建议hot_standby以便支持在slave上可以查看数据
max_wal_senders:用于主备之间进行流复制的连接,数量过少的话会报错(could not connect to the primary server: FATAL: number of requested standby connections exceeds max_wal_senders)导致主备备份数据失败,数量过多的话,会造成浪费,因为在PG 12之前,这个连接是占用PG的客户端连接数的(max_connections)。最少为standby的数量,建议:standby数量*2。
wal_sender_timeout:流复制超时时间,根据实际情况设定,此处设置的是60s
synchronous_standby_names:指定的是同步复制的standby server列表,如synchronous_standby_names =‘standby01,standby02’;如果为空,则表示不需要同步复制,即为异步复制。如果不为空,则从列表中选择一个优先级高的同步,同步完成后Master上的事务才会提交,如果该standby server无响应,则Master上的事务会被挂住。相比较而言,同步复制方式,主备数据一致性更高,但是可能会导致Master被挂住,有可能拉低Master的整体性能。
archive_mode:当启用archive_mode时, 可以通过设置archive_command命令将完成的 WAL段发送到归档存储。此处设置为on
archive_command:归档完成的 WAL 文件段的shell命令,如:cp %p /var/lib/pgsql/9.6/archive/%f;需要注意跟data目录分开,否则在做basebackup时会同时备份归档的内容,由于归档内容很大会导致备份时间很长。
hot_standby:指定在恢复期间是否能够连接并运行查询,只在归档恢复期间或standby模式下才有效。

配置如下:

wal_level = hot_standby      				#热备模式
max_wal_senders = 2          				# at least the number of standby
wal_sender_timeout = 60s     				#流复制超时时间
synchronous_standby_names = ''      		#同步复制standby名称,空即为异步复制
archive_mode = on							# 使能
archive_command = 'cp %p /var/lib/pgsql/9.6/archive/%f'
hot_standby=on

Note:修改后的postgresql.conf可以Master、Slave共用。

Slave配置

创建/var/lib/pgsql/9.6/data/recover.conf,修改如下参数(参考:Chapter 27. Recovery Configuration):
recovery_target_timeline:设置成latest,恢复到最新
standby_mode:是否作为standby server启动,配置为on
primary_conninfo:standby server连接master server的信息,包含ip地址,端口号,用户名,密码。
trigger_file :指定一个触发文件,PG会轮询这个文件,发现该文件就会从standby切换为master。切换时自动把recovery.conf改名为recovery.done
restore_command:指定获取已归档的WAL段的命令,对于流复制来说是可选的,此处没有配置。
archive_cleanup_command:用于指定清除无用归档段的命令。可以用来清除无用的归档段,建议配置。

配置如下:

recovery_target_timeline = 'latest'
standby_mode = on
primary_conninfo = 'host=10.xxx.xxx.xxx port=5432 user=replicator password=myPass'            # e.g. 'host=localhost port=5432'
trigger_file = '/var/lib/pgsql/9.6/data/trigger.kenyon'
archive_cleanup_command = 'pg_archivecleanup /var/lib/pgsql/9.6/archive %r'

Note:该文件仅在Slave,不能在master上存在

启动主备

启动Master

systemctl start postgresql-9.6

启动Slave

在启动Slave之前,最好通过pgbasebackup同步一下数据,避免数据不一致:

pg_basebackup -F p --progress -D /var/lib/pgsql/9.6/data/ -h 10.xxx.xxx.xxx -p 5432 -U replicator --password

Note
该命令需要以postgres用户执行

runuser -l postgres -c "pg_basebackup -F p --progress -D ${PGSQL_DATA}/ -h ${MASTER_IP} -p 5432 -U replicator --no-password"

为了便于脚本执行,前面replicator用户已经配置成免密码登录,此处可以通过no-password参数指定不需要输入密码。
完成数据同步后,把recovery.conf拷贝到/var/lib/pgsql/9.6/data/目录下,即可启动:

systemctl start postgresql-9.6

[1]: 19.5. Write Ahead Log
[2]: 19.5. 预写式日志
[3]: 19.6. Replication
[4]: 19.6. 复制
[5]: Chapter 27. Recovery Configuration
[6]: PostgreSQL流复制参数max_wal_senders详解
[7]: PostgreSQL 10.3数据库主从复制

你可能感兴趣的:(DB)