Keepalived+HAProxy 高可用负载均衡

由于在生产环境使用了MySQLcluster,需要实现高可用负载均衡,这里提供了keepalived+haproxy来实现.

keepalived主要功能是实现真实机器的故障隔离及负载均衡器间的失败切换.可在第3,4,5层交换.它通过VRRPv2(Virtual Router Redundancy Protocol) stack实现的。

Layer3:Keepalived会定期向服务器群中的服务器.发送一个ICP的数据包(既我们平时用的Ping程序),如果发现某台服务的IP地址没有激活,Keepalived便报告这台服务器失效,并将它从服务器群中剔除,这种情况的典型例子是某台服务器被非法关机。Layer3的方式是以服务器的IP地址是否有效作为服务器工作正常与否的标准。

Layer4:主要以TCP端口的状态来决定服务器工作正常与否。如web server的服务端口一般是80,如果Keepalived检测到80端口没有启动,则Keepalived将把这台服务器从服务器群中剔除。

Layer5:在网络上占用的带宽也要大一些。Keepalived将根据用户的设定检查服务器程序的运行是否正常,如果与用户的设定不相符,则Keepalived将把服务器从服务器群中剔除。

推荐阅读:

Haproxy+Keepalived搭建Weblogic高可用负载均衡集群

Keepalived+HAProxy配置高可用负载均衡

CentOS 6.3下Haproxy+Keepalived+Apache配置笔记

Haproxy + KeepAlived 实现WEB群集 on CentOS 6

Haproxy+Keepalived构建高可用负载均衡

Software Design

Keepalived+HAProxy 高可用负载均衡

keepalived启动后会有单个进程

8352 ?        Ss    0:00 /usr/sbin/keepalived
8353 ?        S      0:00  \_ /usr/sbin/keepalived
8356 ?        S      0:01  \_ /usr/sbin/keepalived

父进程:内存管理,子进程管理等等

子进程:VRRP子进程

子进程:Healthchecking 子进程

实例

2台mysqlcluster 10.1.6.203 master  10.1.6.205 backup

vip 10.1.6.173

目的访问10.1.6.173 3366端口 分别轮询通过haproxy转发到10.1.6.203 3306 和10.1.6.205 3306

mysqlcluster搭建参照  ,这里在2台机上安装keepalived

root@10.1.6.203:~# apt-get install keepalived
root@10.1.6.203:~# cat /etc/keepalived/keepalived.conf
vrrp_script chk_haproxy {
        script "killall -0 haproxy"  # verify the pid existance
        interval 2                    # check every 2 seconds
        weight -2                    # add 2 points of prio if OK
}

vrrp_instance VI_1 {
        interface eth1                # interface to monitor
        state MASTER                 
        virtual_router_id 51          # Assign one ID for this route
        priority 101                  # 101 on master, 100 on backup
        nopreempt
        debug

virtual_ipaddress {
                10.1.6.173
        }

track_script {
                chk_haproxy
        }

notify_master /etc/keepalived/scripts/start_haproxy.sh  #表示当切换到master状态时,要执行的脚本
      notify_fault  /etc/keepalived/scripts/stop_keepalived.sh #故障时执行的脚本
      notify_stop  /etc/keepalived/scripts/stop_haproxy.sh # keepalived停止运行前运行notify_stop指定的脚本 }

VRRPD配置包括三个类:

VRRP同步组(synchroization group)

VRRP实例(VRRP Instance)

VRRP脚本

这里使用了 VRRP实例, VRRP脚本


注意配置选项: 

stat:指定instance(Initial)的初始状态,就是说在配置好后,这台服务器的初始状态就是这里指定的,但这里指定的不算,还是得要通过竞选通过优先级来确定,里如果这里设置为master,但如若他的优先级不及另外一台,那么这台在发送通告时,会发送自己的优先级,另外一台发现优先级不如自己的高,那么他会就回抢占为master

interface:实例绑定的网卡,因为在配置虚拟IP的时候必须是在已有的网卡上添加的

priority 101:设置本节点的优先级,优先级高的为master

debug:debug级别

nopreempt:设置为不抢占

vrrp_script chk_haproxy {
        script "killall -0 haproxy"  # verify the pid existance
        interval 2                    # check every 2 seconds 脚本执行间隔
        weight -2                    # add 2 points of prio if OK 脚本结果导致的优先级变更:2表示优先级+2;-2则表示优先级-2
}

然后在实例(vrrp_instance)里面引用,有点类似脚本里面的函数引用一样:先定义,后引用函数名
        track_script {
                chk_haproxy
        }
注意:VRRP脚本(vrrp_script)和VRRP实例(vrrp_instance)属于同一个级别

root@10.1.6.203:scripts# cat start_haproxy.sh
#!/bin/bash

sleep 5
get=`ip addr  |grep 10.1.6.173 |wc -l`
echo $get >> /etc/keepalived/scripts/start_ha.log

if [ $get -eq 1 ]
then
        echo "`date +%c` success to get vip" >> /etc/keepalived/scripts/start_ha.log
        /usr/local/sbin/haproxy -f /etc/haproxy/haproxy.cfg
else
        echo "`date +%c` can not get vip" >> /etc/keepalived/scripts/start_ha.log
fi
root@10.1.6.203:scripts# cat stop_keepalived.sh
#!/bin/bash

pid=`pidof keepalived`
if [ $pid == "" ]
then
 echo "`date +%c` no keepalived process id"  >> /etc/keepalived/scripts/stop_keep.log
else
 echo "`date +%c` will stop keepalived "  >> /etc/keepalived/scripts/stop_keep.log
 /etc/init.d/keepalived  stop
fi

/etc/init.d/keepalived  stop

root@10.1.6.203:scripts# cat stop_haproxy.sh
#!/bin/bash

pid=`pidof haproxy`
echo "`date +%c` stop haproxy" >> /etc/keepalived/scripts/stop_ha.log
kill -9 $pid

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/d143f336eaed53ad1e8f130a48d628bf.html