PostgreSQL或Postgres是一个开源的对象关系数据库管理系统(ORDBMS),具有15年以上的积极发展。 它是一个强大的数据库服务器,可以处理高工作负载。 PostgreSQL可以在Linux,Unix,BSD和Windows服务器上使用。
主/从数据库复制是将数据从一台服务器(主服务器)上的数据库复制(同步)到其他服务器(从站)上的数据库的过程。 此过程的主要优点是将数据库分发到多台机器,因此当主服务器出现问题时,有一台备份机器具有相同的数据可用于不间断地处理请求。
PostgreSQL提供了复制数据库的几种方式。 它可以用于备份目的,并提供高可用性数据库服务器。 在本教程中,我将介绍如何使用热备份模式安装和配置PostgreSQL复制。 热备份模式易于配置,这是深入学习PostgreSQL的一个很好的起点。
热备份模式需要2个数据库服务器,我们将在两台服务器上使用Ubuntu作为操作系统。
- 主服务器 - 接受客户端具有读写权限的连接。
- 从服务器 - 备用服务器以只读权限从主服务器运行数据副本。
先决条件
- 2个Ubuntu服务器 - 1个用于主服务器,1个用于从服务器。
- 服务器上的根权限。
- 有关Ubuntu,apt等的一些基础知识
第1步 - 设置主机名
使用ssh登录到两个服务器:
ssh user@masterip
ssh user@slaveip
现在使用hostnamectl命令设置两台服务器(主服务器和从服务器)的主机名。
在主服务器上:
sudo hostnamectl set-hostname master-server
在从服务器上:
sudo hostnamectl set-hostname slave-server
接下来,使用vim编辑器编辑/ etc / hosts文件:
sudo vim /etc/hosts
将此配置粘贴到主服务器:
192.168.1.249 master-server
将此配置粘贴到从属服务器:
192.168.1.248 slave-server
保存文件并退出编辑器。
第2步 - 在主服务器和从服务器上安装PostgreSQL
在我们开始安装PostgreSQL之前,请更新Ubuntu存储库:
sudo apt-get update
接下来,安装PostgreSQL及其所有依赖项:
sudo apt-get install postgresql postgresql-client postgresql-contrib
Postgres安装后,为postgres用户提供新密码(安装时自动创建)。
passwd postgres
输入您的postgres用户密码。
现在测试PostgreSQL:
su - postgres
psql
\conninfo
你会看到以下结果:
第3步 - 配置主服务器
在此步骤中,我们将配置“主服务器”,IP地址为“192.168.1.249”。 我们将创建一个具有特殊权限的新用户/角色来执行复制,然后编辑PostgreSQL配置文件以启用热备份复制模式。
从root权限,使用su命令切换到PostgreSQL用户:
su - postgres
使用psql命令访问Postgres shell,并在此PostgreSQL查询中键入以创建新的用户/角色:
psql
CREATE USER replica REPLICATION LOGIN ENCRYPTED PASSWORD 'replicauser@';
使用PostgreSQL命令检查新的副本用户如下:
\du
已创建新的副本用户。
接下来,去PostgreSQL目录'/etc/postgresql/9.4/main'来编辑配置文件。
cd /etc/postgresql/9.4/main/
用vim打开postgresql.conf文件:
vim postgresql.conf
取消注释行59并添加服务器IP地址。
listen_addresses = 'localhost,192.168.1.249'
在WAL(预写日志)设置行175中,取消注释并将值更改为hot_standby。
wal_level = hot_standby
在检查点第199行中,取消注释'checkpoint_segments'并将值更改为8。
checkpoint_segments = 8
在归档部分第206和208行中,打开归档选项并添加归档命令。
archive_mode = on
archive_command = 'cp -i %p /var/lib/postgresql/9.4/main/archive/%f'
在复制部分行224和226中,将值更改为最大数量的WAL发件人进程。
max_wal_senders = 3
wal_keep_segments = 8
保存文件并退出vim。
现在在“main”目录下创建一个新的目录,用于存档配置 - 以下列命令运行postgres用户:
mkdir -p /var/lib/9.4/main/archive/
接下来,编辑pg_hba.conf文件以允许复制连接。
vim pg_hba.conf
在行尾,为用户'replica'添加新配置以进行连接。
host replication replica 192.168.1.248/24 md5
#192.168.1.248 is slave-server ip address
保存并退出。
第4步 - 从服务器配置
配置从服务器,如主服务器。 使用su成为postgres用户,并转到PostgreSQL配置目录。
su - postgres
cd /etc/postgresql/9.4/main/
用vim编辑postgresql.conf:
vim postgresql.conf
取消注释行59,并添加从服务器IP地址。
listen_addresses = 'localhost,192.168.1.248'
转到第175行并取消注释wal_level设置,将值更改为hot_standby。
wal_level = hot_standby
检查点部分的卸载线199。
checkpoint_segments = 8
取消注释行224和226配置max_wal_sender进程。
max_wal_senders = 3
wal_keep_segments = 8
取消注释线路245以在从属服务器上启用hot_standby模式。
hot_standby = on
保存并退出。
第5步 - 将数据从主服务器同步到从服务器
在此步骤中,我们将PostgreSQL数据目录“/var/lib/postgresql/9.4/main”移动到备份文件夹,然后用“pg_basebackup”命令将其替换为最新的主数据。
仅在从服务器上运行所有命令sbelow!
在从服务器上停止PostgreSQL:
systemctl stop postgresql
现在登录到postgres用户,并将'main'目录重命名为'main_original'作为备份。
su - postgres
mv 9.4/main 9.4/main_original
运行以下命令将数据从主服务器复制到从属服务器:
pg_basebackup -h 192.168.1.249 -D /var/lib/postgresql/9.4/main -U replica -v -P
注意:
- 192.168.1.249是主服务器的IP地址。
- 系统将提示您输入用户复制的密码。
转到新的“main”目录,并使用vim创建新的恢复文件“recovery.conf”
cd /var/lib/postgresql/9.4/main/
vim recovery.conf
粘贴以下配置:
standby_mode = 'on'
primary_conninfo = 'host=192.168.1.249 port=5432 user=replica password=replicauser@'
restore_command = 'cp //var/lib/postgresql/9.4/main/archive/%f %p'
trigger_file = '/tmp/postgresql.trigger.5432'
现在回到root用户退出并启动PostgreSQL与systemctl命令:
exit
systemctl start postgresql
运行start命令后,确保没有错误。
第6步 - 测试
转到主服务器并登录postgres用户,然后运行以下命令查看复制信息。
su - postgres
psql -x -c "select * from pg_stat_replication;"
您将在下面看到复制信息:
接下来,测试从主服务器创建一个新的数据库,然后检查数据库是否存在于从属服务器上。
su - postgres
psql
create database youcl;
现在登录到从服务器,并检查'youcl'数据库是否自动映射到从服务器。
su - postgres
psql
\list
数据库已从主服务器复制到从服务器。