LDAPクラスターの監視
LDAP クラスターはデュアルマスター モードとマスター/スレーブ モードをサポートしており、現在はマスター/スレーブ モードを使用しています。
モニタリング指標:
- マスタースレーブサービスの存続
- マスタ・スレーブ同期監視
モニタリングのアイデア
- zabbix はスクリプトまたはサービスのステータス、マスター/スレーブのステータスを監視します
- LDAP の動作ステータスを取得するための prometheus オープン ソース エクスポート [サードパーティのクライアント ソフトウェア、多くの監視項目があるが、十分に合理化されていない]
モニタリングの実現
監視スクリプトを使用して主従LDAPサービスの生存情報と主従同期の監視情報をzabbixに渡し、主従サービスの生存と同期監視を実現します。
参考: https://github.com/MrCirca/OpenLDAP-Cluster-Zabbix
サービス生存監視の実装
原理
ldap のサービスポートはポート 389 で、通常業務では ldap コマンドを使用してマスターホストとスレーブホストにリモートアクセスでき、アクセスが正常であればサービスは正常と判断されます。
## slave实例上面访问
ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -s base -b "$BASE_DN" contextCSN 2> /dev/null
echo $?
##若slave实例异常,则返回非0
## slave实例访问master的接口
ldapsearch -Q -LLL -x -H ldap://"$PROVIDER_URI" -Y EXTERNAL -H ldapi:/// -s base -b "$BASE_DN" contextCSN 2> /dev/null
echo $?
##若master实例异常,则返回非0
マスタ・スレーブ同期監視の実現
原理
LDAPはマスタ・スレーブ・レプリケーション後のcontextCSN値となり、この値は更新されるたびに再計算されます。マスタ・インスタンスとスレーブ・インスタンスの値が同じ場合、マスタ・スレーブ同期が完了したと判断されます。は普通
# 获取slave实例的contextCSN值
[root@hn-nameserver02-2-205 ~]# ldapsearch -LLL -x -s base -b "dc=local,dc=cn" contextCSN
dn: dc=local,dc=cn
contextCSN: 20190514075500.340075Z#000000#000#000000
# 获取master实例的contextCSN值
[root@hn-nameserver02-2-205 ~]# ldapsearch -LLL -x -H ldap://172.16.2.204 -s base -b "dc=local,dc=cn" contextCSN
dn: dc=local,dc=cn
contextCSN: 20190514075500.340075Z#000000#000#000000
contextCSN: 20190514075500.340075Z#000000#000#000000
監視スクリプト情報:
ステータスチェックスクリプト
[root@hn-nameserver02-2-205 ~]# cat /etc/zabbix/external_scripts/ldap_check_status.sh
#!/bin/bash
BASE_DN=$(ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b cn=config 2> /dev/null | grep "olcSuffix:" | cut -d " " -f 2)
PROVIDER_URI=$1
LDAP_CSN_CONSUMER_COMMAND=$(ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -s base -b "$BASE_DN" contextCSN 2> /dev/null)
LDAP_CSN_CONSUMER_RC=$?
LDAP_CSN_PROVIDER_COMMAND=$(ldapsearch -LLL -x -H ldap://"$PROVIDER_URI" -s base -b "$BASE_DN" contextCSN 2> /dev/null)
LDAP_CSN_PROVIDER_RC=$?
PROVIDER_CSN=$(echo -e $LDAP_CSN_PROVIDER_COMMAND | grep contextCSN | cut -d " " -f 2)
CONSUMER_CSN=$(echo -e $LDAP_CSN_CONSUMER_COMMAND | grep contextCSN | cut -d " " -f 2)
if [[ "$LDAP_CSN_CONSUMER_RC" != "0" ]] && [[ "$LDAP_CSN_PROVIDER_RC" == "0" ]]; then
echo "1"
elif [[ "$LDAP_CSN_PROVIDER_RC" != "0" ]] && [[ "$LDAP_CSN_CONSUMER_RC" == "0" ]]; then
echo "2"
elif [[ "$LDAP_CSN_PROVIDER_RC" != "0" ]] && [[ "$LDAP_CSN_CONSUMER_RC" != "0" ]]; then
echo "3"
elif [[ "$PROVIDER_CSN" == "$CONSUMER_CSN" ]]; then
echo "4"
else
echo "100"
fi
zabbix カスタム監視項目
[root@hn-nameserver02-2-205 ~]# tail -n1 /etc/zabbix/zabbix_agentd.conf
UserParameter=ldap.clusterstatus[*],/etc/zabbix/external_scripts/ldap_check_status.sh $1
監視指示
- スレーブノードで監視を実行し、監視項目にマスターの監視IPを実行します
- ステータス検出スクリプトが 1 を返した場合、スレーブ インスタンスが利用できないことを意味します
- ステータス検出スクリプトが 2 を返した場合、マスター インスタンスが使用できないことを意味します
- ステータス検出スクリプトが 3 を返した場合、マスターとスレーブが同期していないことを意味します。
PS: zabbix テンプレートをインポートし、マスター インスタンスの値を変更することをお勧めします。