文章目录
- 前言
- 实现思路
- 环境准备
- 一、实现MySQL高可用
- 1.1 修改配置文件
- 1.2 MySQL监控脚本
- 1.4 重启keepalived
- 1.5 查看虚拟ip
 
- 二、高可用验证
- 2.1 模拟宕机
- 2.2 查看虚拟ip
- 2.3 连接MySQL
- 2.4 恢复主机
- 2.5 查看虚拟ip
 
- 总结
前言
请各大网友尊重本人原创知识分享,谨记本人博客:南国以南i、
提示:以下是本篇文章正文内容,下面案例可供参考
实现思路
本文根据上篇keepalived实现nginx高可用,进行扩展,对MySQL实现高可用,满足生产环境服务灾备!!!
- keepalived服务简单来说,就是用来防止单点故障的。
- 所谓的单点故障就是,主服务器挂了之后从服务器充当主服务器,原来的主服务器恢复后,当从服务器来使用,保证服务的高可用性。
也可以这样理解,老大挂了之后手下的小弟过来接班,老大复活后,当小弟使用。
 文章例子:
 实现MySQL高可用,两台机器分别搭建MySQL为后端服务实现代理,当一台mysql服务宕机后,用户无感知切换备用机器上MySQL,使其访问后端服务正常
 问题引申:
 两台机器部署MySQL,问题一:必然访问服务ip不一致、问题二:如何检测MySQL是否正常运行,多久检测依据,检测时间如何定义?
 解决方案:
 为了解决这个问题此时keepalived登场!它拥有应用活性探测机制,支持用户自定义检测脚本。重点:可将两台机器ip虚拟出绑定机器网卡的虚拟ip(vip),提供虚拟ip,供外部访问
环境准备
注意:分别在两台centos 7系统上安装keepalived 及 centos 7系统上安装MySQL
本文中的两台服务器的IP地址分别为:(192.168.248.131、192.168.248.132)
一、实现MySQL高可用
注意: 分别为:(192.168.248.131、192.168.248.132)安装keepalived!!!两台机器虚拟ip必须相同!!!
1.1 修改配置文件
#编辑配置(服务启动默认读取/etc/keepalived/keepalived.conf)
vim /etc/keepalived/keepalived.conf
主节点配置内容:192.168.248.131
! Configuration File for keepalived
global_defs {
    notification_email {	#设置报警邮件地址,需要开启本机postfix或者sendmail服务;
        xxx@alibaba-inc@qq.com
    }
    notification_email_from root@localhost.com	#用于设置邮件的发送地址,即报警邮件发送者;
    smtp_server 127.0.0.1	#用于设置邮件的SMTP Server地址;
    smtp_connect_timeout 30	#设置连接SMTP Server的超时时间;
    router_id LVS_DEVEL #LVS_DEVEL这字段在/etc/hosts文件中看;通过它访问到主机
}
vrrp_script chk_mysql {
    script /etc/keepalived/scripts/chk_mysql.sh #监控mysql脚本路径
    interval 2 #检测时间间隔
    weight -10 #如果条件成立的话,则权重 -10
}
vrrp_instance VI_1 {
    state MASTER      #主从状态(MASTER/BACKUP)
    interface ens33      #绑定虚拟 IP 的网络接口,注:ip addr查询
    virtual_router_id 52 #虚拟路由的 ID 号, 两个节点设置必须一样
    mcast_src_ip 192.168.248.131  #填写本机ip
    priority 100 #主节点优先级,主要比从节点优先级高
    #garp_master_delay 30
    advert_int 1        #每隔1s发送一次心跳
    authentication {    
        auth_type PASS
        auth_pass 1111  #校验类型:密码=1111
    }
    # 将track_script块加入 instance 配置块
    track_script {
        chk_mysql       #执行mysql监控服务
    }
    virtual_ipaddress {
      192.168.248.99  #虚拟ip(设置虚拟ip网段需要同一个,需要根据项目去调整 )
    }
}
从节点配置内容:192.168.248.132
! Configuration File for keepalived
global_defs {
    notification_email {	#设置报警邮件地址,需要开启本机postfix或者sendmail服务;
        xxx@alibaba-inc@qq.com
    }
    notification_email_from root@localhost.com	#用于设置邮件的发送地址,即报警邮件发送者;
    smtp_server 127.0.0.1	#用于设置邮件的SMTP Server地址;
    smtp_connect_timeout 30	#设置连接SMTP Server的超时时间;
    router_id LVS_DEVEL #LVS_DEVEL这字段在/etc/hosts文件中看;通过它访问到主机
}
vrrp_script chk_mysql {
    script /etc/keepalived/scripts/chk_mysql.sh #监控mysql脚本路径
    interval 2 #检测时间间隔
    weight -10 #如果条件成立的话,则权重 -10
}
vrrp_instance VI_1 {
    state BACKUP      #主从状态(MASTER/BACKUP)
    interface ens33      #绑定虚拟 IP 的网络接口,注:ip addr查询
    virtual_router_id 52 #虚拟路由的 ID 号, 两个节点设置必须一样
    mcast_src_ip 192.168.248.132  #填写本机ip
    priority 90 #主节点优先级,主要比从节点优先级高
    #garp_master_delay 30
    advert_int 1        #每隔1s发送一次心跳
    authentication {    
        auth_type PASS
        auth_pass 1111  #校验类型:密码=1111
    }
    # 将track_script块加入 instance 配置块
    track_script {
        chk_mysql       #执行mysql监控服务
    }
    virtual_ipaddress {
      192.168.248.99  #虚拟ip(设置虚拟ip网段需要同一个,需要根据项目去调整 )
    }
}
查看网卡网络接口:
 echo `ip ad|awk '/state UP/ {gsub(":", "");print $2}'`

1.2 MySQL监控脚本
注意:脚本存放路径与上述keepalived配置文件指定一致!!!
#创建
mkdir -p /etc/keepalived/scripts/
#编辑
vim /etc/keepalived/scripts/chk_mysql.sh
#添加可执行权限
chmod +x /etc/keepalived/scripts/chk_mysql.sh 
脚本内容:
#!/bin/bash
#      ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#      + 1、此脚本为mysql监控脚本,与keepalived组件配合使用    
#      + 2、keepalived配置文件:/etc/keepalived/keepalived.conf       
#      + 3、脚本输出日志/etc/keepalived/check_service.log
#      + 4、默认脚本路径在/etc/keepalived/scripts下,需要改变路径,请修改keepalived配置   	               
#      + 5、创建此脚本后请赋予可执行权限chmod +x /etc/keepalived/scripts/chk_mysql.sh      
#      ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
####################基础参数####################
#获取当前时间
DATE=`date +%Y%m%d`
#日志输出路径
logPath=/etc/keepalived
A=`netstat -tunlp | grep 3306 | wc -l`
# 判断mysql是否宕机,如果宕机了,尝试重启
echo "$(date +%Y'-'%m'-'%d' '%H':'%M':'%S) 进程数:$A" | tee -a ${logPath}/check_serviceMysql.log 
if [ $A -eq 0 ];then 
	service mysql start 
	# 等待一小会再次检查mysql,如果没有启动成功,则停止keepalived,使其启动备用机 
	sleep 6 
	if [ `netstat -tunlp | grep 3306 | wc -l` -eq 0 ];then 
		echo "$(date +%Y'-'%m'-'%d' '%H':'%M':'%S)mysql is over! stop keepalived!" | tee -a ${logPath}/check_serviceMysql.log
		service keepalived stop
		exit 1
	fi
else
	echo "$(date +%Y'-'%m'-'%d' '%H':'%M':'%S) mysql is run!" | tee -a ${logPath}/check_serviceMysql.log
	exit 0		
fi
1.4 重启keepalived
注意:重启两台机器上的keepalived,确保MySQL服务也启动
#重启服务
service keepalived restart
1.5 查看虚拟ip
注意:当主节点keepalived正常运行时,从节点不会出现虚拟ip,反之当主节点keepalived宕机后,从节点自动绑定虚拟ip
#查看ip信息
ip addr
192.168.248.131:主节点
 
 192.168.248.132:从节点
 
二、高可用验证
2.1 模拟宕机
注意:杀死192.168.248.131主机中keepalived和MySQL
#结束keepalived进程
kill -9 123855 123857 123858
 
#结束keepalived进程
service keepalived stop 
#关闭MySQL
service mysql stop 
2.2 查看虚拟ip
注意:当主节点宕机后,从节点自动绑定虚拟ip
#查看ip信息
ip addr

2.3 连接MySQL
#连接MySQL
 mysql -h 192.168.248.99 -uroot -p

2.4 恢复主机
注意:重启192.168.248.131:主节点: keepalived、MySQL服务
#重启keepalived
service keepalived restart
#启动nginx并指定配置
service mysql start 
2.5 查看虚拟ip
注意:当主节点keepalived正常运行时,虚拟ip已经归属主节点,从节点虚拟ip已经消失
#查看ip信息
ip addr
192.168.248.131:主节点
 
 192.168.248.132:从节点
 
至此keepalived 对MySQL高可用已经实现!!!
总结
我是南国以南i记录点滴每天成长一点点,学习是永无止境的!转载请附原文链接!!!



















