文档首页/ 弹性云服务器 ECS/ 最佳实践/ 搭建应用/ PostgreSQL本地Slave搭建步骤
更新时间:2024-07-31 GMT+08:00

PostgreSQL本地Slave搭建步骤

PostgreSQL是什么?

PostgreSQL是一个开源对象关系型数据库管理系统,并侧重于可扩展性和标准的符合性。PostgreSQL面向企业复杂SQL处理的OLTP在线事务处理场景,支持NoSQL数据类型(JSON/XML/hstore),支持GIS地理信息处理,在可靠性、数据完整性方面有良好声誉,适用于互联网网站、位置应用系统、复杂数据对象处理等应用场景。

本文指导您使用华为云弹性云服务器搭建PostgreSQL。

搭建前准备

  • 创建弹性云服务器。
  • 配置弹性云服务器安全组规则:开放 5432 端口。

    本文使用的云服务器操作系统:CentOS 7.6 64bit

    本文使用的PostgreSQL版本:PostgreSQL (11.2)

  • 为了更好的获取和更新系统和软件,建议您更新镜像源为华为云镜像源,详细操作,请参见如何使用自动化工具配置华为云镜像源(x86_64和ARM)?

主节点配置

  1. 依次执行以下命令,安装PostgreSQL

    # yum update -y

    # yum install https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm

    # yum install postgresql11-server

    # yum install postgresql11

    # /usr/pgsql-11/bin/postgresql-11-setup initdb

    # systemctl enable postgresql-11

    # systemctl start postgresql-11

  2. 执行以下命令,切换到postgres用户(安装好生成默认的用户)。

    # su - postgres

  3. 执行以下命令,进入数据库 。

    # psql

  1. 执行以下命令,创建账号并授权。

    create role 账户名 login replication encrypted password '密码';

    上述命令中密码必须用单引号。

    以创建的账号名为dbar,密码为xxxxx为例,命令如下:

    create role dbar login replication encrypted password 'xxxxx';

  2. 执行以下命令,修改/var/lib/pgsql/11/data/pg_hba.conf配置文件,添加如下内容。
    # vim /var/lib/pgsql/11/data/pg_hba.conf
    host all all 192.168.1.0/24 md5    #允许VPC网段中md5密码认证连接
    host replication dbar 备库实际IP/24 md5  #允许用户从replication数据库进行数据同步
  3. 执行以下命令,修改/var/lib/pgsql/11/data/postgresql.conf。

    # vim postgresql.conf

    wal_level = hot_standby  #热备模式 
    max_wal_senders= 6 #可以设置最多几个流复制链接
    wal_sender_timeout  = 60s  #流复制主机发送数据的超时时间
    max_connections = 512 #从库的 max_connections要大于主库
    archive_command=’cp %p /var/lib/pgsql/11/data/archivelog/%f’#归档
    wal_keep_segments=10240
    archive_mode = on #允许归档  
    listen_addresses= xxx.xx.xx.xx  #实际的本地ip地址  
  4. 执行以下命令,重启服务

    # systemctl restart postgresql-11

从节点配置

  1. 依次执行以下命令,完成从节点安装。

    # yum update -y

    # yum install https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm

    # yum install postgresql11-server

    # yum install postgresql11

  2. 执行以下命令,复制master配置相关文件

    # pg_basebackup -h 主节点ip -U dbar -D /var/lib/pgsql/11/data -X stream -P

    # cp /usr/pgsql-11/share/recovery.conf.sample /var/lib/pgsql/11/data/recovery.conf

  3. 执行以下命令,修改recovery.conf文件。

    # vim recovery.conf

    standby_mode = on  # 声明此节点为从库
    primary_conninfo = 'host=主节点IP  port=5432 user=dbar password=xxxxx(此处密码不能加单引号)
    trigger_file = '/var/lib/pgsql/11/data/trigger.kenyon'    #主从切换时后的触发文件
    recovery_target_timeline = 'latest' 
    restore_command = 'cp /var/lib/pgsql/11/data/archivelog/%f %p'
    archive_cleanup_command = 'pg_archivecleanup /var/lib/pgsql/11/data/archivelog %r' #清除过期归档
  4. 执行以下命令,修改postgresql.conf文件。

    # chown -R postgres.postgres /var/lib/pgsql/11/data

  5. 修改/var/lib/pgsql/11/data/postgresql.conf。

    listen_addresses= xxx.xx.xx.xx #实际的本地ip地址

    max_connections = 600

  6. 执行以下命令,启动服务,设置开机自启。

    #systemctl enable postgresql-11

    #systemctl start postgresql-11

验证部署完成

  1. 执行以下命令,在主节点中可查看到sender进程。

    # ps aux |grep sender

  2. 执行以下命令,从节点中可查看到receiver进程。

    # ps aux | grep receiver

  3. 执行以下命令,主库中可查看到从库状态。

    # su - postgres

    -bash-4.2# psql

    replication=# select * from pg_stat_replication;

  1. 在主库建一个库,验证备库是否可以同步。
    1. 在主库执行以下命令

      postgres=# create database testdb;

      postgres=# \l

    2. 在备库执行以下命令查看。

      postgres=# \l