设为首页 收藏本站
查看: 1203|回复: 0

[经验分享] WEB服务器负载均衡之HAProxy

[复制链接]

尚未签到

发表于 2019-1-2 09:28:50 | 显示全部楼层 |阅读模式
  负载均衡 (Load Balancing) 负载均衡建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。
  负载均衡一般分为软负载均衡与硬负载均衡,一般而言,硬件负载均衡在功能、性能上优于软件方式,不过成本昂贵。硬件负载设备国际与国内比较有名的是:F5、A10、深信服。
  今天我们来介绍软件负载均衡中的免费开源的HAproxy。
  一、准备环境
  3台服务器:haproxy    web1    web2
  IP地址:
  192.168.1.70
  192.168.1.77
  192.168.1.78
  二、安装基础及常用工具包
  yum -y install yum-plugin* telnet nmap lrzsz gcc
  三、WEB服务器安装与配置
  web服务器,根据自己需求选择安装,本实验使用的是apache,您也可以选用tomcat nginx等web服务器,具体的安装与配置参阅本博客其它文章。
  四、安装haproxy
  wget http://haproxy.1wt.eu/download/1.3/src/haproxy-1.3.20.tar.gz
  tar xzvf haproxy-1.3.20.tar.gz
  mv haproxy-1.3.20 /usr/local/haproxy
  cd /usr/local/haproxy/
  make TARGET=linux26
  make install
  安装完成,验证haproxy是否已经正常安装:
  # ./haproxy -v
  显示如下内容,表示已经OK了
  HA-Proxy version 1.3.20 2009/08/09
Copyright 2000-2009 Willy Tarreau
  五、配置haproxy
  cd /usr/local/haproxy
  vim haproxy.cfg
  贴入如下内容:
  global
        log 127.0.0.1   local0
        maxconn 4096
        chroot /usr/local/haproxy
        uid 99
        gid 99
        daemon
        nbproc 10
        pidfile /usr/local/haproxy/haproxy.pid
        #debug
        #quiet

defaults
        log     127.0.0.1       local3
        mode    http
        #mode   tcp
        option httplog
        option httpclose
        option dontlognull
        option forwardfor
        option redispatch
        option originalto
        option abortonclose
        retries 2
        maxconn 2000
        balance roundrobin
        #balance source
        #balance leastconn
        stats   uri     /haproxy-stats
        stats auth admin:admin
        stats    refresh   5s
        #stats hide-version
        contimeout      5000
        clitimeout      50000
        srvtimeout      50000
        #timeout check 2000
  #set haproxy servers ip adress and port;
listen web_proxy 0.0.0.0:80
  #set mode of balance
        #balance source
  #set haproxy servers check web servers status;
        #option httpchk GET /check.php
        #option httpchk HEAD /index.php
  #set sticky sessions
        cookie SERVERID insert indirect nocache
        #cookie  SERVERID rewrite
  #set web servers ip address and port
        server web1 192.168.1.77:80 cookie appinst1 check weight 1
        server web2 192.168.1.78:80 cookie appinst2 check weight 1
        #server web1 192.168.1.77:80 cookie app1inst1 check inter 2000 rise 2 fall 5
        #server web2 192.168.1.78:80 cookie app1inst2 check inter 2000 rise 2 fall 5
        #server web1 192.168.1.77:80 cookie web1 check
        #server web2 192.168.1.78:80 cookie web2 check
  注:红色部分更改为自己WEB服务器的实际IP与端口即可;haproxy 还有超多的参数功能可以设置,上面的例子,是基本常规的设置,具体说明与用法可以参考文章末尾附上的网络资料。
  六、启动haproxy
  # /usr/local/haproxy/haproxy -f /usr/local/haproxy/haproxy.cfg
  七、停止haproxy
  # killall -9 haproxy
  八、设置haproxy 启动、停止、重启服务脚本
  如果您觉得上面的启动与停止还可以接受,第八部分的内容就可以忽略了,下面是在/etc/init.d 目录下新建haproxy 服务文件,以便我们可以像平常那样启动、停止、重启服务;
  vim /etc/init.d/haproxy
  #! /bin/sh
  # modify by anson
set -e
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/haproxy/sbin
PROGDIR=/usr/local/haproxy
PROGNAME=haproxy
DAEMON=$PROGDIR/$PROGNAME
CONFIG=$PROGDIR/$PROGNAME.cfg
PIDFILE=$PROGDIR/logs/$PROGNAME.pid
DESC="HAProxy daemon"
SCRIPTNAME=/etc/init.d/$PROGNAME

# Gracefully exit if the package has been removed.
test -x $DAEMON || exit 0

start()
{
         echo -n "Starting $DESC: $PROGNAME"
         $DAEMON -f $CONFIG
         echo "."
}

stop()
{
         echo -n "Stopping $DESC: $PROGNAME"
         haproxy_pid=$(cat $PIDFILE)
         kill -15 $haproxy_pid
         echo "."
}

restart()
{
         echo -n "Restarting $DESC: $PROGNAME"
         $DAEMON -f $CONFIG -p $PIDFILE -sf $(cat $PIDFILE)
         echo "."
}

case "$1" in
   start)
         start
         ;;
   stop)
         stop
         ;;
   restart)
         restart
         ;;
   *)
         echo "Usage: $SCRIPTNAME {start|stop|restart}" >&2
         exit 1
         ;;
esac

exit 0
  赋予执行权限:
  chmod +x /etc/init.d/haproxy
  九、测试访问网站
  打开浏览器,输入:http://192.168.1.70
  正常显示后端web服务器的内容,停掉其中一台,还是能正常访问;
  注:selinux iptables 一定要注意关闭或者开启相应的服务端口;
  小技巧:如果您想知道您现在访问的内容是哪一台服务器返回的呢?我是这么操作的:
  web1: echo "This is web1 servers" >> /var/www/html/web.php
  web2: echo "This is web2 servers" >> /var/www/html/web.php
  然后再打开浏览器,输入: http://192.168.1.70/web.php
  看看显示是哪台的内容即可知道,清掉缓存或者再多测试几下,每次显示都不太一样,会在web1与web2中轮流显示;哈哈,因为我们的配置文件里配置的是:balance roundrobin 即表示为轮询方式。
  参考网上资料:http://www.linuxidc.com/Linux/2012-07/65350.htm
  http://haproxy.1wt.eu/
  http://network.运维网.com/art/201103/249586.htm




运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-658529-1-1.html 上篇帖子: 双haproxy+双Keepalive实现高可用+动静分离 下篇帖子: 一个拆分haproxy serverlist的小脚本
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表