Haproxy+keepalived

原理:

HAProxy介绍及其定位

HAProxy提供高可用性负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。根据官方数据,其最高极限支持10G的并发。

HAProxy特别适用于那些负载特大的web站点, 这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中,同时可以保护你的web服务器不被暴露到网络上。

其支持从4层至7层的网络交换,即覆盖所有的TCP协议。就是说,Haproxy 甚至还支持 Mysql 的均衡负载。

如果说在功能上,能以proxy反向代理方式实现WEB均衡负载,这样的产品有很多。包括 Nginx,ApacheProxy,lighttpd,Cheroke等。

但要明确一点的,Haproxy 并不是 Http 服务器。以上提到所有带反向代理均衡负载的产品,都清一色是 WEB 服务器。简单说,就是他们能自个儿提供静态(html,jpg,gif..)或动态(php,cgi..)文件的传输以及处理。而Haproxy仅仅,而且专门是一款的用于均衡负载的应用代理。其自身并不能提供http服务。

keepalived理论工作原理

keepalived可提供vrrp以及health-check功能,可以只用它提供双机浮动的vip(vrrp虚拟路由功能),这样可以简单实现一个双机热备高可用功能。

keepalived是一个类似于layer3, 4 & 5交换机制的软件,也就是我们平时说的第3层、第4层和第5层交换。Keepalived的作用是检测web 服务器的状态。 Layer3,4&5工作在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将把这台服务器从服务器群中剔除。

  Layer5:Layer5就是工作在具体的应用层了,比Layer3,Layer4要复杂一点,在网络上占用的带宽也要大一些。Keepalived将根据用户的设定检查服务器程序的运行是否正常,如果与用户的设定不相符,则Keepalived将把服务器从服务器群中剔除。

vip即虚拟ip,是附在主机网卡上的,即对主机网卡进行虚拟,此IP仍然是占用了此网段的某个IP。

拓扑图

1 安装

#若tar -C无效,可以用tar -xzf mysql.tar.gz -C /usr/local/mysql --strip-components=1,这个从github上看到的一个实例

#wget 现在好像不能下载了,只能去haproxy 的GitHub上下载了

cd /mnt/ &&wget http://www.haproxy.org/download/1.6/src/haproxy-1.6.5.tar.gz  && tar zxf /mnt/haproxy-1.6.5.gz –C /mnt/

make TARGET=linux2628

make install PREFIX=/usr/local/haproxy
 
mkdir /usr/local/haproxy/conf
 
2配置
 
cat >> /usr/local/haproxy/conf/haproxy.cfg<<EOF
global
    maxconn 51200  
    chroot /usr/local/haproxy
    uid 99
    gid 99
    daemon
    #quiet
    nbproc 1
    pidfile /var/run/haproxy.pid
defaults
mode http
#优化选项
    retries 3
    option redispatch
    #option abortonclose
    timeout connect 5000ms
    timeout client 30000ms
    timeout server 30000ms
    #timeout check 2000
    log 127.0.0.1 local0 info
    balance roundrobin
listen admin_stats
    bind 0.0.0.0:8888
    option httplog
    stats refresh 30s
    stats uri /stats  #监控页面的url
    stats realm Haproxy Manager
    stats auth admin:admin #监控页面的用户名和密码
    stats hide-version
frontend http-in
    bind *:8889
    mode http
    option httplog
    log global
    default_backend httpserver
backend httpserver
    balance roundrobi
    #server web1 192.168.0.78:80 cookie 1  weight 1  check inter  2000 rise 2 fall 3
#server web2 192.168.0.28:80 cookie 1  weight 1  check inter  2000 rise 2 fall 3
option httpchk GET /index.html   #后端服务器检测
#使用stick-table管理客户端session,保持session会话
stick-table type ip size 5000k expire 5m store conn_cur
    stick match src table httpserver
    stick on src table httpserver
    server s8001 192.168.0.227:800 maxconn 500 weight 10 cookie s8001 check
    server s8002 192.168.0.229:800 maxconn 500 weight 10 cookie s8002 check
EOF
 
 
3 haproxy日志
 
sed -i '13,14 s/^#//' /etc/rsyslog.conf
cat >> /etc/rsyslog.conf <<EOF
local3.*         /var/log/haproxy.log
local0.*         /var/log/haproxy.log
EOF
 
service rsyslog restart
 
4 启动haproxy
 
cat >>/etc/init.d/haproxy <<EOF
#!/bin/sh 
#chkconfig: 2345 10 90
#description:haproxy
# confit: /usr/local/haproxy/conf/haproxy.cfg  
# pidfile: /usr/local/haproxy/logs/haproxy.pid  
  
# source function library.  
. /etc/rc.d/init.d/functions  
  
# source networking configuration.  
. /etc/sysconfig/network  
  
# check that networking is up.  
[ "$NETWORKING" = "no" ] && exit 0  
config="/usr/local/haproxy/conf/haproxy.cfg"  
exec="/usr/local/haproxy/sbin/haproxy"  
prog=$(basename $exec)  
  
[ -e /etc/sysconfig/$prog ] && . /etc/sysconfig/$prog  
  
lockfile=/var/lock/subsys/haproxy  
  
check(){  
    $exec -c -V -f $config  
start() {  
    $exec -c -q -f $config  
    if [ $? -ne 0 ]; then  
        echo "Errors in configuration file, check with $prog check."  
        return 1  
    fi  
   
    echo -n $"Starting $prog: "  
    # start it up here, usually something like "daemon $exec"  
    daemon $exec -D -f $config -p /var/run/$prog.pid  
    retval=$?  
    echo  
    [ $retval -eq 0 ] && touch $lockfile  
    return $retval  
  
stop() {  
    echo -n $"Stopping $prog: "  
    # stop it here, often "killproc $prog"  
    killproc $prog   
    retval=$?  
    echo  
    [ $retval -eq 0 ] && rm -f $lockfile  
    return $retval  
  
restart() {  
    $exec -c -q -f $config  
    if [ $? -ne 0 ]; then  
        echo "Errors in configuration file, check with $prog check."  
        return 1  
    fi  
    stop  
    start  
  
reload() {  
    $exec -c -q -f $config  
    if [ $? -ne 0 ]; then  
        echo "Errors in configuration file, check with $prog check."  
        return 1  
    fi  
    echo -n $"Reloading $prog: "  
    $exec -D -f $config -p /var/run/$prog.pid -sf $(cat /var/run/$prog.pid)  
    retval=$?  
    echo  
    return $retval  
  
force_reload() {  
    restart  
  
fdr_status() {  
    status $prog  
  
case "$1" in  
    start|stop|restart|reload)  
        $1  
        ;;  
    force-reload)  
        force_reload  
        ;;  
    checkconfig)  
        check  
        ;;  
    status)  
        fdr_status  
        ;;  
    condrestart|try-restart)  
      [ ! -f $lockfile ] || restart  
    ;;  
    *)  
        echo $"Usage: $0 {start|stop|status|checkconfig|restart|try-restart|reload|force-reload}"  
        exit 2  
esac  
EOF
chmod u+x /etc/init.d/haproxy
Service haproxy start
Chkconfig haproxy on
 
5.keepalived
 
yum install  openssl openssl-devel ipvsadm gcc gcc-c++  kernel-devel install libnl* popt* libnfnetlink-devel -y
cd /mnt &&  wget http://www.keepalived.org/software/keepalived-1.2.20.tar.gz  &&tar zxf keepalived-1.2.20.tar.gz -C /mnt
cd keepalived-1.2.20
./configure --prefix=/usr/local/keepalived --sysconf=/etc --with-kernel-dir=/usr/src/kernels/2.6.32-573.22.1.el6.x86_64/
make && make install
ll /usr/local/keepalived/
ln -s  /usr/local/keepalived/sbin/keepalived /usr/sbin/
cat >>/etc/keepalived/keepalived.conf <<EOF
! Configuration File for keepalived
 
global_defs {
   notification_email {
       root@localhost #设置邮件
   }
   notification_email_from root@localhost
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id HAProxy_DEVEL
   vrrp_skip_check_adv_addr
   vrrp_strict
}
 
vrrp_script check_haproxy {
   script "/mnt/shell/check_haproxy.sh"
   #interval 2
   #weight 2
}
 
vrrp_instance VI_1 {
    state BACKUP #两边state 都为BACKUP
    interface eth0
    virtual_router_id 78 #id 必须唯一,且不可冲突
    priority 100 #优先级不一样,数字越大,优先级越高
nopreempt            #不主动抢占资源,只在master这台优先级高的设置,backup不设置 
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.0.24
    }
    track_script {
        check_haproxy
    }
}
EOF
service keepalived start
chkconfig keepalived on
 
keepalived 检测haproxy脚本,两种方式取其一:
 
#!/bin/bash
A=`ps -C haproxy --no-header|wc -l`
if [ $A -eq 0 ];then
/etc/init.d/haproxy start
sleep 3
if [ `ps -C haproxy --no-header|wc -l` -eq 0 ];then
/etc/init.d/keepalived stop
fi
fi
 
 
#add new other method
A=`curl -I http://192.168.0.24:8888/stats -u admin:admin|grep HTTP|awk '{print $2}'`
if [ $A -ne 200 ];then
/etc/init.d/haproxy start
sleep 3
if [ `curl -I http://192.168.0.24:8888/stats -u admin:admin|grep HTTP|awk '{print $2}'` -ne 200 ];then
/etc/init.d/keepalived sotp
fi
fi

haproxy +keepalived 原创的更多相关文章

  1. HaProxy+Keepalived+Mycat高可用群集配置

    概述 本章节主要介绍配置HaProxy+Keepalived高可用群集,Mycat的配置就不在这里做介绍,可以参考我前面写的几篇关于Mycat的文章. 部署图: 配置  HaProxy安装 181和1 ...

  2. haproxy+keepalived实现高可用负载均衡

    软件负载均衡一般通过两种方式来实现:基于操作系统的软负载实现和基于第三方应用的软负载实现.LVS就是基于Linux操作系统实现的一种软负载,HAProxy就是开源的并且基于第三应用实现的软负载. HA ...

  3. HaProxy+keepalived实现负载均衡

    HAProxy提供高可用性.负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费.快速并且可靠的一种解决方案.HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持 ...

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

    配置环境说明: KVM虚拟机配置 用途 数量 IP地址 机器名 虚拟IP地址 硬件 内存3G  系统盘20G cpu 4核 Haproxy keepalived 2台 192.168.1.10 192 ...

  5. 实现基于Haproxy+Keepalived负载均衡高可用架构

    1.项目介绍: 上上期我们实现了keepalived主从高可用集群网站架构,随着公司业务的发展,公司负载均衡服务已经实现四层负载均衡,但业务的复杂程度提升,公司要求把mobile手机站点作为单独的服务 ...

  6. Haproxy+Keepalived负载均衡

    Haproxy介绍 HAProxy是一个特别适用于高可用性环境的TCP/HTTP开源的反向代理和负载均衡软件.在7层负载均衡方面的功能很强大(支持cookie track, header rewrit ...

  7. 案例一(haproxy+keepalived高可用负载均衡系统)【转】

    1.搭建环境描述: 操作系统: [root@HA-1 ~]# cat /etc/redhat-release CentOS release 6.7 (Final) 地址规划: 主机名 IP地址 集群角 ...

  8. haproxy+keepalived(涵盖了lvs,nginx.haproxy比较)

    文章转载自: haproxy+keepalived    https://cloud.tencent.com/developer/article/1026385 网络四层和七层的区别   https: ...

  9. Haproxy+Keepalived高可用环境部署梳理(主主和主从模式)

    Nginx.LVS.HAProxy 是目前使用最广泛的三种负载均衡软件,本人都在多个项目中实施过,通常会结合Keepalive做健康检查,实现故障转移的高可用功能. 1)在四层(tcp)实现负载均衡的 ...

随机推荐

  1. 万圣节的糖果(Halloween Sweets)

    今天遇到codewars的一道题,这是链接,讲的是关于万圣节的一个题目,简单点说,就是9个包裹,一个天平,两次称的机会,怎么找出9个包裹中唯一一个较重的包裹. 像我这种年轻时候喜欢研究难题获得存在感的 ...

  2. 黑马-----内存模型和volatile详解

    黑马程序员:Java培训.Android培训.iOS培训..Net培训 JAVA线程-内存模型和volatile详解 一.单核内存模型 1.程序运行时,将临时数据存放到Cache中 2.将CPU计算所 ...

  3. javascript选择器querySelector和querySelectorAll的使用和区别

    querySelector 和 querySelectorAll 方法是 W3C Selectors API规范中定义的.他们的作用是根据 CSS 选择器规范,便捷定位文档中指定元素. 目前几乎主流浏 ...

  4. [读书笔记]自动装箱的陷阱以及==与equals

    先看一段代码,来自周志明的<深入理解Java虚拟机>. Integer a = 1; Integer b = 2; Integer c = 3; Integer d = 3; Intege ...

  5. jQuery中的get()方法

    get()方法用于从jQuery对象中获取DOM元素,有以下两种使用方式: 1. get(index):获取jQuery对象中拥有指定索引的DOM元素. 2. get():获取包含jQuery对象中所 ...

  6. jd-gui报错INTERNAL ERROR 解决办法

    问题:我用dex2jar工具反编译了apk文件,但当我用jd-gui反编译前面操作获得的jar文件的时,能很完美地看到大部分类反编译后的代码,但有一部分类不能显示出来--constants类,仅仅显示 ...

  7. MySQL判断字段值来确定是否插入新记录

    今天正好有个新需求,要求在一张表中,保证不插入重复的记录. 即,保证每条记录中的某个字段的值不重复. 下面是我给出的SQL语句: //存在-->更新 //不存在-->插入 UPDATE 表 ...

  8. Python3 之 import 和 当前目录

    环境: Python-3.4.3 Web.py-0.37 安装 web.py 的时候,提示 ImportError: No module named 'utils' 看看源码,setup.py,有这么 ...

  9. Android 数据处理之Webapi OAuth2.0

    前面通过.net Webapi搭建了数据访问及处理平台,以下介绍如何通过Android来访问Webapi的数据. Android的常用的网络访问方式是使用HttpClient和HttpURLConne ...

  10. mac电脑的使用

    1. control + command + a 截图 2. shift + command + g 前往 3.在 Mac OS X 中怎样获取当前文件夹的路径 原文网址:https://www.zh ...