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-06-05: add pgsql/deploy document (34a3325)