更新时间:2025-07-29 GMT+08:00

PostgreSQL部署

简介

PostgreSQL是一个开源的、高度稳定的数据库系统,支持多种SQL功能,包括外键、子查询、触发器以及用户自定义的数据类型和函数。它进一步增强了SQL语言,提供了一些细致地扩展数据工作负载的功能。它主要用于移动、网络、地理空间和分析应用程序领域,被业界誉为“最先进的开源数据库”。本教程介绍如何在HCE 2.0上安装部署PostgreSQL。

准备工作

  • 准备两台ECS实例,并分配公网IP或者弹性公网IP(EIP)。一台作为主节点,另一台作为从节点。
  • 安全组入方向都已放开5432端口。

前置条件

已完成yum源的配置,可参考HCE的REPO源配置与软件安装进行公网yum源的配置。

操作步骤

  1. 配置PostgreSQL主节点。

    1. 执行如下命令安装服务端、客户端和相关组件:
      dnf install postgresql postgresql-contrib postgresql-server
    2. 执行如下命令初始化数据库:
      postgresql-setup --initdb --unit postgresql
    3. 依次执行如下命令启动服务并查看服务状态:
      systemctl start postgresql
      systemctl status postgresql

      如果显示active (running)则表示服务启动成功。

      如果需要将PostgreSQL服务设置为开机自启动,则需要执行以下命令。

      systemctl enable postgresql
    4. 执行以下命令登录postgres账号:
      su - postgres
    5. 执行以下语句进入psql终端:
      psql
    6. 输入以下语句创建账号,并配置密码和权限:
      CREATE ROLE replica login replication ENCRYPTED PASSWORD 'xxxxxx';

      其中账号为replica,权限(login和replication)为登录和备份权限,密码为xxxxxx

    7. 输入以下语句查看创建的账号:
      SELECT usename FROM pg_user;

      如果返回结果如图1所示,则表示账户创建成功。

      图1 账户创建成功
    8. 输入以下语句查看创建的权限:
      SELECT rolname FROM pg_roles;

      如果返回结果如图2所示,则表示权限创建成功。

      图2 权限创建成功
    9. 执行以下语句退出psql终端:
      \q
    10. 执行以下语句退出postgres用户:
      exit
    11. 编辑“/var/lib/pgsql/data/pg_hba.conf”文件配置replica用户白名单。

      找到IPv4 local connections部分,添加以下信息:

      host    all             all             <从节点的IPv4网段>          md5
      host    replication     replica         <从节点的IPv4网段>          md5

      将自己部署的从节点IPv4网段信息填入上述对应位置。

    12. 编辑“/var/lib/pgsql/data/postgresql.conf”文件,找到如下参数,进行配置:
      listen_addresses = '*'   #监听的内网 IP 地址
      max_connections = 100    #最大连接数,从库的 max_connections 必须要大于主库的
      wal_level = hot_standby  #启用热备模式
      synchronous_commit = on  #开启同步复制
      max_wal_senders = 32     #同步最大的进程数量
      wal_sender_timeout = 60s #流复制主机发送数据的超时时间
    13. 最后执行以下命令重启服务:
      systemctl restart postgresql

  2. 配置PostgreSQL从节点。

    1. 执行以下命令在从节点安装服务端、客户端和相关组件:
      dnf install postgresql postgresql-contrib postgresql-server
    2. 执行以下命令在从节点创建备份目录:
      pg_basebackup -D /var/lib/pgsql/data -h <主库IP> -p 5432 -U replica -X stream -P -R

      具体参数含义如下:

      -D:指定备份目录。

      -h:指定主库的 IP 地址或主机名。

      -p:指定主库的端口号。

      -U:指定用于连接数据库的用户名。

      -X:指定WAL文件复制方式,此处stream表示流复制。

      -P:显示进度信息。

      -R:表示自动写replication的配置信息。

      如果显示如图3所示,则表示备份成功。

      图3 备份成功

      此时,会在“/var/lib/pgsql/data”目录生成standby.signal文件,并在postgresql.auto.conf文件自动写入主库连接信息。

    3. 执行以下命令修改目录所属的用户组:
      chown -R postgres.postgres /var/lib/pgsql/data
    4. 最后执行以下命令重启服务:
      systemctl restart postgresql

  3. 验证配置是否成功。

    1. 在从节点执行以下命令验证从节点是否配置成功:
      sudo -u postgres psql -c "SELECT pg_is_in_recovery()"

      如果显示如图4所示,表示从节点配置成功。

      图4 从节点配置成功
    2. 在主节点执行如下命令获取从节点信息:
      sudo -u postgres psql -x -c "SELECT * FROM pg_stat_replication" -d postgres

      如果显示如图5所示,则表示配置成功。

      图5 配置成功

以上密码、权限相关配置仅用于测试,业务环境请谨慎使用。