vlei 发表于 2019-1-2 09:28:50

WEB服务器负载均衡之HAProxy

  负载均衡 (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
      #cookieSERVERID 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]
查看完整版本: WEB服务器负载均衡之HAProxy