線上採用DRBD+Heartbeat+MySQL的方式部署MySQL高可用架構,因此對DRBD的監控也很重要。api
一 監控原理bash
1.使用drbd-overview
服務器
$ drbd-overview 0:??not-found?? Connected Primary/Secondary UpToDate/UpToDate C r----- /database ext4 50G 3.7G 44G 8%
若是不是root權限,將不會看到resource 名稱。網絡
$ sudo drbd-overview 0:r0 Connected Primary/Secondary UpToDate/UpToDate C r----- /database ext4 50G 3.7G 44G 8%
2.查看/proc/drbd架構
$ cat /proc/drbd version: 8.3.16 (api:88/proto:86-97) GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43 0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r----- ns:1200291012 nr:7644 dw:1200298728 dr:1575405 al:19036 bm:13 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0
C 這個位置表示同步協議是協議C , 能夠是B 或 Aapp
I/O 狀態標誌,共有6個標誌位,表示關於這個資源的I/O操做狀態信息
less
r-----ide
1.I/O suspension 。要麼是r表示正在運行,要麼是s表示暫停ui
2.Serial resynchronization。一般狀況下是-spa
3.Peer-initiated sync suspension. 一般狀況下是-
4.Peer-initiated sync suspension. 一般狀況下是-
5.Locally blocked I/O。一般狀況下是-
6.Activity Log update suspension. 一般狀況下是-
cs Connetction State 顯示定義resource的鏈接狀態
能夠有如下幾種鏈接狀態:
StandAlone
Disconnecting
Unconnected
BrokenPipe
NetworkFailure
Connected 正常狀態
等等
ds disk states 顯示磁盤狀態
先顯示本地磁盤狀態,而後再顯示遠程主機磁盤狀態,它們均可能是如下幾種狀態:
Diskless
Attaching
Failed
Negotiating
Inconsistent
Outdated
DUnknown
Consistent
UpToDate 這個狀態表示數據同步一致,是正常狀態
ro 資源角色類型
Primary 可讀可寫
Secondary 不可讀不可寫
Unknown 這個狀態只發生在遠端主機
ns network send 發送的數據量,以KBytes表示
nr network received 接收的數據量,以KBytes表示
dw disk write 寫入到本地磁盤的數據量,以KBytes表示
dr disk read 從本地讀取的數據量,以KBytes表示
al activity log DRBD元數據中活動日誌位置更新次數
bm bitmap DRBD元數據中bitmap位置更新次數
lo local count 本地I/O子系統有關DRBD的請求數量
pe pending 已經發送到對端可是尚未獲得響應的請求數量
ua unacknowledged 對端經過網絡接收到的請求數量,可是它們尚未被答覆
ap application pending Number of block I/O requests forwarded to DRBD, but not yet answered by DRBD.
ep
(epochs). Number of epoch objects. Usually 1. Might increase under I/O load when using either the barrier
or the none
write ordering method.
wo
(write order). Currently used write ordering method: b
(barrier),f
(flush), d
(drain) or n
(none).
oos
(out of sync). Amount of storage currently out of sync; in Kibibytes.
3.使用service drbd status查看
$ sudo service drbd status drbd driver loaded OK; device status: version: 8.3.16 (api:88/proto:86-97) GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43 m:res cs ro ds p mounted fstype 0:r0 Connected Primary/Secondary UpToDate/UpToDate C /database ext4
二 監控腳本編寫
通常狀況下,在生產服務器上只需定義一個resource,便於維護。因此,這裏討論只有一個DRBD resource的監控方法,若是有多個resource能夠經過Zabbix的自動發現功能。
drbd_status.sh
#!/bin/bash #gather drbd status via /proc/drbd #$ cat /proc/drbd #version: 8.3.16 (api:88/proto:86-97) #GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43 # 0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r----- # ns:1202588332 nr:7644 dw:1202596048 dr:1575405 al:19216 bm:13 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0 #assume only one resource defined,default is r0 status_file=/proc/drbd metric=$1 case $metric in version) cat $status_file|grep "version"|awk '{print $2}' ;; name) cat $status_file|grep "cs"|awk '{print $1}'|tr -d ":" ;; cs) cat $status_file|grep "cs"|awk '{print $2}'|awk -F":" '{print $2}' ;; ro) cat $status_file|grep -v "version"|grep "ro"|awk '{print $3}'|awk -F":" '{print $2}' ;; ds) cat $status_file|grep -v "version"|grep "ds"|awk '{print $4}'|awk -F":" '{print $2}' ;; protocol) cat $status_file|grep -v "version"|grep "cs"|awk '{print $5}' ;; ns) cat $status_file|grep "ns"|awk '{print $1}'|awk -F":" '{print $2}' ;; nr) cat $status_file|grep "nr"|awk '{print $2}'|awk -F":" '{print $2}' ;; dw) cat $status_file|grep "dw"|awk '{print $3}'|awk -F":" '{print $2}' ;; dr) cat $status_file|grep "dr"|awk '{print $4}'|awk -F":" '{print $2}' ;; al) cat $status_file|grep "al"|awk '{print $5}'|awk -F":" '{print $2}' ;; bm) cat $status_file|grep "bm"|awk '{print $6}'|awk -F":" '{print $2}' ;; lo) cat $status_file|grep "lo"|awk '{print $7}'|awk -F":" '{print $2}' ;; pe) cat $status_file|grep "pe"|awk '{print $8}'|awk -F":" '{print $2}' ;; ua) cat $status_file|grep "ua"|awk '{print $9}'|awk -F":" '{print $2}' ;; ap) cat $status_file|grep -v "version"|grep "ap"|awk '{print $10}'|awk -F":" '{print $2}' ;; ep) cat $status_file|grep "ep"|awk '{print $11}'|awk -F":" '{print $2}' ;; wo) cat $status_file|grep "wo"|awk '{print $12}'|awk -F":" '{print $2}' ;; oos) cat $status_file|grep "oos"|awk '{print $13}'|awk -F":" '{print $2}' ;; *) echo "unknown parameters" esac
添加zabbix子配置文件drbd_status.conf
UserParameter=drbd.status[*],/usr/local/zabbix/bin/drbd_status.sh $1
三 添加監控模板
這裏注意一下觸發表達式
{Template DRBD:drbd.status[ro].str(Secondary/Primary)}#1 & {Template DRBD:drbd.status[ro].str(Primary/Secondary)}#1
參考文章: