利用LVS+Keepalived实现MySQL高可用
来源:互联网 发布:淘宝助理上传图片 编辑:程序博客网 时间:2024/06/05 07:44
利用LVS+Keepalived实现MySQL高可用
MySQL架构
MySQL服务器组成,平时只有主库提供服务,备库不提供服务。当主库停止服务时,服务自动切换到备库。主备库通过双向复制,保证数据一致性。主备库以MySQL对外服务接口的Keepalived来实现心跳检查和动态漂移。因此Keepalived部署在同一台服务器上,每台realserver即自身机器的LVS源码安装- ln -s /usr/src/kernels/2.6.32-279.14.1.el6.x86_64/ /usr/src/linux
- tar zxvf ipvsadm-1.24.tar.gz
- cd ipvsadm-1.24
- make && make install
Keepalived源码安装
安装依赖包
yum -y install popt-devel
安装IP配置如下库
IP
服务VIP
主
10.0.0.77
10.0.0.76
备
10.0.0.78
Keepalived配置文件/etc/keepalived/keepalived.conf,主库为例
点击(此处)折叠或打开
- global_defs {
- router_id LVS_1
- }
- vrrp_sync_group test {
- group {
- mysql_ha
- }
- }
- vrrp_instance mysql_ha {
- state BACKUP ## 主备库都是BACKUP,防止主库重启后,抢夺VIP资源
- interface eth0 ## HA地址网卡
- virtual_router_id 61
- priority 150 ## 优先级,主库比备库高
- nopreempt ## 非抢夺,在主库上配置,表示不抢夺VIP
- advert_int 1 ## 主备心跳检查间隔
- authentication {
- auth_type PASS
- auth_pass 1111
- }
- virtual_ipaddress { ## VIP,主备库一样
- 10.0.0.76
- }
- ## 以下脚本是Keepalived改变状态时触发的动作,分别是变为backup、master、fault状态
- ## 这是个简单的报警脚本而已
- notify_backup "/usr/local/keepalived_script/keepalived_notify.sh BACKUP"
- notify_master "/usr/local/keepalived_script/keepalived_notify.sh MASTER"
- notify_fault "/usr/local/keepalived_script/keepalived_notify.sh FAULT"
- notify "/usr/local/keepalived_script/keepalived_notify.sh "
- }
- virtual_server 10.0.0.76 3306 {
- delay_loop 2
- lb_algo rr
- lb_kind DR
- persistence_timeout 20
- protocol TCP
- real_server 10.0.0.77 3306 { ## keepalived的realserver,主备库都取自身的mysql服务
- weight 3
- notify_down "/usr/local/keepalived_script/keepalived_notify.sh MYSQL_DOWN" ## 检测到realserver服务不可用时的动作
- TCP_CHECK {
- connect_timeout 3
- nb_get_retry 3
- delay_before_retry 3
- connect_port 3306
- }
- }
- }
测试
测试效果
从以下4个方面测试HA效果
keepalived down
mysqld down
网络故障
机器宕机
测试步骤和结果
keepalived down
步骤:kill master上的keepalived进程
结果:
>>slave的keepalived通知切换为master
mysqld down
步骤:kill master上的mysqld进程,或者提高master服务器的负载
结果:
>>master的keepalived通知因为mysqld down而停止keepalived
>>slave的keepalived通知切换为master
网络故障
步骤:master上ifconfig eth0 down,或者service network restart
结果:
>>master的keepalived通知变为fault状态
>>slave的keepalived通知切换为master
机器宕机
步骤:master机器重启
结果:
>>slave的keepalived通知切换为master
问题分析
1,keepalived切换为master时,arping失败
有的环境测试,keepalived切换为master时,没有成功发送arping,导致VIP不同。所以给出了arping脚本
2,重启网卡,master变为fault状态,但没继续变为backup状态。
检查日志发现有错误信息
Keepalived_vrrp: Netlink: filter function error
Keepalived_healthcheckers: Netlink: filter function error
查找网络资料得知,keepalive不支持网络设备热插拔。ip link可以看出设备id变化了。
此时需要reload keepalived或者直接restart。
办法:网卡发生重启后,需检查keepalived是否正常
3,keepalived异常终止,VIP没有解除绑定,导致及时重启keepalived后,这个VIP也不能正常绑定和解除绑定
猜测原因是异常终止keepalived后,VIP没解除绑定,重启以后keepalived不识别未解除绑定的VIP。
办法:机器发生重启后需检查keepalived是否正常
4,ipvsadm使用yum安装,keepalived使用源码安装,keepalived不能启动healthchecker进程
keepalived安装时指定kernel目录:./configure --prefix=/usr/local/keepalived --with-kernel-dir=/usr/src/kernels/2.6.18-308.1.1.el5-x86_64
5,关于virtual_router_id
virtual_router_id用来标识一对keepalived主从机的身份,不同keepalived对的这个id不能一样。取值范围1~255。如果不同组keepalived配置了同一个id,则会有如下报错:
Apr 7 14:31:11 localhost Keepalived_vrrp[22980]: ip address associated with VRID not present in received packet : 10.0.0.94
Apr 7 14:31:11 localhostKeepalived_vrrp[22980]: one or more VIP associated with VRID mismatch actual MASTER advert
Apr 7 14:31:11 localhost Keepalived_vrrp[22980]: bogus VRRP packet received on eth0.181 !!!
Apr 7 14:31:11 localhost Keepalived_vrrp[22980]: VRRP_Instance(mysql_ha) ignoring received advertisment...
6,端口转发
real_server配置的端口必须一样?
- 利用LVS+Keepalived实现MySQL高可用
- 利用LVS+Keepalived实现MySQL高可用
- 利用LVS+Keepalived实现MySQL高可用1
- 利用LVS+Keepalived 实现高性能高可用负载均衡
- 利用LVS+Keepalived 实现高性能高可用负载均衡
- 利用lvs+keepalived构建高可用MySQL-HA
- keepalived+lvs实现lvs的高可用
- MHA+Lvs+Keepalived实现MySQL的高可用及读负载均衡_4(Lvs+Keepalived)
- keepalived+LVS+MySql Cluster 高可用配置
- LVS + Keepalived 实现高可用负载均衡
- LVS+Keepalived实现高可用集群
- LVS+Keepalived实现高可用集群
- LVS+Keepalived实现高可用集群
- LVS+Keepalived实现高可用集群
- LVS+Keepalived实现高可用集群
- LVS+Keepalived实现高可用集群
- LVS + Keepalived 实现高可用负载集群
- LVS+Keepalived实现高可用群集
- pj demo by tuzkiss
- FireBreath 生成Visual Studio 工程
- poj 1315 Don't Get Rooked
- 如何查询Oracle性能监控
- openGL粒子系统实现(面向对象风格)
- 利用LVS+Keepalived实现MySQL高可用
- 博客首记
- Unity3D Script脚本编辑器属性
- VS2005、VS2008、VS2010、VS2012解决方案和工程项目文件转换方法
- iOS学习之iOS沙盒(sandbox)机制和文件操作(一)
- 利用LVS+Keepalived实现MySQL高可用1
- 10 个最好的JavaScript和HTML5幻灯片演示框架。
- org.apache.http.conn.HttpHostConnectException: Connection to http://192.168.1.100:8080 refused
- 面向对象第十课,继承,super构造器的调用,继承的内存分析(重要)