如何在CentOS 7上安装和配置PostgreSQL 9.6的主从复制

如何在CentOS 7上安装和配置PostgreSQL 9.6的主从复制

PostgreSQL或Postgres是一个开源的对象关系数据库管理系统(ORDBMS),拥有超过15年的积极开发经验。 这是一个功能强大的数据库服务器,可以处理高负载。 PostgreSQL可以在Linux,Unix,BSD和Windows服务器上使用。

主/从数据库复制是将数据从一台服务器(主服务器)上的数据复制(同步)到另一台服务器(从服务器)上的数据库的过程。 这个过程的主要好处是将数据库分发到多台机器,所以当主服务器出现问题时,就有一台备份机器具有相同的数据可用于处理请求而不会中断。

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

我们将要做什么

  1. 安装PostgreSQL 9.6
  2. 启动并配置PostgreSQL 9.6
  3. 配置Firewalld
  4. 配置主服务器
  5. 配置从服务器
  6. 测试

条件

    • 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主从复制是成功的。

    参考

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

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

    支付宝扫一扫打赏

    微信扫一扫打赏