NODES配置

Pigsty提供了完整的主机置备与监控功能,执行 nodes.yml 剧本即可将对应节点配置为对应状态,并纳入Pigsty监控系统。

IDNameSectionTypeLevelComment
300meta_nodeNODE_IDENTITYboolC表示此节点为元节点
301nodenameNODE_IDENTITYstringI指定节点实例标识
302node_clusterNODE_IDENTITYstringC节点集群名,默认名为nodes
303nodename_overwriteNODE_IDENTITYboolC用Nodename覆盖机器HOSTNAME
304nodename_exchangeNODE_IDENTITYboolC是否在剧本节点间交换主机名
310node_etc_hostsNODE_DNSstring[]C/I同上,用于集群实例层级
311node_etc_hosts_defaultNODE_DNSstring[]C写入机器的静态DNS解析
312node_dns_methodNODE_DNSenumC如何配置DNS服务器?
313node_dns_serversNODE_DNSstring[]C配置动态DNS服务器列表
314node_dns_optionsNODE_DNSstring[]C配置/etc/resolv.conf
320node_repo_methodNODE_PACKAGEenumC节点使用Yum源的方式
321node_repo_removeNODE_PACKAGEboolC是否移除节点已有Yum源
322node_repo_local_urlsNODE_PACKAGEurl[]C本地源的URL地址
331node_packagesNODE_PACKAGEstring[]C节点额外安装的软件列表
330node_packages_defaultNODE_PACKAGEstring[]C节点安装软件列表
332node_packages_metaNODE_PACKAGEstring[]G元节点所需的软件列表
333node_packages_meta_pipNODE_PACKAGEstringG元节点上通过pip3安装的软件包
340node_disable_firewallNODE_TUNEboolC关闭节点防火墙
341node_disable_selinuxNODE_TUNEboolC关闭节点SELINUX
342node_disable_numaNODE_TUNEboolC关闭节点NUMA
343node_disable_swapNODE_TUNEboolC关闭节点SWAP
344node_static_networkNODE_TUNEboolC是否使用静态DNS服务器
345node_disk_prefetchNODE_TUNEboolC是否启用磁盘预读
346node_kernel_modulesNODE_TUNEstring[]C启用的内核模块
347node_tuneNODE_TUNEenumC节点调优模式
348node_sysctl_paramsNODE_TUNEdictC操作系统内核参数
350node_data_dirNODE_ADMINpathG节点的数据盘挂载路径
351node_admin_enabledNODE_ADMINboolG是否创建管理员用户
352node_admin_uidNODE_ADMINintG管理员用户UID
353node_admin_usernameNODE_ADMINstringG管理员用户名
354node_admin_ssh_exchangeNODE_ADMINboolC在实例间交换管理员SSH密钥
355node_admin_pk_currentNODE_ADMINboolA是否将当前用户的公钥加入管理员账户
356node_admin_pk_listNODE_ADMINkey[]C可登陆管理员的公钥列表
360node_timezoneNODE_TIMEstringCNTP时区设置
361node_ntp_enabledNODE_TIMEboolC是否配置NTP服务?
362node_ntp_serviceNODE_TIMEenumCNTP服务类型:ntp或chrony
363node_ntp_serversNODE_TIMEstring[]CNTP服务器列表
364node_crontab_overwriteNODE_TIMEboolC/I是否覆盖/etc/crontab
365node_crontabNODE_TIMEstring[]C/I主机定时任务列表
370docker_enabledDOCKERboolCdockerd是否启用?
371docker_cgroups_driverDOCKERintCdocker cgroup驱动
372docker_registry_mirrorsDOCKERstringCdocker镜像仓库地址
373docker_image_cacheDOCKERstringCdocker镜像缓存包地址
380node_exporter_enabledNODE_EXPORTERboolC启用节点指标收集器
381node_exporter_portNODE_EXPORTERintC节点指标暴露端口
382node_exporter_optionsNODE_EXPORTERstringC/I节点指标采集选项
390promtail_enabledPROMTAILboolC是否启用Promtail日志收集服务
391promtail_cleanPROMTAILboolC/A是否在安装promtail时移除已有状态信息
392promtail_portPROMTAILintGpromtail使用的默认端口
393promtail_optionsPROMTAILstringC/Ipromtail命令行参数
394promtail_positionsPROMTAILstringCpromtail状态文件位置

NODE_IDENTITY

节点身份参数

meta_node

表示此节点为元节点, 类型:bool,层级:C,默认值为:false

在配置清单中,meta分组下的节点默认带有此标记。带有此标记的节点会在节点软件包安装时进行额外的配置: 安装node_packages_meta指定的RPM软件包,并安装node_packages_meta_pip指定的Python软件包。

nodename

指定节点名, 类型:string,层级:I,默认值为空。

该选项可为节点显式指定名称,只在节点实例层次定义才有意义。使用默认空值或空字符串意味着不为节点指定名称,直接使用现有的 Hostname 作为节点名。

节点名nodename将在Pigsty监控系统中,用作节点实例的名称(ins标签)。此外,如果 nodename_overwrite 为真,节点名还会用作HOSTNAME。

备注:若启用pg_hostname 选项,则Pigsty会在初始化节点时,借用当前节点上一一对应PG实例的身份参数,如pg-test-1,作为节点名。

node_cluster

节点集群名,类型:string,层级:C,默认值为:"nodes"

该选项可为节点显式指定一个集群名称,通常在节点集群层次定义才有意义。使用默认空值将直接使用固定值nodes作为节点集群标识。

节点集群名node_cluster将在Pigsty监控系统中,用作节点集群的标签(cls)。

备注:若启用pg_hostname 选项,则Pigsty会在初始化节点时,借用当前节点上一一对应PG集群的身份参数,如pg-test,作为节点集群名。

nodename_overwrite

是否用节点名覆盖机器HOSTNAME, 类型:bool,层级:C,默认值为:true

布尔类型,默认为真,为真时,非空的节点名 nodename 将覆盖节点的当前主机名称。

如果 nodename 参数未定义,为空或为空字符串,则不会对主机名进行修改。

nodename_exchange

是否在剧本节点间交换主机名, 类型:bool,层级:C,默认值为:false

启用此参数时,同一组执行 nodes.yml 剧本的节点之间,会相互交换节点名称,写入/etc/hosts中。


NODE_DNS

Pigsty会为节点配置静态DNS解析记录与动态DNS服务器。

如果您的节点供应商已经为您配置了DNS服务器,您可以将 node_dns_method 设置为 none 跳过DNS设置。

node_etc_hosts

写入节点的静态DNS解析, 类型:string[],层级:C/I,默认值为空数组 []

node_etc_hosts 是一个数组,每一个元素都是形如ip domain_name的字符串,代表一条DNS解析记录,每一条记录都会在机器节点初始化时写入/etc/hosts中。

如果用户希望在全局配置基础设施地址,则可以使用 node_etc_hosts_default 参数,使用本参数添加集群/实例特定的静态DNS记录。

node_etc_hosts_default

默认写入所有节点的静态DNS记录, 类型:string[],层级:G,,默认值为Pigsty管理节点的域名解析记录:

  1. node_etc_hosts_default: # static dns records in /etc/hosts
  2. - 10.10.10.10 meta pigsty c.pigsty g.pigsty l.pigsty p.pigsty a.pigsty cli.pigsty lab.pigsty api.pigsty

您应当确保向/etc/hosts中写入10.10.10.10 pigsty yum.pigsty这样的DNS记录,确保在DNS Nameserver启动之前便可以采用域名的方式访问本地yum源。

如果用户希望为单个集群与实例配置特定的静态DNS解析,则可以使用 node_etc_hosts 参数。

node_dns_method

如何配置DNS服务器?, 类型:enum,层级:C,默认值为:"add"

机器节点默认的动态DNS服务器的配置方式,有三种模式:

  • add:将 node_dns_servers 中的记录追加至/etc/resolv.conf,并保留已有DNS服务器。(默认)
  • overwrite:使用将 node_dns_servers 中的记录覆盖/etc/resolv.conf
  • none:跳过DNS服务器配置,如果您的环境中已经配置有DNS服务器,则可以跳过。

node_dns_servers

配置动态DNS服务器列表, 类型:string[],层级:C,默认值为 10.10.10.10

Pigsty默认会添加元节点作为DNS Server,元节点上的DNSMASQ会响应环境中的DNS请求。

  1. node_dns_servers: # dynamic nameserver in /etc/resolv.conf
  2. - 10.10.10.10

node_dns_options

如果 node_dns_method 配置为addoverwrite,则本配置项中的记录会被追加或覆盖至/etc/resolv.conf中。具体格式请参考Linux文档关于/etc/resolv.conf的说明

Pigsty默认添加的解析选项为:

  1. - options single-request-reopen timeout:1 rotate
  2. - domain service.consul

NODE_PACKAGE

Pigsty会为纳入管理的节点配置Yum源,并安装软件包。

node_repo_method

节点使用Yum源的方式, 类型:enum,层级:C,默认值为:"local"

机器节点Yum软件源的配置方式,有三种模式:

  • local:使用元节点上的本地Yum源,默认行为,推荐使用此方式。
  • public:直接使用互联网源安装,将repo_upstream中的公共repo写入/etc/yum.repos.d/
  • none:不对本地源进行配置与修改。

node_repo_remove

是否移除节点已有Yum源, 类型:bool,层级:C,默认值为:true

如何处理节点上原有YUM源?如果启用,则Pigsty会移除 节点上/etc/yum.repos.d中原有的配置文件,并备份至/etc/yum.repos.d/backup

node_repo_local_urls

本地源的URL地址, 类型:url[],层级:C,默认值为:

如果 node_repo_method 配置为local,则这里列出的Repo文件URL会被下载至/etc/yum.repos.d

这里是一个Repo File URL 构成的数组,Pigsty默认会将元节点上的本地Yum源加入机器的源配置中。

  1. node_repo_local_urls:
  2. - http://yum.pigsty/pigsty.repo

node_packages

节点安装的软件列表, 类型:string[],层级:C,默认值为空列表:[]

通过yum安装的额外软件包列表,每个数组元素为软件包名称,您可以在每一个元素中都指定一个逗号分隔的软件列表,软件包会依次安装。

默认在全局所有节点上安装的软件包通过参数 node_packages_default 进行配置,本参数可用于配置集群/节点特定的软件包。

node_packages_defaultnode_packages 类似,前者通常是全局统一配置,而 node_packages 则是针对具体节点进行例外处理。 例如,您可以为运行PG的节点安装额外的工具包。该变量通常在集群级别进行覆盖定义。

node_packages_default

节点安装软件列表, 类型:string[],层级:C,默认值为:

  1. node_packages_meta: # packages for meta nodes only
  2. - grafana,prometheus2,alertmanager,loki,nginx_exporter,blackbox_exporter,pushgateway,redis,postgresql14
  3. - nginx,ansible,pgbadger,python-psycopg2,dnsmasq,polysh,coreutils,diffutils

软件包列表为数组,但每个元素可以包含由逗号分隔的多个软件包,Pigsty默认安装的软件包列表如下:

node_packages_meta

元节点所需的软件列表, 类型:string[],层级:G,默认值为:

  1. node_packages_meta: # packages for meta nodes only
  2. - grafana,prometheus2,alertmanager,loki,nginx_exporter,blackbox_exporter,pushgateway,redis,postgresql14
  3. - nginx,ansible,pgbadger,python-psycopg2,dnsmasq,polysh,coreutils,diffutils

node_packages_default类似,但node_packages_meta中列出的软件包只会在元节点上安装,通常在元节点上使用的基础设施软件需要在此指定

node_packages_meta_pip

元节点上通过pip3安装的软件包, 类型:string,层级:G,默认值为:"jupyterlab"

软件包会下载至{{ nginx_home }}/{{ repo_name }}/python目录后统一安装。

目前默认会安装jupyterlab,提供完整的Python运行时环境。


NODE_TUNE

主机节点特性、内核模块与调优模板

node_disable_firewall

关闭节点防火墙, 类型:bool,层级:C,默认值为:true,请保持关闭。

node_disable_selinux

关闭节点SELINUX, 类型:bool,层级:C,默认值为:true,请保持关闭。

node_disable_numa

关闭节点NUMA, 类型:bool,层级:C,默认值为:false

布尔标记,是否关闭NUMA,默认不关闭。注意,关闭NUMA需要重启机器后方可生效!

如果您不清楚如何绑核,在生产环境使用数据库时建议关闭NUMA。

node_disable_swap

关闭节点SWAP, 类型:bool,层级:C,默认值为:false

通常情况下不建议关闭SWAP,如果您有足够的内存,且数据库采用独占式部署,则可以关闭SWAP提高性能。

当您的节点用于部署Kubernetes时,应当禁用SWAP。

node_static_network

是否使用静态DNS服务器, 类型:bool,层级:C,默认值为:true,默认启用。

启用静态网络,意味着您的DNS Resolv配置不会因为机器重启与网卡变动被覆盖。建议启用。

node_disk_prefetch

是否启用磁盘预读, 类型:bool,层级:C,默认值为:false,默认不启用。

针对HDD部署的实例可以优化吞吐量,使用HDD时建议启用。

node_kernel_modules

启用的内核模块, 类型:string[],层级:C,默认值为:

由内核模块名称组成的数组,声明了需要在节点上安装的内核模块,Pigsty默认会启用以下内核模块:

  1. node_kernel_modules: [ softdog, ip_vs, ip_vs_rr, ip_vs_rr, ip_vs_wrr, ip_vs_sh ]

node_tune

节点调优模式, 类型:enum,层级:C,默认值为:"tiny"

针对机器进行调优的预制方案,基于tuned服务。有四种预制模式:

  • tiny:微型虚拟机
  • oltp:常规OLTP模板,优化延迟
  • olap:常规OLAP模板,优化吞吐量
  • crit:核心金融业务模板,优化脏页数量

通常,数据库的调优模板 pg_conf应当与机器调优模板配套,详情请参考定制PGSQL模版

node_sysctl_params

操作系统内核参数, 类型:dict,层级:C,默认值为空字典。字典KV结构,Key为内核sysctl参数名,Value为参数值。


NODE_ADMIN

主机节点管理用户

node_data_dir

节点的数据盘挂载路径, 类型:path,层级:C,默认值为:/data

如果指定,则该路径将作为节点的主数据库盘,如果该目录不存在,则该目录会被创建并抛出提示信息。

默认情况下,该目录属主为root,模式为0777

node_admin_enabled

是否创建管理员用户, 类型:bool,层级:G,默认值为:true

是否在每个节点上创建管理员用户(免密sudo与ssh),默认会创建名为dba (uid=88)的管理用户,可以从元节点上通过SSH免密访问环境中的其他节点并执行免密sudo。

node_admin_uid

管理员用户UID, 类型:int,层级:G,默认值为:88,手工分配时请注意UID命名空间冲突。

node_admin_username

管理员用户名, 类型:string,层级:G,默认值为:"dba"

node_admin_ssh_exchange

在实例间交换节点管理员SSH密钥, 类型:bool,层级:C,默认值为:true

启用时,Pigsty会在执行剧本时,在成员间交换SSH公钥,允许管理员 node_admin_username 从不同节点上相互访问。

node_admin_pk_current

是否将当前节点&用户的公钥加入管理员账户, 类型:bool,层级:A,默认值为:true

启用时,将当前节点上,当前用户的SSH公钥(~/.ssh/id_rsa.pub)会被拷贝至目标节点管理员用户的authorized_keys中。

生产环境部署时,请务必注意此参数,此参数会将当前执行命令用户的默认公钥安装至所有机器的管理用户上。

node_admin_pk_list

可登陆管理员的公钥列表, 类型:key[],层级:C,默认值为空数组,Demo中有vagrant用户默认的公钥。

数组,每一个元素为字符串,内容为写入到管理员用户~/.ssh/authorized_keys中的密钥,持有对应私钥的用户可以以管理员身份登录。

生产环境部署时,请务必注意此参数,仅将信任的密钥加入此列表中。


NODE_TIME

节点时区与时间同步。

如果您的节点已经配置有NTP服务器,则可以配置 node_ntp_enabledfalse,跳过NTP服务的设置。

node_timezone

NTP时区设置, 类型:string,层级:C,默认值为空。

在Demo中,默认使用的时区为"Asia/Hong_Kong",请根据您的实际情况调整。(请不要使用Asia/Shanghai时区,该时区缩写 CST 会导致一系列日志时区解析问题)

如果选择 false,或者留空,则Pigsty不会修改该节点的时区配置。

node_ntp_enabled

是否配置NTP服务?, 类型:bool,层级:C,默认值为:true

为真时,Pigsty会覆盖节点的/etc/ntp.conf/etc/chrony.conf,填入 node_ntp_servers 指定的NTP服务器。

如果您的服务器节点已经配置好有NTP服务器,则建议关闭,使用原有NTP服务器。

node_ntp_service

NTP服务类型:ntpchrony, 类型:enum,层级:C,默认值为:"ntp"

指明系统使用的NTP服务类型,默认使用 ntp 作为时间服务:

  • ntp:传统NTP服务
  • chrony:CentOS 7/8默认使用的时间服务

只有当 node_ntp_enabled 为真时生效。

node_ntp_servers

NTP服务器列表, 类型:string[],层级:C,默认值为:

  1. - pool cn.pool.ntp.org iburst
  2. - pool pool.ntp.org iburst
  3. - pool time.pool.aliyun.com iburst
  4. - server 10.10.10.10 iburst

只有当 node_ntp_enabled 为真时生效。

node_crontab_overwrite

是否覆盖节点的Crontab, 类型:bool,层级:C/I,默认值为true

如果启用,node_crontab 中的记录会整体覆盖 /etc/crontab 而不是追加写入。

node_crontab

节点定时任务列表, 类型:string[],层级:C/I,默认值为空数组[]

在此列表的每的一个元素都是一条记录,写入 /etc/crontab中,例如:

  1. 00 01 * * * postgres /pg/bin/pg-backup 2>>/pg/log/backup.log

DOCKER

Pigsty默认在所有元节点上启用Docker,而普通节点不启用。

docker_enabled

是否在当前节点启用Docker?类型:bool,层级:C,默认值为false,但元节点默认为true

docker_cgroups_driver

Docker使用的CGroup驱动,类型:string,层级:C,默认为systemd

docker_registry_mirrors

Docker使用的镜像仓库地址,类型:string[],层级:C,默认为空,即直接使用 DockerHub。

docker_image_cache

本地的Docker镜像离线缓存包,类型:path,层级:C,默认为:/www/pigsty/docker.tar.lz4

如果存在时,配置Docker时会自动加载至本地Docker中。


NODE_EXPORTER

NodeExporter用于从主机上收集监控指标数据。

node_exporter_enabled

启用节点指标收集器, 类型:bool,层级:C,默认值为:true

node_exporter_port

节点指标暴露端口, 类型:int,层级:C,默认值为:9100

node_exporter_options

节点指标采集选项, 类型:string,层级:C/I,默认值为:"--no-collector.softnet --no-collector.nvme --collector.ntp --collector.tcpstat --collector.processes"

Pigsty默认会启用ntp, tcpstat, processes 三个额外的指标收集器,禁用 softnet, nvme 两个默认的指标收集器。


PROMTAIL

主机日志收集组件,与Loki基础设施配置配套使用。

promtail_enabled

是否启用Promtail日志收集服务, 类型:bool,层级:C,默认值为:true

布尔类型,是否在当前节点启用Promtail日志收集服务?默认启用。

启用 promtail 后,Pigsty会根据配置清单中的定义,生成Promtail的配置文件,抓取下列日志并发送至由loki_endpoint指定的Loki实例。

  • INFRA:基础设施日志,只在元节点上收集

    • nginx-access: /var/log/nginx/access.log
    • nginx-error: /var/log/nginx/error.log
    • grafana: /var/log/grafana/grafana.log
  • NODES: 主机节点日志,在所有节点上收集。

    • syslog: /var/log/messages
    • dmesg: /var/log/dmesg
    • cron: /var/log/cron
  • PGSQL: PostgreSQL日志,当节点定义有pg_cluster时收集。

    • postgres: /pg/data/log/*.csv
    • patroni: /pg/log/patroni.log
    • pgbouncer: /var/log/pgbouncer/pgbouncer.log
  • REDIS: Redis日志,当节点定义有redis_cluster时收集。

    • redis: /var/log/redis/*.log

promtail_clean

是否在安装promtail时移除已有状态信息, 类型:bool,层级:C/A,默认值为:false

默认不会清理,当您选择清理时,Pigsty会在部署Promtail时移除现有状态文件 promtail_positions,这意味着Promtail会重新收集当前节点上的所有日志并发送至Loki。

promtail_port

promtail使用的默认端口, 类型:int,层级:G,默认值为:9080

promtail_options

promtail命令行参数, 类型:string,层级:C/I,默认值为:"-config.file=/etc/promtail.yml -config.expand-env=true"

运行promtail二进制程序时传入的额外命令行参数,默认值为'-config.file=/etc/promtail.yml -config.expand-env=true'

已有参数用于指定配置文件路径,并在配置文件中展开环境变量,不建议修改。

promtail_positions

promtail状态文件路径, 类型:string,层级:C,默认值为:"/var/log/positions.yaml"

Promtail记录了所有日志的消费偏移量,定期写入promtail_positions 指定的文件中。

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