./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会迅速跳转到主服务器上来,再接替从服务器的工做。这是由于主服务器的优先级要高于从服务器。
小白刚刚学习keepalived,实验心得,欢迎各位大牛指点,交流!!!