html 網(wǎng)站地圖北京seo顧問推推蛙
Patroni是Cybertec公司基于python語言開發(fā)的,可用于使用流復制來創(chuàng)建,管理,維護和監(jiān)視高可用性PostgreSQL集群設(shè)置的工具。
目前,Patroni+Etcd 是最為推薦的PostgreSQL數(shù)據(jù)庫高可用方案之一。
PostgreSQL有postgres_exporter監(jiān)控采集器。對于Patroni高可用工具自身的監(jiān)控,有啥子監(jiān)控方案嗎?
一起來看看 ,鮮為人知的?patroni-exporter?吧。
一、patroni-exporter 部署
環(huán)境要求:Requires python >= 3.6?
軟件包下載:https://github.com/Showmax/patroni-exporter
?patroni_export 安裝
?
1.1、安裝python系統(tǒng)包pip3.6 install prometheus_client pip3.6 install python-dateutil1.2、unzip 解壓 patroni-exporter-master.zip[root@HD-IOV-PROMETHEUS-MONITOR patroni]# ll
total 12
drwx------ 3 root root 137 Aug 1 10:39 patroni-exporter-master
-rw------- 1 root root 8566 Aug 1 10:31 patroni-exporter-master.zip1.3、 patroni-exporter服務(wù)啟動腳本# cat /etc/systemd/system/patroni_exporter.service
[Unit]
Description=patroni_exporter
After=network.target
?
[Service]
Type=simple
ExecStart=/usr/bin/python3.6 /root/dba_zc/patroni/patroni-exporter-master/patroni_exporter.py --port 51234 --patroni-url http://172.24.131.8:8008/patroni --timeout 5
TimeoutSec = 60
Restart = on-failure
RestartSec = 2
?
[Install]1.4、patroni_exporter啟動systemctl start patroni_exporter
?
二、patroni-exporter對接Prometheus
為了方便,這里采用靜態(tài)注冊:靜態(tài)的將服務(wù)的IP和抓取指標的端口號配置在Prometheus yaml文件的scrape_configs配置下。
- job_name: patroni-job
static_configs:
- targets: ['172.26.234.25:51234','172.26.234.25:51238','172.26.234.25:51239']
訪問prometheus?web,能看到各監(jiān)控export為UP即正常
三、patroni-exporter采集數(shù)據(jù)Grafana可視化
我基于patronictl version 1.6.1?下?patroni-exporter采集數(shù)據(jù),編寫了一個 Grafana?Dashboard for Patroni exporter,效果如下
四、patroni基于Alertmanager告警
?# cat patroni_rules.yml
groups:
- name: for_common
rules:
- alert: IOV-patroni_patroni_info
expr: patroni_patroni_info != 1
for: 1m
labels:
level: 3
annotations:
cur_value: '{{ $value }}'
description: '{{ $labels.instance}} of {{$labels.job}} patroni has down 1m'
?
- alert: IOV-patroni_patroni_pause
expr: patroni_patroni_pause != 0
for: 1m
labels:
level: 3
annotations:
cur_value: '{{ $value }}'
description: '{{ $labels.instance}} of {{$labels.job}} patroni 處于 pause 1m'
?
?
- alert: IOV-patroni_postgresql_timeline
expr: changes(patroni_postgresql_timeline[1m]) != 0
for: 1m
labels:
level: 3
annotations:
cur_value: '{{ $value }}'
description: '{{ $labels.instance}} of {{$labels.job}} patroni change postgresql_timeline 1m'
?
五、patroni 服務(wù)高可用性優(yōu)化
針對patroni服務(wù)非正常關(guān)閉,os systemd自動重啟拉起,保障工具的高可用性。
異常終止后自動重啟,systemd控制參數(shù)
Restart=always?、RestartSec=5、?StartLimitInterval=0
?
[root@ZL-IOV-ZNA-L2-DBORCH02 system]# cat /etc/systemd/system/patroni.service
[Unit]
Description=Runners to orchestrate a high-availability PostgreSQL
After=syslog.target network.target
[Service]
Type=simple
User=postgres
Group=postgres
#StandardOutput=syslog
ExecStartPre=-/usr/bin/sudo /sbin/modprobe softdog
ExecStartPre=-/usr/bin/sudo /bin/chown postgres /dev/watchdog
ExecStart=/usr/bin/patroni /software/patroni/patroni.yml
ExecReload=/bin/kill -s HUP $MAINPID
KillMode=process
TimeoutSec=30
Restart=always
RestartSec=5
StartLimitInterval=0
[Install]
WantedBy=multi-user.target
patroni?高可用測試??
patroni異常終止,自動重新拉起?