# PostgreSQL部署
#### 简介
PostgreSQL是一个开源的、高度稳定的数据库系统，支持多种SQL功能，包括外键、子查询、触发器以及用户自定义的数据类型和函数。它进一步增强了SQL语言，提供了一些细致地扩展数据工作负载的功能。它主要用于移动、网络、地理空间和分析应用程序领域，被业界誉为"最先进的开源数据库"。本教程介绍如何在HCE上安装部署PostgreSQL。
#### 准备工作
- 准备两台ECS实例，并分配公网IP或者弹性公网IP（EIP）。一台作为主节点，另一台作为从节点。
 
- 安全组入方向都已放通5432端口。
![](https://support.huaweicloud.com/bestpractice-hce/public_sys-resources/notice_3.0-zh-cn.png)
5432端口属于高危端口，建议使用前请做好充分的安全评估。
#### 前置条件
已完成本机yum源的配置，可参考[HCE的REPO源配置](https://support.huaweicloud.com/usermanual-hce/hce_repo.html)进行yum源的配置。
#### 操作步骤
1. 配置PostgreSQL主节点。 
   1. 执行如下命令安装服务端、客户端和相关组件：
      ```
      dnf install -y postgresql postgresql-contrib postgresql-server
      ```
      
   
   2. 执行如下命令初始化数据库：
      ```
      postgresql-setup --initdb --unit postgresql
      ```
      
   
   3. 依次执行如下命令启动服务并查看服务状态：
      ```
      systemctl start postgresql
      systemctl status postgresql
      ```
      如果显示**active (running)**则表示服务启动成功。
      ![](https://support.huaweicloud.com/bestpractice-hce/public_sys-resources/note_3.0-zh-cn.png)
      如果需要将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账户创建成功   
      ![](https://support.huaweicloud.com/bestpractice-hce/zh-cn_image_0000002479928560.png "点击放大") 
   
   8. 输入以下语句查看创建的角色：
      ```
      SELECT rolname FROM pg_roles;
      ```
      如果返回结果如[图2]所示，则表示角色创建成功。
      图2角色创建成功   
      ![](https://support.huaweicloud.com/bestpractice-hce/zh-cn_image_0000002512088431.png "点击放大") 
   
   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
       ```
       图3添加信息   
       ![](https://support.huaweicloud.com/bestpractice-hce/zh-cn_image_0000002512128455.png "点击放大")
       将自己部署的从节点IPv4网段信息填入上述对应位置。
       
   
   12. 编辑"/var/lib/pgsql/data/postgresql.conf"文件，找到如下参数，进行配置：
       ```
       listen_addresses = '*'   #监听的内网 IP 地址
       max_connections = 100    #最大连接数，从库的 max_connections 必须要大于主库的
       wal_level = replica      #启用流复制模式
       hot_standby = on         #启用热备模式
       synchronous_commit = on  #开启同步提交
       max_wal_senders = 32     #同步最大的进程数量
       wal_sender_timeout = 60s #流复制主机发送数据的超时时间
       ```
       
   
   13. 最后执行以下命令重启服务：
       ```
       systemctl restart postgresql
       ```
       
   
   
   
   
2. 配置PostgreSQL从节点。 
   1. 执行以下命令在从节点安装服务端、客户端和相关组件：
      ```
      dnf install -y 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的配置信息。
      如果显示如[图4]所示，则表示备份成功。
      图4备份成功   
      ![](https://support.huaweicloud.com/bestpractice-hce/zh-cn_image_0000002480088540.png "点击放大")
      此时，会在"/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()"
      ```
      如果显示如[图5]所示，表示从节点配置成功。
      图5从节点配置成功   
      ![](https://support.huaweicloud.com/bestpractice-hce/zh-cn_image_0000002512088429.png "点击放大") 
   
   2. 在主节点执行如下命令获取从节点信息：
      ```
      sudo -u postgres psql -x -c "SELECT * FROM pg_stat_replication" -d postgres
      ```
      如果显示如[图6]所示，则表示配置成功。
      图6配置成功   
      ![](https://support.huaweicloud.com/bestpractice-hce/zh-cn_image_0000002512128453.png "点击放大") 
   
   
   
   
![](https://support.huaweicloud.com/bestpractice-hce/public_sys-resources/caution_3.0-zh-cn.png)
以上密码、权限相关配置仅用于测试，业务环境请谨慎使用。
