如何在Ubuntu 16.04上为PostgreSQL 9.6设置主从复制

PostgreSQL或Postgres是一个开源的对象关系数据库管理系统(ORDBMS),具有15年以上的积极发展。 它是一个强大的数据库服务器,可以处理高工作负载。 PostgreSQL可以在Linux,Unix,BSD和Windows服务器上使用。

主/从数据库复制是将数据从一台服务器(主服务器)上的数据库复制(同步)到其他服务器(从站)上的数据库的过程。 此过程的主要优点是将数据库分发到多台机器,因此当主服务器出现问题时,有一台具有相同数据的备份机器可用于不间断地处理请求。

PostgreSQL提供了复制数据库的几种方式。 它可以用于备份目的,并提供高可用性数据库服务器。 在本教程中,我们将介绍如何在Ubuntu 16.04服务器上安装和配置PostgreSQL 9.6主从复制。 我们将使用热备份模式,这是深入学习PostgreSQL的一个很好的起点。

我们将要做什么:

  1. 安装PostgreSQL 9.6。
  2. 配置UFW防火墙
  3. 配置MASTER服务器。
  4. 配置SLAVE服务器。
  5. 将PostgreSQL数据从MASTER复制到SLAVE。
  6. 测试。

先决条件:

  • 1 Ubuntu 16.04服务器
    • MASTER - 允许读取和写入 - IP:10.0.15.10
  • 1 Ubuntu 16.04服务器
    • SLAVE - 只读 - IP:10.0.15.11
  • 根特权

第1步 - 安装PostgreSQL 9.6

在本教程中,我们将安装最新版本的PostgreSQL 9.6。 在官方Ubuntu版本库中,它们仅提供PostgreSQL 9.5,因此我们需要直接从PostgreSQL存储库安装最新版本。

将postgreSQL 9.6存储库添加到sources.list.d目录。

echo 'deb http://apt.postgresql.org/pub/repos/apt/ xenial-pgdg main' | tee /etc/apt/sources.list.d/postgresql.list

并将PostgreSQL签名密钥导入系统。

wget -q https://www.postgresql.org/media/keys/ACCC4CF8.asc -O - | sudo apt-key add -

现在使用apt命令更新系统资源库。

apt-get update

接下来,使用apt命令安装PosgreSQL 9.6包。

apt-get install -y postgresql-9.6 postgresql-contrib-9.6

如果安装完成,请将其添加到启动时自动启动。

systemctl enable postgresql

默认情况下,PostgreSQL在本地主机(127.0.0.1)上运行Ubuntu上端口5432的IP地址,请使用netstat命令检查。

netstat -plntu

PostgreSQL 9.6在系统上运行。 在下一步中,我们必须为postgres用户配置密码。

从root帐户,使用su命令登录到postgres用户,然后访问postgres前端终端psql。

su - postgres
psql

请更改postgres用户的密码,并在下面查看postgres查询连接信息。

\password postgres
\conninfo

PostgreSQL 9.6已经安装在系统上,运行没有错误,postgres用户的密码已被更新。

第2步 - 配置UFW防火墙

UFW或简单防火墙是在Ubuntu上管理基于iptables的防火墙的应用程序。 UFW是Ubuntu Linux的默认防火墙配置工具,提供了一种用户友好的方式来配置防火墙。

我们可以使用apt命令从Ubuntu主库安装ufw。

apt-get install -y ufw

向UFW防火墙添加新服务:使用以下命令添加SSH和PostgreSQL服务。

ufw allow ssh
ufw allow postgresql

启用UFW防火墙并检查状态。

ufw enable
ufw status

已安装UFW防火墙,并添加了PostgreSQL服务。

注意:

在MASTER和SLAVE服务器上运行第1步和第2步。

第3步 - 配置PostgreSQL MASTER服务器

主服务器的IP地址为10.0.15.10,并且postgres服务将以该IP为默认端口运行。 主服务器将具有对数据库的READ和WRITE权限,并对从服务器执行流复制。

转到postgres配置目录' /etc/postgresql/9.6/main '并使用vim编辑postgresql.conf文件。

cd /etc/postgresql/9.6/main/
vim postgresql.conf

取消注释'listen_addresses'行,并将值更改为主服务器IP地址'10.0.15.10 '。

listen_addresses = '10.0.15.10'

取消注释'wal_level'行,并将值更改为' hot_standby '。

wal_level = hot_standby

对于同步级别,我们将使用本地同步。 取消注释和更改值行如下。

synchronous_commit = local

启用归档模式并将archive_command选项更改为命令'cp%p /var/lib/postgresql/9.6/main/archive/%f'。

archive_mode = on
archive_command = 'cp %p /var/lib/postgresql/9.6/main/archive/%f'

对于“复制”设置,在本教程中,我们仅使用2个服务器,主服务器和从服务器,取消注释“ wal_sender ”行,并将值更改为2 ,“ wal_keep_segments ”值为10

max_wal_senders = 2
wal_keep_segments = 10

对于应用程序名称,取消注释'synchronous_standby_names'行并将值更改为名称' pgslave001 '。

synchronous_standby_names = 'pgslave001'

保存文件并退出编辑器。

在postgresql.conf文件中,归档模式已启用,因此我们需要为归档创建一个新目录。 创建一个新的归档目录,更改权限并将所有者更改为postgres用户。

mkdir -p /var/lib/postgresql/9.6/main/archive/
chmod 700 /var/lib/postgresql/9.6/main/archive/
chown -R postgres:postgres /var/lib/postgresql/9.6/main/archive/

接下来,编辑pg_hba.conf文件进行身份验证配置。

vim pg_hba.conf

将下面的配置粘贴到行尾。

# Localhost
host    replication     replica          127.0.0.1/32            md5

# PostgreSQL Master IP address
host    replication     replica          10.0.15.10/32            md5

# PostgreSQL SLave IP address
host    replication     replica          10.0.15.11/32            md5

保存并退出,然后重新启动PostgreSQL。

systemctl restart postgresql

PostgreSQL运行在IP地址为10.0.15.10,请使用netstat命令检查。

netstat -plntu

接下来,创建一个新的用户进行复制。 我们将创建一个名为' replica '的新用户,密码为' aqwe123 @ '。 请在这里选择安全密码进行安装! 登录postgres用户并访问postgres前端终端psql。

su - postgres
psql

创建新的' replica '用户密码' aqwe123 @ '与postgres查询下面。

CREATE USER replica REPLICATION LOGIN ENCRYPTED PASSWORD 'aqwe123@';

现在,在下面查看具有' du '查询的新用户,您将看到具有复制权限的副本用户。

\du

MASTER服务器配置已经完成。

第4步 - 配置SLAVE服务器

SLAVE服务器的IP地址为10.0.15.11。 而这个服务器只能具有对数据库的READ权限。 Postgres数据库服务器将在服务器的IP地址下运行,而不是本地主机IP。

使用下面的systemctl命令停止从服务器上的postgres服务。

systemctl stop postgresql

转到Postgres配置目录' /etc/postgresql/9.6/main ',然后编辑配置文件' postgresql.conf '。

cd /etc/postgresql/9.6/main/
vim postgresql.conf

取消注释listen_addresses行,并将该值替换为从服务器IP地址10.0.15.11

listen_addresses = '10.0.15.11'

取消注释'wal_level'行,并将值更改为' hot_standby '。

wal_level = hot_standby

对于同步级别,取消注释sync_commit行并更改值,如下所示。

synchronous_commit = local

对于复制设置,取消注释max_wal_senders行,并将值替换为' 2 ',因为只需使用2个服务器。 而对于wal_keep_segments,将值更改为“ 10 ”。

max_wal_senders = 2
wal_keep_segments = 10

取消注册应用程序名称的“synchronous_standby_names”行,并将值更改为名称“ pgslave001 ”。

synchronous_standby_names = 'pgslave001'

通过取消注释以下行并将值更改为“ on ”,启用从服务器的hot_standby

hot_standby = on

保存文件并退出编辑器。

第5步 - 将PostgreSQL数据从MASTER复制到SLAVE

接下来,我们要用' MASTER '服务器将' SLAVE '服务器上的postgres主目录替换为主数据目录。

登录SLAVE服务器并访问postgres用户。

su - postgres

转到postgres数据目录' main ',并通过重命名目录名来备份它。

cd 9.6/
mv main main-bekup

创建新的' main '目录为' postgres '用户,并确保有权限像main-bekup目录。

mkdir main/
chmod 700 main/

接下来,使用pg_basebackup命令将主目录从MASTER服务器复制到SLAVE服务器,我们将使用副本用户执行此数据复制。

pg_basebackup -h 10.0.15.10 -U replica -D /var/lib/postgresql/9.6/main -P --xlog
Password:

数据传输完成后,转到主数据目录并创建一个新的recovery.conf文件。

cd /var/lib/postgresql/9.6/main/
vim recovery.conf

粘贴以下配置:

standby_mode = 'on'
primary_conninfo = 'host=10.0.15.10 port=5432 user=replica password=aqwe123@ application_name=pgslave001'
restore_command = 'cp /var/lib/postgresql/9.6/main/archive/%f %p'
trigger_file = '/tmp/postgresql.trigger.5432'

保存并退出,然后使用chmod将文件的权限更改为600。

chmod 600 recovery.conf

现在在SLAVE服务器上启动PostgreSQL 9.6,并确保postgres服务在netstat的IP地址10.0.15.11上运行。

systemctl start postgresql
netstat -plntu

SLAVE服务器的数据传输和配置已经完成。

第6步 - 测试

对于测试,我们将检查PostgreSQL 9.6的复制状态,并尝试在MASTER服务器上创建一个新表,然后通过检查SLAVE服务器中的所有数据来检查复制。

登录到MASTER服务器并登录到postgres用户。

su - postgres

运行下面的psql命令来查看复制状态。

psql -c "select application_name, state, sync_priority, sync_state from pg_stat_replication;"
psql -x -c "select * from pg_stat_replication;"

你会得到如下结果。

接下来,尝试从MASTER服务器创建一个新表。 登录主服务器上的postgres用户。

su - postgres
psql

并创建一个名为“ replica_test ”的新表,并通过在下面运行postgres查询将数据插入到表中。

CREATE TABLE replica_test (hakase varchar(100));
INSERT INTO replica_test VALUES ('youcl.com');
INSERT INTO replica_test VALUES ('This is from Master');
INSERT INTO replica_test VALUES ('pg replication by hakase-labs');

接下来,登录到SLAVE服务器上的postgres用户并访问psql终端。

su - postgres
psql

检查下面的postgres查询' replica_test '表中的数据。

select * from replica_test;

并且您将获得与MASTER相同的数据,它将从MASTER服务器复制到SLAVE服务器。

附加测试:

测试在SLAVE服务器上写下面的查询。

INSERT INTO replica_test VALUES ('this is SLAVE');

并且您将在SLAVE服务器上收到有关“ 无法执行INSERT ”查询的错误消息。

在Ubuntu 16.04上安装和配置PostgreSQL 9.6与主从复制Xenial Xerus已经取得成功。

参考

赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏