Centos7 LDAP集群之 集群监控

LDAP 集群监控

LDAP 的集群支持双主 和 主从的模式,目前我们使用的是主从的模式。

监控指标:

  • 主从服务存活
  • 主从同步监控

监控思路

  • zabbix 监控脚本或者服务状态,主从状态
  • prometheus 开源 export 获取ldap的工作状态 【第三方客户端软件,监控项目多,但不够精简】

监控的实现

使用监控脚本将主从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 值,每次更新都会重新计算这个值,当master实例和slave实例的值相同时,则判断主从同步正常

# 获取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

监控说明

  1. 在slave节点执行监控,监控项里面执行master的监控ip
  2. 当状态检测脚本返回1,则说明slave实例不可用
  3. 当状态检测脚本返回2,则说明master实例不可用
  4. 当状态检测脚本返回3,则说明主从不同步

PS : 建议导入zabbix模板,修改master实例的值

猜你喜欢

转载自blog.csdn.net/weixin_43423965/article/details/105215684
今日推荐