文档 v2.7.0 版本已不再积极维护,你当前浏览的是一份归档快照。 最新文档请参阅 最新版本。
剧本
PostgreSQL 剧本
Pigsty提供了一系列剧本,用于集群上下线扩缩容,用户/数据库管理,监控或迁移已有实例。
pgsql.yml:初始化PostgreSQL集群或添加新的从库。pgsql-rm.yml:移除PostgreSQL集群,或移除某个实例pgsql-user.yml:在现有的PostgreSQL集群中添加新的业务用户pgsql-db.yml:在现有的PostgreSQL集群中添加新的业务数据库pgsql-monitor.yml:将远程postgres实例纳入监控中pgsql-migration.yml:为现有的PostgreSQL集群生成迁移手册和脚本
保护机制
使用 PGSQL 剧本时需要特别注意,剧本 pgsql.yml 与 pgsql-rm.yml 使用不当会有误删数据库的风险!
- 在使用
pgsql.yml时,请再三检查--tags|-t与--limit|-l参数是否正确。 - 强烈建议在执行时添加
-l参数,限制命令执行的对象范围,并确保自己在正确的目标上执行正确的任务。 - 限制范围通常以一个数据库集群为宜,使用不带参数的
pgsql.yml在生产环境中是一个高危操作,务必三思而后行。
出于防止误删的目的,Pigsty 的 PGSQL 模块提供了防误删保险,由以下两个参数控制:
pg_safeguard默认为false,不打开。pg_clean默认为true,默认清理已有实例。
对初始化剧本的影响
当 pgsql.yml 剧本执行中遭遇配置相同的运行中现存实例时,会有以下行为表现:
pg_safeguard / pg_clean |
pg_clean=true |
pg_clean=false |
|---|---|---|
pg_safeguard=false |
抹除实例 | 中止执行 |
pg_safeguard=true |
中止执行 | 中止执行 |
- 如果
pg_safeguard启用,那么该剧本会中止执行,避免误删。 - 如果没有启用,那么会进一步根据
pg_clean的取值,来决定是否移除现有的实例。- 如果
pg_clean为true,该剧本会直接清理现有实例,为新实例腾出空间。这是默认行为。 - 如果
pg_clean为false,该剧本会中止执行,这需要显式配置。
- 如果
对下线剧本的影响
当 pgsql-rm.yml 剧本执行中遭遇配置相同的运行中现存实例时,会有以下行为表现:
pg_safeguard / pg_clean |
pg_clean=true |
pg_clean=false |
|---|---|---|
pg_safeguard=false |
抹除实例与数据 | 抹除实例 |
pg_safeguard=true |
中止执行 | 中止执行 |
- 如果
pg_safeguard启用,那么该剧本会中止执行,避免误删。 - 如果没有启用,那么会继续抹除实例,同时
pg_clean在本剧本中会被解释为:是否移除数据目录。- 如果
pg_clean为true,该剧本会直接一并清理 PostgreSQL 数据目录,即所谓“删库”,这是默认行为。 - 如果
pg_clean为false,该剧本保留数据目录,继续完成其他清理工作,这需要显式配置。
- 如果
pgsql.yml
剧本 pgsql.yml 用于初始化PostgreSQL集群或添加新的从库。
下面是使用此剧本初始化沙箱环境中 PostgreSQL 集群的过程:
本剧本包含以下子任务:
以下管理任务使用到了此剧本
一些关于本剧本的注意事项
单独针对某一集群从库执行此剧本时,用户应当确保 集群主库已经完成初始化!
集群扩容时,如果Patroni拉起从库的时间过长,Ansible剧本可能会因为超时而中止。
- 典型错误信息为:
wait for postgres/patroni replica任务执行很长时间后中止 - 但制作从库的进程会继续,例如制作从库需超过1天的场景,后续处理请参考 FAQ:制作从库失败。
pgsql-rm.yml
剧本 pgsql-rm.yml 用于移除PostgreSQL集群,或移除某个实例。
下面是使用此剧本移除沙箱环境中 PostgreSQL 集群的过程:
本剧本包含以下子任务:
本剧本可以使用一些命令行参数影响其行为:
以下管理任务使用到了此剧本
一些关于本剧本的注意事项
请不要直接对还有从库的集群主库单独直接执行此剧本
- 否则抹除主库后,其余从库会自动触发高可用自动故障切换。
- 总是先下线所有从库后,再下线主库,当一次性下线整个集群时不需要操心此问题。
实例下线后请刷新集群服务
- 当您从集群中下线掉某一个从库实例时,它仍然存留于在负载均衡器的配置文件中。
- 因为任何健康检查都无法通过,所以下线后的实例不会对集群产生影响。
- 但您应当在恰当的时间点 重载服务,确保生产环境与配置清单的一致性。
pgsql-user.yml
剧本 pgsql-user.yml 用于在现有的PostgreSQL集群中添加新的业务用户
详情请参考:管理SOP:创建用户
pgsql-db.yml
剧本 pgsql-db.yml 用于在现有的PostgreSQL集群中添加新的业务数据库
详情请参考:管理SOP:创建数据库
pgsql-monitor.yml
剧本 pgsql-monitor.yml 用于将远程postgres实例纳入监控中
详情请参考:管理SOP:监控现有PG
pgsql-migration.yml
剧本 pgsql-migration.yml 用于为现有的PostgreSQL集群生成迁移手册和脚本
详情请参考:管理SOP:迁移数据库集群