此文凝聚笔者不少心血请尊重笔者劳动,转载请注明出处。
http://freeze.blog.51cto.com/
关于F5:
众所周知F5是强大的负载均衡神器,可以实现负载均衡,会话保持,SSL卸载,健康状态检测等,关于F5就不过多介绍,想熟悉的可以去张宴博客看一些中文版的介绍,如果有使用到F5对后端数据库做负载均衡,则需要对数据库池进行状态检测检查,从而数据库实现高可用。F5负载均衡器可以针对后端mysql数据库实现读写分离或者负载均衡。本文着重介绍F5在对mysql数据库进行负载均衡时,进行登录式的健康状态检测。
主要应用是在其状态发生改变时,实现服务的迁移。
关于环境:
笔者F5的的型号为BIG IP 6400
系统版本如下图
BIG-IP 9.4.8
一、首先要创建F5的健康状态检测脚本。
默认的脚本不带对mysql登录式的状态检测脚本,需自己创建。(oracle的有)
1.1通过SSH,登录F5系统
1.2 创建mysql的状态检测脚本,支持shell脚本
cd /usr/bin/monitors/ #记住这个目录,是健康状态可执行程序目录
创建脚本 vi mysqld_check
#!/bin/bash member_ip=$(echo "$1" | sed 's/::ffff://') member_port="${2:-3306}" #定义检测mysql的端口 mysql_user="${3:-check}" #定义登录检测的帐号 mysql_password="${4:-check123}" #定义登录检测的密码 timeout="${5:-3}" pidfile="/var/run/$MON_TMPL_NAME.$member_ip.$member_port.pid" [ -f "$pidfile" ] && kill -9 $(cat $pidfile) >/dev/null 2>&1 rm -f "$pidfile" ; echo "$$" > "$pidfile" tmpfile="/var/run/$MON_TMPL_NAME.$member_ip.$member_port.tmp" rm -f "$tmpfile" /usr/bin/mysql -e "show tables" -u "$mysql_user" -P $member_port -h $member_ip --password="$mysql_password" --database=mysql --connect_timeout=$timeout 2>"$tmpfile" | grep -q event #F5自带有mysql的客户端,该行主要是用自带客户端执行非交互式的show tables命令,然后抓取event的表,如果抓取到,返回为0,则判断可以登录数据库。数据库状态正常。 if [ $? -eq 0 ];then echo "up" rm -f "$pidfile" rm -f "$tmpfile" exit 0 else # Log the reason for the failure logger -p local0.notice "$MON_TMPL_NAME($member_ip:$member_port) MySQL Healthcheck Failed: $(cat "$tmpfile")" # Echo to stderr for command-line testing echo "down" >&2 # cat "$tmpfile" >&2 rm -f "$pidfile" rm -f "$tmpfile" exit 1 fi
保存退出,记得给脚本加可执行权限。
chmod +x mysqld_check
二、在F5管理页面创建监控命令,并添加使用。
进到F5的管理界面,创建一个新的监控命令。入下图。
点开create,有很多的模板,选额外我们定义的模板,然后定义
把我们刚才定义的命令加进来,并且定义参数。
之后就需要把脚本启动到数据库的pool就行了。
然后查看池的成员,绿色表示通过健康状态检测正常的服务器,当其中某一台通过状态检测判断是down的话,F5会自动剔除其成员,从而实现高可用。
整个F5实现mysql的登录式状态检测优点是可以判断数据库的假死状态,通常大多数判断mysql的状态都是去探测3306端口,如果出现mysql的读写卡死,用户无法登录,端口还存在的话,可能会影响业务。所以登录是的判断是最精确和可靠的。
对linux,运维感兴趣的童鞋环境加Linux交流群:170838394
linux运维培训 http://www.magedu.com
转载于:https://blog.51cto.com/freeze/860091