PostgreSQL是一个高级开源的对象关系数据库管理系统(或ORDBMS)。 它是一个可扩展和高度可扩展的数据库系统,这意味着它可以处理从单机应用程序到企业Web服务与许多并发用户的负载。 PostgreSQL是符合ACID的(Atomicity,Consistency,Isolation,Durability)。
它支持SQL标准的很大一部分,并提供了许多功能,包括:
复杂查询
外键
触发器
可更新视图
交易完整性
多分支并发控制
如前所述,PostgreSQL数据库系统可以由其用户进行扩展。 有不同的方法可以做到这一点,例如添加新功能,操作符,数据类型,索引方法,过程语言等。
它由PostgreSQL Global Development Group开发,并根据PostgreSQL许可证的条款发布。
PostgreSQL提供了许多复制数据库的方法。 在本教程中,我们将配置主/从复制,这是通过从服务器(主)上的数据库复制到另一个服务器(从属)上的数据库来同步两个数据库之间的数据的过程。
这个配置将在运行Ubuntu 16.04的服务器上完成。
先决条件Ubuntu 16.04服务器上安装了PostgreSQL 9.6
配置UFWUFW(或简单防火墙)是在Ubuntu系统上管理基于iptables的防火墙的工具。 通过apt通过执行:安装它(在两台服务器上)
# apt-get install -y ufw接下来,将PostgreSQL和SSH服务添加到防火墙。 为此,执行:
# ufw allow ssh # ufw allow postgresql启用防火墙:
# ufw enable 配置PostgreSQL主服务器主服务器将具有对数据库的读写权限,并且将具有对从服务器进行数据流传输的能力。
使用文本编辑器,编辑PostgreSQL主配置文件,即/etc/postgresql/9.6/main/postgresql.conf:
# $EDITOR /etc/postgresql/9.6/main/postgresql.conf取消注释listen_addresses行并编辑添加主服务器IP地址:
listen_addresses = 'master_server_IP_address'接下来,取消注释wal_level行改变其值:
wal_level = hot_standby要使用本地同步进行同步级别,请取消注释并编辑以下行:
synchronous_commit = local我们正在使用两台服务器,所以取消注释并编辑两行如下:
max_wal_senders = 2 wal_keep_segments = 10保存并关闭文件。
编辑pg_hba.conf文件以进行身份验证配置。
# $EDITOR /etc/postgresql/9.6/main/pg_hba.conf Paste the following configuration: # Localhost host replication replica 127.0.0.1/32 md5 # PostgreSQL Master IP address host replication replica master_IP_address/32 md5 # PostgreSQL SLave IP address host replication replica slave_IP_address/32 md5保存,退出并重启PostgreSQL:
# systemctl restart postgresql 创建用于复制的用户为复制过程创建一个新的PostgreSQL用户。 登录postgres用户并启动PostgreSQL shell ::
# su - postgres $ psql
创建一个新用户:
postgres=# CREATE USER replica REPLICATION LOGIN ENCRYPTED PASSWORD 'usr_strong_pwd';关闭shell.
主服务器配置结束。
配置从服务器从服务器将不具有对数据库的写入权限,因为它的唯一功能是从主机接受流式传输。 所以它只有READ权限。
首先,停止PostgreSQL服务:
# systemctl stop postgresql编辑PostgreSQL主配置文件:
# $EDITOR /etc/postgresql/9.6/main/postgresql.conf在此文件中,取消注释listen_addresses行并更改其值:。
listen_addresses = 'slave_IP_address'接下来,取消对wal_level行的注释,更改如下:
wal_level = hot_standby如在主设置中,取消注释sync_commit行以使用本地同步。
synchronous_commit = local同样在master中,取消注释并编辑以下两行:
max_wal_senders = 2 wal_keep_segments = 10通过取消注释以下行并更改其值,启用从服务器的hot_standby:
hot_standby = on保存并退出。
将数据从主机复制到从机要从主服务器同步到从服务器,从服务器上的PostgreSQL主目录必须由主服务器的主目录替换。 在从服务器中,登录postgres用户:
# su - postgres备份实际的数据目录:
$ cd/var/lib/postgresql/9.6/ $ mv main main_bak创建一个新的主目录:
$ mkdir main/更改权限:
$ chmod 700 main此时,使用pg_basebackup将主目录从主服务器复制到从服务器:
# pg_basebackup -h master_IP_address -U replica -D /var/lib/postgresql/9.6/main -P --xlog