NODES剧本

使用 NODES 系列剧本将更多节点纳入Pigsty管理,将节点调整至配置描述的状态。

当您使用 infra.yml 在元节点上完成Pigsty的完整安装后,您可以进一步使用 nodes.yml 将更多节点添加至Pigsty中,或者使用 nodes-remove.yml 将节点从环境中移除。

剧本功能链接
nodes节点置备,将节点纳入Pigsty管理,可用于后续数据库部署src
nodes-remove节点移除,卸载节点DCS与监控,不再纳入Pigsty管理src

nodes

nodes.yml 剧本将更多节点添加至Pigsty中。该剧本需要在 元节点 上发起,针对目标节点执行。

此剧本可以将目标机器节点调整至配置清单所描述的状态,安装Consul服务,并将其纳入Pigsty监控系统,并允许您在这些置备好的节点上进一步部署不同类型的数据库集群。

nodes.yml 剧本的行为由 节点配置 决定。在使用本地源的情况下,完整执行此剧本可能耗时1~3分钟,视机器配置而异。

  1. ./nodes.yml # 初始化所有清单中的节点(危险!)
  2. ./nodes.yml -l pg-test # 初始化在 pg-test 分组下的机器(推荐!)
  3. ./nodes.yml -l pg-meta,pg-test # 同时初始化pg-meta与pg-test两个集群中的节点
  4. ./nodes.yml -l 10.10.10.11 # 初始化10.10.10.11这台机器节点

剧本 - 图1

此剧本包含的功能与任务如下:

  • 生成节点身份参数
  • 初始化节点
    • 配置节点名称
    • 配置节点静态DNS解析
    • 配置节点动态DNS解析服务器
    • 配置节点的Yum源
    • 安装指定的RPM软件包
    • 配置 numa/swap/firewall等特性
    • 配置节点tuned调优模板
    • 配置节点的快捷命令与环境变量
    • 创建节点管理员并配置SSH
    • 配置节点时区
    • 配置节点NTP服务
  • 在节点上初始化DCS服务:Consul 与 ETCD
    • 抹除现有Consul
    • 初始化当前节点的 Consul Agent或Server 服务
  • 初始化节点监控组件并纳入Pigsty
    • 在节点上安装 Node Exporter
    • 将 Node Exporter 注册至元节点上的 Prometheus 中。

对于已有数据库运行的节点执行该剧本需要谨慎,使用不当存在误触发短暂数据库不可用的风险,因为初始化节点会抹除DCS Agent

节点置备会配置节点的DCS服务(Consul Agent),因此在对运行有PostgreSQL数据库的节点运行此剧本时,请小心! dcs_clean 参数提供了避免误删的选项作为保险,允许以在初始化过程中,当检测到已有运行中DCS时自动中止或跳过高危操作,避免最坏情况发生。

尽管如此,在使用完整的nodes.yml剧本或其中关于dcs|consul的部分时,请再三检查--tags|-t--limit|-l 参数是否正确。确保自己在正确的目标上执行正确的任务。

保护机制

Pigsty提供保护机制,避免误删运行中的Consul实例,包括了两个相关参数:

  • dcs_safeguard:默认关闭,只要打开,在任意情况下该数据库实例不会被清理。
  • dcs_clean:默认关闭,当打开时,初始化节点/nodes.yml 会抹除掉现有Consul实例(有可能影响PG主库写入)

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

dcs_safeguard / pg_cleandcs_clean=truedcs_clean=false
dcs_safeguard=true中止执行中止执行
dcs_safeguard=false抹除实例中止执行

当遇到现存实例时, nodes-remove.yml剧本会有以下行为表现:

dcs_safeguard / pg_cleandcs_clean=truedcs_clean=false
dcs_safeguard=true中止执行中止执行
dcs_safeguard=false抹除实例抹除实例

选择性执行

用户可以通过ansible的标签机制,选择性执行本剧本的一个子集。例如,如果只想执行节点监控部署的任务,则可以通过以下命令:

  1. ./nodes.yml --tags=node-monitor

一些常用的任务子集包括:

  1. # play
  2. ./nodes.yml --tags=node-id # 打印节点身份参数:名称与集群
  3. ./nodes.yml --tags=node-init # 初始化节点,完成配置
  4. ./nodes.yml --tags=dcs-init # 在节点上初始化DCS服务:Consul
  5. ./nodes.yml --tags=node-monitor # 初始化节点监控组件并纳入Pigsty
  6. # tasks
  7. ./nodes.yml --tags=node_name # 配置节点名称
  8. ./nodes.yml --tags=node_dns # 配置节点静态DNS解析
  9. ./nodes.yml --tags=node_resolv # 配置节点动态DNS解析服务器
  10. ./nodes.yml --tags=node_repo # 配置节点的Yum源
  11. ./nodes.yml --tags=node_pkgs # 安装指定的RPM软件包
  12. ./nodes.yml --tags=node_feature # 配置 numa/swap/firewall等特性
  13. ./nodes.yml --tags=node_tuned # 配置节点tuned调优模板
  14. ./nodes.yml --tags=node_profile # 配置节点的快捷命令与环境变量
  15. ./nodes.yml --tags=node_admin # 创建节点管理员并配置SSH
  16. ./nodes.yml --tags=node_timezone # 配置节点时区
  17. ./nodes.yml --tags=node_ntp # 配置节点NTP服务
  18. ./nodes.yml --tags=consul # 在节点上配置consul agent/server
  19. ./nodes.yml --tags=consul -e dcs_clean=clean # 在节点上强制抹除重新配置consul
  20. ./nodes.yml --tags=node_exporter # 在节点上配置 node_exporter 并注册
  21. ./nodes.yml --tags=node_deregister # 将节点监控从元节点上取消注册
  22. ./nodes.yml --tags=node_register # 将节点监控注册到元节点上

创建管理用户

管理用户是一个先有鸡还是先有蛋的问题。为了执行Ansible剧本,需要有一个管理用户。为了创建一个专用的管理用户,需要执行此Ansible剧本。

Pigsty推荐将管理用户的创建,权限配置与密钥分发放在虚拟机的Provisioning阶段完成,作为机器资源交付内容的一部分。对于生产环境来说,机器交付时应当已经配置有这样一个具有免密远程SSH登陆并执行免密sudo的用户。通常绝大多数云平台和运维体系都可以做到这一点。

如果您只能使用ssh密码和sudo密码,那么必须在所有剧本执行时添加额外的参数 --ask-pass|-k--ask-become-pass|-K,并在提示出现时输入ssh密码与sudo密码。您可以使用 nodes.yml 中创建管理员用户的功能,使用当前用户创建一个专用管理员用户,以下参数用于创建默认的管理员用户:

  1. ./nodes.yml -t node_admin -l <目标机器> --ask-pass --ask-become-pass

默认创建的管理员用户为 dba(uid=88),请不要使用 postgres{{ dbsu }} 作为管理用户,请尽量避免直接使用 root 作为管理用户。

在沙箱环境中的默认用户 vagrant 默认已经配置有免密登陆和免密sudo,您可以从宿主机或沙箱元节点使用vagrant登陆所有的数据库节点。

例如:

  1. ./nodes.yml --limit <target_hosts> --tags node_admin -e ansible_user=<another_admin> --ask-pass --ask-become-pass

详情请参考:准备:管理用户置备


nodes-remove

nodes-remove.yml 剧本是 nodes剧本的反向操作,用于将节点从Pigsty中移除。

该剧本需要在 元节点 上发起,针对目标节点执行。

  1. ./nodes.yml # 移除所有节点(危险!)
  2. ./nodes.yml -l nodes-test # 移除 nodes-test 分组下的机器
  3. ./nodes.yml -l 10.10.10.11 # 移除 10.10.10.11这台机器节点
  4. ./nodes.yml -l 10.10.10.10 -e rm_dcs_servers=true # 如果节点为DCS Server,需要额外参数移除。

剧本 - 图2

任务子集

  1. # play
  2. ./nodes-remove.yml --tags=register # 移除节点注册信息
  3. ./nodes-remove.yml --tags=node-exporter # 移除节点指标收集器
  4. ./nodes-remove.yml --tags=promtail # 移除Promtail日志收集组件
  5. ./nodes-remove.yml --tags=consul # 移除Consul Agent服务
  6. ./nodes-remove.yml --tags=consul -e rm_dcs_servers=true # 移除Consul服务(包括Server!)

最后修改 2022-05-27: init commit (1e3e284)