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-taskWait for patroni replica online任务继续执行后续步骤。详情请参考SOP

    保护机制

    pgsql.yml提供保护机制,避免误删运行中的PostgreSQL数据库,包括了两个相关参数:

    • pg_safeguard:默认关闭,只要打开,在任意情况下该数据库实例不会被清理。
    • :默认关闭,当打开时,初始化PostgreSQL/pgsql.yml 会抹除掉现有实例(危险)

    当遇到现存实例时, 剧本会有以下行为表现:

    用户可以通过ansible的标签机制,可以选择执行剧本的一个子集。

    举个例子,如果只想执行服务初始化的部分,则可以通过以下命令进行

    1. ./pgsql.yml --tags=service # 刷新集群的服务定义

    常用的命令子集如下:

    1. # 基础设施初始化
    2. ./pgsql.yml --tags=infra # 完成基础设施的初始化,包括机器节点初始化与DCS部署
    3. # 数据库初始化
    4. ./pgsql.yml --tags=pgsql # 完成数据库部署:数据库、监控、服务
    5. ./pgsql.yml --tags=postgres # 完成数据库部署
    6. ./pgsql.yml --tags=monitor # 完成监控的部署
    7. ./pgsql.yml --tags=register # 将服务注册至基础设施

    日常管理任务

    日常管理也可以使用来修改数据库集群的状态,常用的命令子集如下:


    数据库下线:可以移除现有的数据库集群或实例,回收节点:

    pgsql-remove.ymlpgsql.yml的反向操作,会依次完成

    • 将数据库实例从基础设施取消注册(register
    • 停止负载均衡器,服务组件(service
    • 移除监控系统组件(monitor
    • 移除Pgbouncer,Patroni,Postgres(postgres
    • 移除数据库目录(rm_pgdata: true
    • 移除软件包(rm_pkgs: true

    该剧本有两个命令行选项,可用于移除数据库目录与软件包(默认下线不会移除数据与安装包)

    1. rm_pgdata: false # remove postgres data? false by default
    2. rm_pgpkgs: false # uninstall pg_packages? false by default

    剧本 - 图2

    1. ./pgsql-remove.yml -l pg-test # 下线 pg-test 集群
    2. ./pgsql-remove.yml -l 10.10.10.13 # 下线实例 10.10.10.13 (实际上是pg-test.pg-test-3)
    3. ./pgsql-remove.yml -l 10.10.10.13 -e rm_pgdata=true # 下线,一并移除数据目录(可能较慢)
    4. ./pgsql-remove.yml -l 10.10.10.13 -e rm_pkgs=true # 下线,一并移除安装的PG相关软件包

    pgsql-createdb

    :可以在现有集群中创建新的数据库或修改现有数据库pgsql-createdb.yml

    强烈建议通过剧本或包装脚本与工具在已有集群中创建新数据库,这样可以确保:

    • 配置文件清单与实际情况保持一致
    • Pgbouncer连接池与数据库保持一致
    • Grafana中所注册的数据源与实际情况保持一致。

    日常管理

    可以使用包装脚本简化命令:

    1. bin/createdb <pg_cluster> <dbname>

    :可以在现有集群中创建新的用户或修改现有用户pgsql-createuser.yml

    剧本 - 图4

    业务用户的创建请参考 用户 一节

    1. ./pgsql-createuser.yml -l pg-test -e pg_user=test

    可以使用包装脚本简化命令:

    请注意,pg_user 指定的用户,必须已经存在于集群pg_users的定义中,否则会报错。这意味着用户必须先定义,再创建。


    pgsql-monly

    用于执行仅监控部署的专用剧本,详情请参考:仅监控部署


    用于部署MatrixDB的专用剧本,详情请参考:部署MatrixDB集群

    剧本 - 图6


    pgsql-migration

    用于数据库自动化迁移的剧本,目前仍处于Beta状态,详情请参考:数据库集群迁移