如何在CentOS 7上安装和配置PostgreSQL 9.6的主从复制
PostgreSQL或Postgres是一个开源的对象关系数据库管理系统(ORDBMS),拥有超过15年的积极开发经验。 这是一个功能强大的数据库服务器,可以处理高负载。 PostgreSQL可以在Linux,Unix,BSD和Windows服务器上使用。
主/从数据库复制是将数据从一台服务器(主服务器)上的数据复制(同步)到另一台服务器(从服务器)上的数据库的过程。 这个过程的主要好处是将数据库分发到多台机器,所以当主服务器出现问题时,就有一台备份机器具有相同的数据可用于处理请求而不会中断。
PostgreSQL提供了几种复制数据库的方法。 它可用于备份目的并提供高可用性数据库服务器。 在本教程中,我们将向您展示如何在CentOS 7服务器上安装和配置PostgreSQL 9.6主从复制。 我们将使用热备份模式,这是深入学习PostgreSQL的一个很好的起点。
我们将要做什么
- 安装PostgreSQL 9.6
- 启动并配置PostgreSQL 9.6
- 配置Firewalld
- 配置主服务器
- 配置从服务器
- 测试
条件
- 1个CentOS 7服务器
- 主 - 读取和写入权限 - IP: 10.0.15.10
- 1个CentOS 7服务器
- 从属 - 只读取权限 - IP: 10.0.15.11
- 根权限
第1步 - 安装PostgreSQL 9.6
在本教程中,我们将讨论如何在CentOS 7服务器上安装最新的PostgreSQL版本9.6。 默认情况下,CentOS官方版本库提供了一个较老的版本,所以我们需要从官方仓库安装PostgreSQL。
将新的PostgreSQL 9.6存储库添加到系统中。
yum -y install https://yum.postgresql.org/9.6/redhat/rhel-7-x86_64/pgdg-centos96-9.6-3.noarch.rpm
现在使用下面的yum命令安装PostgreSQL 9.6。
yum -y install postgresql96-server postgresql96-contrib
所以这样,你可以安装PostgreSQL 9.6。
第2步 - 启动并配置PostgreSQL 9.6
在开始postgres服务之前,我们需要初始化数据库。 为此,进入'/ usr / pgsql-9.6 / bin '目录并用postgres设置' postgresql96-setup '初始化数据库。
cd /usr/pgsql-9.6/bin
./postgresql96-setup initdb
接下来,启动postgres服务,并启用它在系统启动时自动启动。
systemctl start postgresql-9.6
systemctl enable postgresql-9.6
默认情况下,postgres在端口5432上运行。所以通过执行netstat命令来确保端口5432的状态是' LISTEN '。
netstat -plntu
如果您没有netstat命令,请安装net-tools。 这是网络工具的一部分。
yum -y install net-tools
所以PostgreSQL 9.6已经启动了。 但是我们仍然需要为postgres用户配置密码。 以“postgres”用户身份登录,然后访问postgres的“psql”shell。
su - postgres
psql
用下面的查询给' postgres '用户新密码。
\password postgres
Enter new password:
所以PostgreSQL 9.6已经启动了,并为postgres用户配置了一个新的密码。
第3步 - 配置Firewalld
Firewalld是CentOS 7默认的防火墙管理工具。我们将启动这个服务并打开PostgreSQL连接的端口。
启动firewalld并使其能够在系统引导时使用以下命令自动启动:
systemctl start firewalld
systemctl enable firewalld
接下来,使用以下命令将新的postgres服务添加到firewalld。
firewall-cmd --add-service=postgresql --permanent
firewall-cmd --reload
现在检查服务的开放端口。
firewall-cmd --list-all
你会看到PostgreSQL服务已经被添加到了firewalld。
说明:在主从设备上执行第1步,第2步和第3步。
第4步 - 配置主服务器
在这一步中,我们将为复制配置一个主服务器。 这是主要的服务器,允许从其上运行的应用程序读取和写入进程。 主站上的PostgreSQL只在“10.0.1.10”IP地址上运行,并对从服务器执行流式复制。
转到pgsql数据目录' /var/lib/pgsql/9.6/data '并编辑配置文件' postgresql.conf '。
cd /var/lib/pgsql/9.6/data
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变量提供一个值作为命令。
archive_mode = on
archive_command = 'cp %p /var/lib/pgsql/9.6/archive/%f'
对于“复制”设置,取消注释“wal_sender”行并将值更改为2(在本教程中,我们只使用2台主服务器和从服务器),'wal_keep_segments'的值为10。
max_wal_senders = 2
wal_keep_segments = 10
对于应用程序名称,取消注释“synchronous_standby_names”行并将值更改为“ pgslave01 ”。
synchronous_standby_names = 'pgslave01'
而已。 保存这些更改并退出编辑器。
继续,在postgresql.conf文件中,启用了归档模式,所以我们需要创建一个新的目录进行归档。
创建一个新目录,更改其权限,并将所有者更改为postgres用户。
mkdir -p /var/lib/pgsql/9.6/archive/
chmod 700 /var/lib/pgsql/9.6/archive/
chown -R postgres:postgres /var/lib/pgsql/9.6/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 9.6。
systemctl restart postgresql-9.6
接下来,我们需要创建一个具有复制权限的新用户。 我们将创建一个名为“ 副本 ”的新用户。
以postgres用户身份登录,然后创建一个新的“ 副本 ”用户,密码为“ aqwe123 @ ”。
su - postgres
createuser --replication -P replica
Enter New Password:
因此,PostgreSQL 9.6的主配置已经完成,并且复制的用户被创建。
第5步 - 配置从服务器
在这一步中,我们将配置从服务器。 我们想用从主服务器的postgres数据替换从服务器上的postgres数据目录,然后配置从服务器在IP地址“10.0.15.11”下运行,最后在其上启用hot_standby以允许只读而不写。
在我们开始配置从服务器之前,使用下面的systemctl命令停止postgres服务。
systemctl stop postgresql-9.6
然后进入postgres目录,并备份数据目录。
cd /var/lib/pgsql/9.6/
mv data data-backup
创建新的数据目录并将目录的所有权限更改为postgres用户。
mkdir -p data/
chmod 700 data/
chown -R postgres:postgres data/
接下来,以postgres用户身份登录,并将所有数据目录从“ 主 ”服务器作为副本用户复制到“ 从属 ”服务器。
su - postgres
pg_basebackup -h 10.0.15.10 -U replica -D /var/lib/pgsql/9.6/data -P --xlog
Password:
输入您的密码并等待从主服务器到从服务器的数据传输。
传输完成后,进入postgres数据目录并编辑从服务器上的postgresql.conf文件。
cd /var/lib/pgsql/9.6/data/
vim postgresql.conf
将“listen_addresses”的值更改为从服务器IP地址“10.0.15.11”。
listen_addresses = '10.0.15.11'
通过取消注释以下行,在从服务器上启用“ hot_standby ”,并将该值更改为“ on ”。
hot_standby = on
而已。 保存更改并退出编辑器。
然后用vim创建新的' recovery.conf '文件。
vim recovery.conf
在其中粘贴以下配置。
standby_mode = 'on'
primary_conninfo = 'host=10.0.15.10 port=5432 user=replica password=aqwe123@ application_name=pgslave01'
trigger_file = '/tmp/postgresql.trigger.5432'
保存更改并退出文件。
注意:在primary_conninfo上 ,输入您自己的服务器详细信息。
将recovery.conf文件的所有权权限更改为“postgres”用户的权限。
chmod 600 recovery.conf
chown postgres:postgres recovery.conf
在从服务器上启动PostgreSQL 9.6。
systemctl start postgresql-9.6
从属服务器配置已完成。
现在,当您检查从服务器时,您将看到PostgreSQL 9.6正在服务器上运行,IP地址为“ 10.0.15.11 ”。
netstat -plntu
第6步 - 测试
PostgreSQL 9.6主从复制的安装和配置已经完成。 要测试设置,请检查复制的状态流,并测试从主站到从站的数据复制。
登录到主服务器并切换到postgres用户。
su - postgres
接下来,用以下命令检查PostgreSQL的流状态复制。
psql -c "select application_name, state, sync_priority, sync_state from pg_stat_replication;"
psql -x -c "select * from pg_stat_replication;"
你应该看到状态值是' streaming ',而sync_state是' sync '。
接下来,通过从主服务器插入数据进行测试,然后检查从服务器上的所有数据。
以postgres用户身份登录并访问“ MASTER ”服务器上的PostgreSQL shell。
su - postgres
psql
创建新表' replica_test '并使用以下插入查询将一些数据插入到其中。
CREATE TABLE replica_test (test 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');
现在登录到“ 从服务器”服务器,与您在主服务器上的方式类似。
su - postgres
psql
使用下面的查询检查表'replica_test'中的所有数据。
select * from replica_test;
所以你会看到所有的数据都从“ MASTER ”服务器复制到“ SLAVE ”服务器。
额外的测试
测试从“SLAVE”服务器执行“WRITE”操作。
INSERT INTO replica_test VALUES ('this is SLAVE');
结果应该是' 不能执行INSERT '。
所以在CentOS 7上安装和配置PostgreSQL 9.6主从复制是成功的。