PGSQL Primary 主库部署

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

单机部署

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

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

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

    pg-test:
      hosts:
        10.10.10.11: { pg_seq: 1, pg_role: primary }
      vars:
        pg_cluster: pg-test

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

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

添加用户

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

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

    pg-test:
      hosts:
        10.10.10.11: { pg_seq: 1, pg_role: primary }
      vars:
        pg_cluster: pg-test

        pg_users:                      # 定义集群层面的业务用户,数组,每个元素为一个用户定义
          - name: test                 # 用户名为 test,唯一的必选字段
            password: test             # 密码也是 test
            pgbouncer: true            # 为该用户启用 Pgbouncer 连接池
            roles: [ dbrole_admin ]    # 该用户为 管理员, 可以执行DDL

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

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

添加数据库

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

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

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

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

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

psql postgres://test:test@10.10.10.11/test
pgbench -is10  postgres://test:test@10.10.10.11:5432/test

注意事项

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

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


最后修改 2022-05-18