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/haproxyService 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

转载于:https://www.cnblogs.com/yang68h/p/5511040.html

haproxy +keepalived 原创相关推荐

  1. Haproxy+keepalived高可用集群实战

    前言 随着互联网火热的发展,开源负载均衡器的大量的应用,企业主流软件负载均衡如LVS.Haproxy.Nginx等,各方面性能不亚于硬件负载均衡F5,Haproxy提供高可用性.负载均衡以及基于TCP ...

  2. saltstack实现haproxy+keepalived负载均衡+高可用(二)

    一键部署haproxy+keepalived实现负载均衡+高可用 实验环境: !!!!    特别注意: www.westos.org为test1的minion名字 test1: 172.25.1.1 ...

  3. CentOS7+MySQL/MariaDB+Galera+HAProxy+Keepalived构建高可用数据库集群

    方案优势: Galera能够实现MySQL/MariaDB数据库的主主复制和多主复制等模式,这些复制模式都是同步进行的,同步时间非常短 每一个节点都可以同时写入和读取,当某一节点发生故障时,可自动从集 ...

  4. haproxy+keepalived应用实战

    1.四层与七层负载均衡的区别 所谓的四层就是 ISO 参考模型中的第四层.四层负载均衡也称为四层交换机,它主要是通过分析 IP 层及 TCP/UDP 层的流量实现的基于 IP 加端口的负载均衡.常见的 ...

  5. 用HAproxy+keepalived+mysql Replication 构建基于企业级负载均衡

    最近用HAproxy+keepalived+mysql复制测试高可用性Linux系统集群.    HAProxy是一款免费的提供高可用性.负载均衡以及基于TCP(第四层)和HTTP(第七层)应用的代理 ...

  6. haproxy + keepalived “一键安装包” 配置与测试HOWTO

    本文为  "haproxy + keepalived 一键安装包"  的 第四篇 目的:帮助快速设置haproxy 与 keepalived 配置文档 第一篇 haproxy 安装 ...

  7. haproxy + keepalived 安装配置

    haproxy + keepalived 安装配置 备注: web server:192.168.10.53 web server:192.168.10.81 haproxy + keepalived ...

  8. Redis集群方案之Twemproxy+HAProxy+Keepalived+Sentinel+主从复制(待实践)

    首先说明一下,Twemproxy+HAProxy+Keepalived+Sentinel+主从复制-这里提到的技术不一定全部都用上,但是全部用上之后可以达到高可用. 主从复制:实现数据一式多份的保障. ...

  9. HAProxy Keepalived L4-L7 高可用负载均衡解决方案

    目录 文章目录 目录 HAProxy 负载均衡器 应用特性 性能优势 会话保持 健康检查 配置文件 负载均衡策略 ACL 规则 Web 监控平台 Keepalived 虚拟路由器 核心组件 VRRP ...

最新文章

  1. Android反编译
  2. kaggle上面的score以及ROC_AUC数值咋回事
  3. 平衡二叉树的自顶向下递归和自底向上递归
  4. 选择版本Win7系统VS2010下搭建qt开发环境
  5. RBSP、SODB、EBSP三者的区别和联系 SPS: sequence parameter sets
  6. 手机apk签名工具安卓版_小飞鱼APK签名工具使用方法
  7. (21)css3盒模型box-sizing属性
  8. 【考研】考研5大分数线——国家线、院校线、自划线、单科线、录取线的区别
  9. selenium中的window handle
  10. 用 JMeter 测试 MySQL 数据库
  11. java 7zip分卷压缩_7zip分卷压缩,rar分卷压缩文件
  12. 计算机cpu占用率高,CPU占用率高怎么解决?Win10系统电脑CPU占用率100%的解决方法...
  13. 兰斯洛特·δ零式·开发计划
  14. Python全栈笔记(三)
  15. win7安装JAVA程序闪退怎么办_win7打开软件闪退如何解决
  16. java定义两个动物抽象类 程序_java抽象类和接口详解
  17. 动物识别系统的规则库
  18. html中url英文全称,URL的英文全称
  19. 期货市场的投资者适当性原则
  20. 莫比乌斯反演专题题解

热门文章

  1. python selenium安装
  2. Linux Ubuntu 18.04安装JDK、Hadoop、Hbase以及图形界面
  3. Git修改用户名和邮箱的方法(附Git常用命令)
  4. The Learning route of GNN
  5. NVIDIA SMI 无法与 nvidia driver 通信
  6. 美联储FOMC会议前瞻:预计美联储将维持目前的政策不变
  7. SAP自学指南:案例公司的需求分析
  8. SAP License:值字段更改注意事项
  9. SAP License:谈对财务人的解惑
  10. 投资大佬都在看的一张报表