剧本:PGSQL
使用PGSQL系列剧本,拉起定义好的高可用PostgreSQL数据库集群
剧本概览
| 剧本 | 功能 | 链接 |
|---|---|---|
pgsql |
部署PostgreSQL集群,或集群扩容 | src |
pgsql-remove |
下线PostgreSQL集群,或集群缩容 | src |
pgsql-createuser |
创建PostgreSQL业务用户 | src |
pgsql-createdb |
创建PostgreSQL业务数据库 | src |
pgsql-monly |
仅监控模式,接入现存PostgreSQL实例或RDS | src |
pgsql-migration |
生成PostgreSQL半自动数据库迁移方案(Beta) | src |
pgsql-matrixdb |
复用PG角色部署一套MatrixDB数据仓库集群(Beta) | src |
pgsql
完成了基础设施初始化后,用户可以 pgsql.yml 完成数据库集群的初始化。
首先在 Pigsty配置文件 中完成数据库集群的定义,然后通过执行pgsql.yml将变更应用至实际环境中。
本剧本主要完成以下工作:
- 安装、部署、初始化PostgreSQL, Pgbouncer, Patroni(
postgres) - 安装PostgreSQL监控系统(
monitor) - 安装部署Haproxy与VIP,对外暴露服务(
service) - 将数据库实例注册至基础设施,接受监管(
register)
该剧本使用不当存在误删数据库的风险,因为初始化数据库会抹除原有数据库的痕迹。
保险参数提供了避免误删的选项作为保险,以在初始化过程中,当检测到已有运行中实例时,允许自动中止或跳过高危操作,避免最坏情况发生。尽管如此,在使用pgsql.yml时,请再三检查--tags|-t 与 --limit|-l 参数是否正确。确保自己在正确的目标上执行正确的任务。使用不带参数的pgsql.yml在生产环境中是一个高危操作,务必三思而后行。
注意事项
-
强烈建议在执行时添加
-l参数,限制命令执行的对象范围。 -
单独针对某一集群从库执行初始化时,用户必须自行确保主库已经完成初始化
-
集群扩容时,如果
Patroni拉起从库的时间过长,Ansible剧本可能会因为超时而中止。(但制作从库的进程会继续,例如制作从库需超过1天的场景)。 -
您可以在从库自动制作完毕后,通过Ansible的
--start-at-task从Wait for patroni replica online任务继续执行后续步骤。详情请参考SOP。
保护机制
pgsql.yml提供保护机制,避免误删运行中的PostgreSQL数据库,包括了两个相关参数:
pg_safeguard:默认关闭,只要打开,在任意情况下该数据库实例不会被清理。pg_clean:角色兜底值为false,但 v1.5.1 随附的沙箱清单设置为true;受保护环境应关闭并启用保护参数。
当遇到现存实例时,pgsql.yml 剧本会有以下行为表现:
pg_safeguard / pg_clean |
pg_clean=true |
pg_clean=false |
|---|---|---|
pg_safeguard=true |
中止执行 | 中止执行 |
pg_safeguard=false |
抹除实例 | 中止执行 |
当遇到现存实例时, pgsql-remove.yml 剧本会有以下行为表现:
pg_safeguard / pg_clean |
pg_clean=true |
pg_clean=false |
|---|---|---|
pg_safeguard=true |
中止执行 | 中止执行 |
pg_safeguard=false |
抹除实例 | 抹除实例 |
选择性执行
用户可以通过ansible的标签机制,可以选择执行剧本的一个子集。
举个例子,如果只想执行服务初始化的部分,则可以通过以下命令进行
常用的命令子集如下:
日常管理任务
日常管理也可以使用./pgsql.yml来修改数据库集群的状态,常用的命令子集如下:
pgsql-remove
数据库下线:可以移除现有的数据库集群或实例,回收节点:pgsql-remove.yml
pgsql-remove.yml是pgsql.yml的反向操作,会依次完成
- 将数据库实例从基础设施取消注册(
register) - 停止负载均衡器,服务组件(
service) - 移除监控系统组件(
monitor) - 移除Pgbouncer,Patroni,Postgres(
postgres) - 移除数据库目录(
rm_pgdata: true) - 移除软件包(
rm_pgpkgs: true)
该剧本有两个命令行选项,可用于移除数据库目录与软件包(默认下线不会移除数据与安装包)
日常管理
pgsql-createdb
创建业务数据库:可以在现有集群中创建新的数据库或修改现有数据库:pgsql-createdb.yml
强烈建议通过剧本或包装脚本与工具在已有集群中创建新数据库,这样可以确保:
- 配置文件清单与实际情况保持一致
- Pgbouncer连接池与数据库保持一致
- Grafana中所注册的数据源与实际情况保持一致。
日常管理
数据库的创建请参考 数据库 一节。
可以使用包装脚本简化命令:
pgsql-createuser
创建业务用户:可以在现有集群中创建新的用户或修改现有用户:pgsql-createuser.yml
日常管理
业务用户的创建请参考 用户 一节
可以使用包装脚本简化命令:
请注意,pg_user 指定的用户,必须已经存在于集群pg_users的定义中,否则会报错。这意味着用户必须先定义,再创建。
pgsql-monly
用于执行仅监控部署的专用剧本,详情请参考:仅监控部署
pgsql-matrixdb
用于部署MatrixDB的专用剧本,详情请参考:部署MatrixDB集群
pgsql-migration
用于数据库自动化迁移的剧本,目前仍处于Beta状态,详情请参考:数据库集群迁移