PGSQL剧本
pgsql
完成了基础设施初始化后,用户可以 完成数据库集群的初始化。
首先在 Pigsty配置文件 中完成数据库集群的定义,然后通过执行pgsql.yml
将变更应用至实际环境中。
本剧本主要完成以下工作:
- 安装、部署、初始化PostgreSQL, Pgbouncer, Patroni(
postgres
) - 安装PostgreSQL监控系统(
monitor
) - 将数据库实例注册至基础设施,接受监管(
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:默认关闭,只要打开,在任意情况下该数据库实例不会被清理。
- :默认关闭,当打开时,初始化PostgreSQL/pgsql.yml 会抹除掉现有实例(危险)
当遇到现存实例时, 剧本会有以下行为表现:
用户可以通过ansible的标签机制,可以选择执行剧本的一个子集。
举个例子,如果只想执行服务初始化的部分,则可以通过以下命令进行
./pgsql.yml --tags=service # 刷新集群的服务定义
常用的命令子集如下:
# 基础设施初始化
./pgsql.yml --tags=infra # 完成基础设施的初始化,包括机器节点初始化与DCS部署
# 数据库初始化
./pgsql.yml --tags=pgsql # 完成数据库部署:数据库、监控、服务
./pgsql.yml --tags=postgres # 完成数据库部署
./pgsql.yml --tags=monitor # 完成监控的部署
./pgsql.yml --tags=register # 将服务注册至基础设施
日常管理任务
日常管理也可以使用来修改数据库集群的状态,常用的命令子集如下:
数据库下线:可以移除现有的数据库集群或实例,回收节点:
pgsql-remove.yml
是pgsql.yml的反向操作,会依次完成
- 将数据库实例从基础设施取消注册(
register
) - 停止负载均衡器,服务组件(
service
) - 移除监控系统组件(
monitor
) - 移除Pgbouncer,Patroni,Postgres(
postgres
) - 移除数据库目录(
rm_pgdata: true
) - 移除软件包(
rm_pkgs: true
)
该剧本有两个命令行选项,可用于移除数据库目录与软件包(默认下线不会移除数据与安装包)
rm_pgdata: false # remove postgres data? false by default
rm_pgpkgs: false # uninstall pg_packages? false by default
./pgsql-remove.yml -l pg-test # 下线 pg-test 集群
./pgsql-remove.yml -l 10.10.10.13 # 下线实例 10.10.10.13 (实际上是pg-test.pg-test-3)
./pgsql-remove.yml -l 10.10.10.13 -e rm_pgdata=true # 下线,一并移除数据目录(可能较慢)
./pgsql-remove.yml -l 10.10.10.13 -e rm_pkgs=true # 下线,一并移除安装的PG相关软件包
pgsql-createdb
:可以在现有集群中创建新的数据库或修改现有数据库:pgsql-createdb.yml
强烈建议通过剧本或包装脚本与工具在已有集群中创建新数据库,这样可以确保:
- 配置文件清单与实际情况保持一致
- Pgbouncer连接池与数据库保持一致
- Grafana中所注册的数据源与实际情况保持一致。
日常管理
可以使用包装脚本简化命令:
bin/createdb <pg_cluster> <dbname>
:可以在现有集群中创建新的用户或修改现有用户:pgsql-createuser.yml
业务用户的创建请参考 用户 一节
./pgsql-createuser.yml -l pg-test -e pg_user=test
可以使用包装脚本简化命令:
请注意,pg_user
指定的用户,必须已经存在于集群pg_users
的定义中,否则会报错。这意味着用户必须先定义,再创建。
pgsql-monly
用于执行仅监控部署的专用剧本,详情请参考:仅监控部署
用于部署MatrixDB的专用剧本,详情请参考:部署MatrixDB集群
pgsql-migration
用于数据库自动化迁移的剧本,目前仍处于Beta状态,详情请参考:数据库集群迁移