身份管理
所有的实例都具有身份(Identity),身份信息是与实例关联的元数据,用于标识实例。
是任何集群与实例都必须定义的唯一标识符。
为系统中的对象命名后,还需要将 身份信息 关联至具体的实例上。
身份信息属于业务赋予的元数据,数据库实例本身不会意识到这些身份信息,它不知道自己为谁而服务,从属于哪个业务,或者自己是集群中的几号实例。
身份赋予可以有多种形式,最朴素的身份关联方式就是运维人员的记忆:DBA在脑海中记住了IP地址为10.2.3.4
上的数据库实例,是用于支付的实例,而另一台上的数据库实例则用于用户管理。更好的管理方式是通过配置文件,或者采用服务发现的方式来管理集群成员的身份。
Pigsty同时提供这两种身份管理的方式:基于的服务发现,与基于配置文件的服务发现
参数 控制这一行为:
consul
:基于Consul进行服务发现,默认配置static
:基于本地配置文件进行服务发现
Pigsty建议使用consul
服务发现,当服务器发生Failover时,监控系统会自动更正目标实例所注册的身份。
Pigsty默认采用 Consul服务发现的方式管理环境中的服务。
用户亦可通过Consul提供的DNS与服务发现机制,实现基于DNS的自动流量切换。
Consul采用了Client/Server架构,整个环境中存在1~5个不等的Consul Server,用于实际的元数据存储。所有节点上都部署有Consul Agent,代理本机服务与Consul Server的通信。Pigsty默认通过本地Consul配置文件的方式注册服务。
在每个节点上,都运行有 consul agent。服务通过JSON配置文件的方式,由consul agent注册至DCS中。
JSON配置文件的默认位置是/etc/consul.d/
,采用的命名规则,以postgres
为例:
其中meta
与tags
部分是服务的元数据,存储有实例的身份信息。
用户可以通过Consul提供的DNS服务,或者直接调用Consul API发现注册到Consul中的服务
使用DNS API查阅consul服务的方式,请参阅。
Prometheus会自动通过consul_sd_configs
发现环境中的监控对象。同时带有pg
和exporter
标签的服务会自动被识别为抓取对象:
有时候,因为数据库主从发生切换,导致注册的角色与数据库实例的实际角色出现偏差。这时候需要通过反熵过程处理这种异常。
基于Patroni的故障切换可以正常地通过回调逻辑修正注册的角色,但人工完成的角色切换则需要人工介入处理。
使用以下脚本可以自动检测并修复数据库的服务注册。建议在数据库实例上配置Crontab,或在元节点上设置定期巡检任务。
static
服务发现依赖/etc/prometheus/targets/*.yml
中的配置进行服务发现。采用这种方式的优势是不依赖Consul。
当Pigsty监控系统与外部管控方案集成时,这种模式对原系统的侵入性较小。但是缺点是,当集群内发生主从切换时,用户需要自行维护实例角色信息。手动维护时,可以根据以下命令从配置文件生成Prometheus所需的监控对象配置文件并载入生效。
详见 。
Pigsty默认生成的静态监控对象文件示例如下:
无论是通过Consul服务发现,还是静态文件服务发现。最终的效果是实现身份信息与实例监控指标相互关联。
这一关联,是通过 的维度标签实现的。
身份参数 | 维度标签 | 取值样例 |
---|---|---|
pg_cluster | pg-test | |
pg_instance | ins | pg-test-1 |
pg_services | svc | pg-test-primary |
pg_role | role | primary |
node_ip | 10.10.10.11 |