为什么80%的码农都做不了架构师?>>>
PostgreSQL DBA快速入门(二) - 高可用流复制配置
之前的文章中我们谈论了单机PostgreSQL实例的部署,有人可能会说这不是生产级别的配置,因为没有任何高可用机制呀。那么本篇文章,我们来谈谈如何配置高可用流复制。
主从复制
PostgreSQL一直以来不支持复制,复制通过Pgpool、Slony等外部工具来实现。因为这些解决方案并不是开箱即用的,所以大部分方案的实现都需要进行复杂的配置。由于这个缺点,导致很多人转向已经提供复制功能很久的MySQL。
从PostgreSQL9.0开始,PostgreSQL自身完善了复制功能 - 主从之间的WAL流复制。下面让我们来一起看一下如何给一个PostgreSQL主节点增加一个从节点。
这里我们需要有两台PostgreSQL主机。例子中,主节点IP为10.0.0.101,从节点IP为10.0.0.102。我们假设10.0.0.101和10.0.0.102上的PostgreSQL已经运行,下面我们将102配置添加为101的从节点。
首先我们需要创建一个用于复制的用户。在主节点我们运行以下命令:
postgres=# CREATE ROLE repl WITH REPLICATION PASSWORD 'password' LOGIN;
CREATE ROLE
接下来,需要修改主节点的pg_hba.conf文件并重载PostgreSQL,以开放访问:
host replication repl 10.0.0.102/32 md5
service postgresql reload
我们也可以在从节点的pg_hba.conf文件上添加一条主节点的类似信息,因为在未来的某一刻,从节点会提升为主节点:
host replication repl 10.0.0.101/32 md5
接下来,我们需要对主节点和从节点的postgresql.conf文件进行部分配置。其中一些配置是当主节点切换为从节点时才能用到的,我们在这里提前配置好。
- wal_level - 设置为hot_standby
- max_wal_senders - 设置为超过当前从节点数量的值
- checkpoint_segments - 默认值为3,建议设置的比默认值大一点,一个较好的实践值为16。
- wal_keep_segments - 设置为同checkpoint_segments相同的值
- hot_standby - 开启该选项
接下来需要将主节点的数据转移到从节点。要完成该操作,我们使用pg_basebackup工具,在这之前我们需要先将从节点的数据目录内容删除:
rm -rf /var/lib/postgresql/9.4/main/*
上面命令执行完后,我们可以在从节点上执行以下pg_basebackup命令:
pg_basebackup --xlog-method=stream -D /var/lib/postgresql/9.4/main/ -U repl -h 10.0.0.101
上面命令完成后,可以看到在从节点的数据目录下面出现很多新的数据文件。下面还有一些事情要做,我们需要创建一个recovery.conf文件来让从节点可以链接到主节点。配置信息如下:
standby_mode = 'on'
primary_conninfo = 'host=10.0.0.101 port=5432 user=repl password=password'
trigger_file = '/tmp/failover.trigger'
最后,我们需要确认一下数据目录的权限是否配置正确。如果没问题,下面可以启动从节点了:
chmod -R g-rwx,o-rwx /var/lib/postgresql/9.4/main/ ; chown -R postgres.postgres /var/lib/postgresql/9.4/main/
service postgresql start
从下面的信息,我们可以确认主从复制已经配置完毕:
$ psql
psql (9.4.8)
Type "help" for help.
postgres=# select client_addr, state, sent_location, write_location,
postgres-# flush_location, replay_location from pg_stat_replication;
client_addr | state | sent_location | write_location | flush_location | replay_location
-------------+-----------+---------------+----------------+----------------+-----------------
10.0.0.102 | streaming | 0/130011E0 | 0/130011E0 | 0/130011E0 | 0/130011E0
(1 row)
总结
正如我们所见,PostgreSQL的主从复制配置并不复杂。一主多从的机制可以为生产环境提供更好的保障。