码迷,mamicode.com
首页 > 数据库 > 详细

keepalived+Mysql主从配置实验

时间:2015-12-14 16:42:52      阅读:289      评论:0      收藏:0      [点我收藏+]

标签:

 

keepalived是一个类似于layer3, 4 & 7交换机制的软件,也就是我们平时说的第3层、第4层和第7层交换。
简介:
Keepalived的作用是检测web服务器的状态,如果有一台web服务器死机,或工作出现故障,Keepalived将检测到,并将有故障的web服务器从系统中剔除,当web服务器工作正常后Keepalived自动将web服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的web服务器。
工作原理:
 
Layer3,4&7工作在IP/TCP协议栈的IP层,TCP层,及应用层,原理分别如下:
Layer3:Keepalived使用Layer3的方式工作式时,Keepalived会定期向服务器群中的服务器发送一个ICMP的数据包(既我们平时用的Ping程序),如果发现某台服务的IP地址没有激活,Keepalived便报告这台服务器失效,并将它从服务器群中剔除,这种情况的典型例子是某台服务器被非法关机。Layer3的方式是以服务器的IP地址是否有效作为服务器工作正常与否的标准。
Layer4:如果您理解了Layer3的方式,Layer4就容易了。Layer4主要以TCP端口的状态来决定服务器工作正常与否。如web server的服务端口一般是80,如果Keepalived检测到80端口没有启动,则Keepalived将把这台服务器从服务器群中剔除。
 
Layer7:Layer7就是工作在具体的应用层了,比Layer3,Layer4要复杂一点,在网络上占用的带宽也要大一些。Keepalived将根据用户的设定检查服务器程序的运行是否正常,如果与用户的设定不相符,则Keepalived将把服务器从服务器群中剔除。
作用:
主要用作RealServer的健康状态检查以及LoadBalance主机和BackUP主机之间failover的实现。
高可用web架构: LVS+keepalived+nginx+apache+php+eaccelerator(+nfs可选 可不选)
 
Apache+Discuz论坛+keepalived+Mysql主从高可用实验:
技术分享
 
环境:
三台centos6.7系统;23.116配置Apache+discuz论坛系统;23.114为mysql master,keepalived1.2.19;23.113为mysql slave,keepalived1.2.19;网站、数据库主从配置此处略过。

安装keepalived  楼主使用keepalived1.2.19

#基础环境

yum -y install gcc gcc-c++ pcre-devel zlib-devel openssl-devel popt popt-devel

#内核开发包keepalived要用,一定要安装
yum –y install kernel-devel kernel 

tar –zxvf keep***

cd keep***
./configure --with-kernel-dir=/usr/src/kernels/2.6.32-573.3.1.el6.x86_64/  (此处要根据自己实际环境来填写目录,可以使用uname -r来查看自己当前的内核版本,复制到此处即可;如果你发现你的kernels 下面没有。那就是没有安装 kernel-devel,也就是内核开发包)
make && make install;安装完成之后,一定要善于使用echo $?来看返回的值是否为0
安装完成之后,默认的keepalived在/usr/local/etc目录下,将目录拷贝至常用目录中:
cp /usr/local/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/
cp /usr/local/sysconfig/keepalived /etc/sysconfig/
cp /usr/local/sbin/keepalived /usr/sbin/
mkdir /etc/keepalived
/etc/keepalived/keepalived/conf:默认这个配置文件是没有的,需要自己创建
#mysql master的keepalived配置:
 
! Configuration File for keepalived  
global_defs {  
     notification_email {  
     it_shengyu@163.com  
     }  
     notification_email_from it_shengyu@163.com  
     smtp_server 127.0.0.1  
     smtp_connect_timeout 30  
     router_id mysql-ha  
     }  
#vrrp_script chk_mysql {
#    script "/root/sql.sh"
#    interval 2
#    weight 2
#}
 
vrrp_instance VI_1 {  
     state Master   #两台配置此处均是BACKUP  
     interface eth0
     virtual_router_id 51
     priority 100   #优先级,另一台改为90  
     advert_int 1  
     #nopreempt  #不抢占,只在优先级高的机器上设置即可,优先级低的机器不设置  
     authentication {  
     auth_type PASS  
     auth_pass 1111  
     }  
     virtual_ipaddress {  
     10.10.23.137
 
     }  
     }  
 
virtual_server 10.10.23.137 3306 {  
     delay_loop 2   #每个2秒检查一次real_server状态  
     lb_algo wrr   #LVS算法  
     lb_kind DR    #LVS模式  
     persistence_timeout 60   #会话保持时间  
     protocol TCP  
     real_server 10.10.23.114 3306 {  #服务器真实IP配置段
     weight 3  
     notify_down /root/sql.sh     
     TCP_CHECK {  
     connect_timeout 10    #连接超时时间  
     nb_get_retry 3       #重连次数  
     delay_before_retry 3   #重连间隔时间  
     connect_port 3306   #健康检查端口  
     }
#     track_script {
#    check_run
#        }
     }
 
 
#mysql slave的keepalived配置文件:
! Configuration File for keepalived  
global_defs {  
     notification_email {  
     it_shengyu@163.com  
     }  
     notification_email_from it_shengyu@163.com  
     smtp_server 127.0.0.1  
     smtp_connect_timeout 30  
     router_id mysql-ha  
     }  
#vrrp_script chk_mysql {
#    script "/root/sql.sh"
#    interval 2
#    weight 2
#}
 
vrrp_instance VI_1 {  
     state Master   #两台配置此处均是BACKUP  
     interface eth0
     virtual_router_id 51
     priority 90   #优先级 
     advert_int 1  
     #nopreempt  #不抢占,只在优先级高的机器上设置即可,优先级低的机器不设置  
     authentication {  
     auth_type PASS  
     auth_pass 1111  
     }  
     virtual_ipaddress {  
     10.10.23.137
 
     }  
     }  
 
virtual_server 10.10.23.137 3306 {  
     delay_loop 2   #每个2秒检查一次real_server状态  
     lb_algo wrr   #LVS算法  
     lb_kind DR    #LVS模式  
     persistence_timeout 60   #会话保持时间  
     protocol TCP  
     real_server 10.10.23.113 3306 {  #服务器真实IP配置段
     weight 3  
     notify_down /root/sql.sh     
     TCP_CHECK {  
     connect_timeout 10    #连接超时时间  
     nb_get_retry 3       #重连次数  
     delay_before_retry 3   #重连间隔时间  
     connect_port 3306   #健康检查端口  
     }
#     track_script {
#    check_run
#        }
     } 
 
notify_down:此处是引用一个脚本,如果mysql有故障时会触发此脚本:
 技术分享
技术分享
脚本很简单,就是当mysql有故障的时候。会停止此服务器上的keepalived服务,如果这里是做的keep+nginx,将mysql换为nginx即可;
脚本定义一个变量,使用ps检查mysqld是会启动。--no-header是不打印头部信息;wc -l是列出指定文件统计总数,如果为0,表示mysqld服务没有启动;
完成之后,主从上面分别启动keepalived服务,查看一下日志,并查看一下vip现在是在哪一台服务器上:
先查看主上的IP和日志:
技术分享
 技术分享
再查看从上的IP和日志:
技术分享
 技术分享
从上图可看出,目前的VIP是在主服务器上的,下面我们将主上的mysql服务停止掉,再查看日志和VIP是否会自动转移到从服务器上,【需先把脚本里面的第一段if注释掉,不然会自动启动mysql服务,将看不到实验效果】
停止主上的数据库之后再查看结果如下:
技术分享
 技术分享
技术分享
技术分享
当主上的数据库出现故障停止之后,会自动触发脚本,关闭主上的keepalived服务,此时从服务器会抢占keep master,过程很快,不会影响用户访问。
 
当主上的数据库故障处理恢复之后,再启动主上的keepalived,此时再查看结果:
技术分享
 技术分享
技术分享
技术分享
如上,当主上的数据库恢复、keepalived启动之后,VIP会迅速跳转到主服务器上来,再接替从服务器的工作。这是因为主服务器的优先级要高于从服务器。
 
 http://www.linuxidc.com/Linux/2014-08/105884.htm  keepalived选举问题 【福利】
小白刚刚学习keepalived,实验心得,欢迎各位大牛指点,交流!!!
 
 

keepalived+Mysql主从配置实验

标签:

原文地址:http://www.cnblogs.com/csylinux/p/5045324.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!