HAProxy负载均衡

一、HAProxy简介

HAProxy是免费、高效、可靠的高可用及负载均衡解决方案。该软件非常适合处理高负载站点的七层数据请求。HAProxy工作模式使其可以非常容易且安全地集成到我们现有的站点架构中。使用类似的代理软件还可以对外屏蔽内部真实的web服务器,防止内部服务器遭到外部攻击。

如图:终端用户通过访问HAProxy代理服务器获得站点页面,而代理服务器在收到客户端请求后会根据自身规则将数据请求转发给后端真实服务器。为了让同一客户端访问服务器时可以保持会话(同一客户端第二次访问网站时可以转发至相同的后端真实服务器),HAProxy有三种解决方案:客户单IP、Cookie、以及Session。第一种方式中,HAProxy将客户端IP进行Hash计算并保存,以此确保当相同的IP访问代理服务器时可以转发到固定的真实服务器上。第二种方式中,HAProxy依靠真实服务器发送给客户端的Cookie信息进行会话保持。第三种方式中,HAProxy将保存真实服务器的Session及服务器标识,实现会话保持功能。

二、HAProxy应用案例

系统环境

# cat /etc/redhat-release 
CentOS Linux release 7.2.1511 (Core) 
# uname -r
3.10.0-327.el7.x86_64

两台web服务器采用相同的配置,我们将web1、web2设置不同的页面以示区别

   

web1、web2配置一样
#cat nginx.conf
worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    server {
        listen       80;
        server_name  localhost;
        location / {
            root   html;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

HAProxy代理服务器设置

①内核调优,在文件中插入以下两行,并重启系统生效

vim /etc/security/limits.conf
*  soft  nofile  65535
*  hard  nofile  65535

②安装HAProxy

yum install -y gcc gcc-c++
tar zxf haproxy-1.5.3.tar.gz
cd haproxy-1.5.3

make TARGET=linux31 PREFIX=/usr/local/haproxy
make install PREFIX=/usr/local/haproxy

cp examples/haproxy.init /etc/init.d/haproxy

③编辑配置文件

HAProxy安装后没有默认的配置文件,需要手动创建。本例将创建/etc/haproxy.cfg配置文件,当启动HAProxy服务时需要使用-f选项指定配置文件路径。

配置文件主要包含全局段与代理段,global代表全局段,default、 listen、frontend、backend为代理段。

frontend:用来匹配客户端请求的域名或URI等

backend:定义后端服务器集群

listen:是frontend与backend的集合,有时仅使用listen即可替代frontend与backend

vim /usr/local/haproxy/haproxy.cfg
global
   log 127.0.0.1	local0
   log 127.0.0.1	local1 notice
   #log loghost	local0 info
   maxconn 40960                #支持每个进程的最大并发数
   chroot /usr/local/haproxy    #将目录切换至/usr/local/haproxy并执行chroot,增强安全性
   uid 99                       #配置进程的账户ID,建议设置为HAProxy专用账户
   gid 99                       #配置进程的组ID,建议设置为HAProxy专用组
   daemon                       #配置HAProxy以后台进程模式工作
   nbproc 1                     #指定后台进程的数量
   #debug
   #quiet

defaults
   log	global
   mode	http                         #HAProxy工作模式,可选项为:tcp、http、health
   option	httplog              #使用http日志
   option	dontlognull          #不记录空日志
   option       forwardfor           #允许插入X-Forwarded-For数据包头给后端真是服务器,可以让后端服务器获取真实客户端的IP
   option       abortonclose         #当服务器负载很高的时候,自动结束掉当前队列处理比较久的链接
   retries	3                    #重试次数
   maxconn	40960
   timeout connect	 5000        #设置连接最大超时时间,默认单位为毫秒(ms)
   timeout client 	 50000       #设置客户端最大超时时间,默认单位为毫秒(ms)
   timeout server   50000            #设置服务器端最大超时时间,默认单位为毫秒(ms)

frontend http-in            #定义终端用户访问的前端服务器
   bind    0.0.0.0:80       #定义一个或多个监听地址及端口
   mode    http
   log     global
   acl heboan hdr_beg(host) -i www.heboan.com   #定义ACL控制请求包头信息通过正则匹配,-i代表不许分大小写
   acl heboan hdr_beg(host) -i heboan.com
   use_backend heboan_server if heboan          #当用户请求触发名为heboan的ACL规则时,代理会将请求转发为heboan_server后端服务器组

   stats   enable                   #开启HAProxy监控页面
   stats   hide-version             #隐藏HAProxy版本信息
   stats   uri   /admin-status      #设置监控页面的URI
   stats   auth  admin:heboan123    #设置监控页面的用户名及密码
   stats   admin if TRUE

backend heboan_server         #定义后端服务器组
   mode    http
   balance roundrobin         #轮询真实服务器
   cookie  SESSION_COOKIE insert indirect nocache
   option  httpchk GET /index.html                 #检查真实服务器的index.html,以此判断服务器的健康状态
   server  web1 192.168.88.3:80 minconn 100 maxconn 1000 cookie web1 weight 6 check inter 2000 rise 2 fall 4
   server  web2 192.168.88.4:80 minconn 100 maxconn 1000 cookie web2 weight 6 check inter 2000 rise 2 fall 4

    #健康检查,健康检查的时间间隔为2000ms,连续2次健康检查成功则认为服务器是有效开启的,连续4次检查检查失败后,认为服务器已经宕机,权重为6

④启动并检查端口

# haproxy -f /usr/local/haproxy/haproxy.cfg
# lsof -i :80
COMMAND   PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
haproxy 11958 nobody    3u  IPv4  31947      0t0  TCP *:http (LISTEN)

 ⑤开机启动

echo "haproxy -f /usr/local/haproxy/haproxy.cfg">>/etc/rc.local

  

三、客户端测试

hosts绑定(192.168.11.139  www.heboan.com heboan.com)

打开两个浏览器访问www.heboan.com,会轮询到后端不同的服务器

查看haproxy状态,访问www.heboan.com/admin-status,账号:admin,密码:heboan123

原文地址:https://www.cnblogs.com/shengy/p/7389425.html