PGSQL Primary 主库部署

本文介绍PostgreSQL单例主库的部署方式,以及如何在主库是那个部署


单机部署

让我们以沙箱环境为例,假设您已经在沙箱元节点(10.10.10.10)使用 infra.yml 完成完整安装。

现在从最简单的案例开始,我们希望在 node-1 (10.10.10.11) 上部署一个单机数据库集群 pg-test

首先,编辑配置清单,添加pg-test集群的配置:

  1. pg-test:
  2. hosts:
  3. 10.10.10.11: { pg_seq: 1, pg_role: primary }
  4. vars:
  5. pg_cluster: pg-test

使用以下命令,在 10.10.10.11 节点上创建一个单主的数据库实例。

  1. bin/createpg pg-test # 创建 pg-test 集群
  2. bin/createpg 10.10.10.11 # 另一种等效写法,因为集群只有该实例

添加用户

Pigsty会在数据库中默认创建四个系统用户与四类默认角色,但业务使用数据库时,应当使用专用的业务用户

在新创建的实例上添加新的业务用户,首先在集群层面定义 pg_users,添加一个新的业务用户定义。

  1. pg-test:
  2. hosts:
  3. 10.10.10.11: { pg_seq: 1, pg_role: primary }
  4. vars:
  5. pg_cluster: pg-test
  6. pg_users: # 定义集群层面的业务用户,数组,每个元素为一个用户定义
  7. - name: test # 用户名为 test,唯一的必选字段
  8. password: test # 密码也是 test
  9. pgbouncer: true # 为该用户启用 Pgbouncer 连接池
  10. roles: [ dbrole_admin ] # 该用户为 管理员, 可以执行DDL

如果初始化实例/集群时,pg_users 中的用户已经定义,那么该用户将在集群初始化完毕后自动创建,否则您需要使用以下命令在 pg-test 集群中创建该业务用户

  1. bin/createuser pg-test test # 在 pg-test 集群上创建 test 用户

添加数据库

接下来,我们在这个实例上添加新的业务数据库,首先在集群层面定义 pg_databases,添加一个新的业务数据库定义。

  1. pg-test:
  2. hosts:
  3. 10.10.10.11: { pg_seq: 1, pg_role: primary }
  4. vars:
  5. pg_cluster: pg-test
  6. pg_users: [ { name: test , password: test , pgbouncer: true , roles: [ dbrole_admin ] } ]
  7. pg_databases: # 在集群层面定义业务数据库,数组,每一个元素为一个数据库
  8. - name: test # 数据库有很多可选参数,但只有一个数据库名是必选项

如果初始化实例/集群时,pg_databases 中的数据库已经定义,那么该数据库将在集群初始化完毕后自动创建,否则您需要使用以下命令在 pg-test 集群中创建该业务数据库

  1. bin/createdb pg-test test # 在 pg-test 集群上创建 test 数据库

创建完数据库后,您便可以使用连接串,使用该业务数据库访问该业务数据库:

  1. psql postgres://test:test@10.10.10.11/test
  2. pgbench -is10 postgres://test:test@10.10.10.11:5432/test

注意事项

单实例数据库无法应对硬件故障,如果该节点挂了或者磁盘损坏了,您的数据就歇菜了。

为了避免此类问题,强烈建议在生产使用时,最少为集群配置一个副本从库

最后修改 2022-06-05: add pgsql/deploy document (34a3325)