Ubuntu下HAproxy + Keepalived负载均衡的安装部署及使用笔记

Linux大全评论2.8K views阅读模式

HAproxy + Keepalived负载均衡的安装部署及使用手册

一、首先环境介绍:
 
LB1:10.10.13.240
LB2:10.10.13.241
web server1 :10.10.13.243

web server2 :10.10.13.244

LB1和LB2做keepalived主从,对haproxy服务提供切换;haproxy服务将调度两台web server,
web server 的对外虚拟IP是10.10.13.245 。

二、243/244:两台RealServer的 web服务配置

1、先安装web服务: apt-get install apache2

2、修改web服务器日志格式
vi /etc/apache2/apache2.conf
#LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

3、注释掉原来的CustomLog,并修改文档根路径DocumentRoot为/var/www
vi /etc/apache2/sites-available/default
SetEnvIf Request_URI "^/check\.txt$" dontlog
CustomLog /var/log/apache2/access.log combined env=!dontlog

echo "The web service provider is 243|244" > /var/www/index.html

4、重启web服务器
/etc/init.d/apache2 restart
 
5、建立check文件,haproxy使用该文件检查WEB状态,必须建立
touch /var/www/check.txt
三、240/241两台服务器的haproxy配置

1、 安装haproxy
wget http://haproxy.1wt.eu/download/1.4/src/haproxy-1.4.22.tar.gz
tar xvf haproxy-1.4.22.tar.gz
cd haproxy-1.4.22
make TARGET=36-Ubuntu
make PREFIX=/usr/local/haproxy install
 
2、 编辑其配置文件
cd /etc
mkdir haproxy
vim haproxy/haproxy.cfg
###########全局配置#########

global
        #daemon
        #nbproc 1

        #pidfile /var/run/haproxy.pid

        log 127.0.0.1 local0

        log 127.0.0.1 local1 notice

        maxconn 4096

########默认配置############

defaults
        log global

        mode http              #默认的模式mode { tcp|http|health },tcp是4层,http是7层,health只会返回OK

        retries 3              #两次连接失败就认为是服务器不可用,也可以通过后面设置

        #option redispatch      #当serverId对应的服务器挂掉后,强制定向到其他健康的服务器

        #option abortonclose    #当服务器负载很高的时候,自动结束掉当前队列处理比较久的链接

        option httplog

        option dontlognull

        option redispatch

        maxconn 2000            #默认的最大连接数

        timeout connect 5000ms    #连接超时

        timeout client 30000ms    #客户端超时

        timeout server 30000ms  #服务器超时

        #timeout check 2000      #=心跳检测超时

      log 127.0.0.1 local0 err    #开启记录haproxy日志

listen web 10.10.13.245:80
        mode http

        stats enable

        balance roundrobin

        option httpclose

        option forwardfor

        option httpchk HEAD /check.txt HTTP/1.0

        server nc243 10.10.13.243:80 cookie A check

        server nc244 10.10.13.244:80 cookie B check

或者:
 
frontend shishi
        bind *:82

        mode http

        acl api_net url_sub -i sip_apiname=engagecloud

        use_backend engagecloud if api_net

        default_backend engagecloud

backend engagecloud
        mode http

        balance roundrobin

        server app 10.15.14.130:80 cookie A

        server app1 10.15.14.131:8080 cookie B

backend salesapp
        mode http

        server app1 10.15.14.131:8080 cookie B

 
frontend shishi2
        bind *:822

        mode http

        acl api_net url_sub -i sip_apiname=engagecloud

        use_backend engagecloud if api_net

        default_backend salesapp1 

backend engagecloud1
        mode http

        server app 10.15.14.130:80 cookie A

backend salesapp1
        mode http

        server app1 10.15.14.131:8080 cookie B

        server app 10.15.14.130:80 cookie A

frontend http-ip //前端节点定义
 
bind 10.10.13.245:80  //虚拟服务节点监听80端口
    mode http
    log global
    option httplog
    option httpclose //每次请求完毕后主动关闭http通道,HA-Proxy不支持keep-alive模式,只能够模拟这种模式的实现
    option forwardfor  //如果后端服务器需要获得客户端的真实IP需要配置次参数,将可以从Http Header中获得客户端IP

    capture request header Host len 20 //此配置和一下的类似配置都是抓取Http请求中的参数记录到日志中。
    capture request header User-Agent len 16
    capture request header Content-Length len 10   
    capture request header Referer len 20
    capture response header Content-Length len 10

//控制策略的配置,参考别人的配置,使用时要根据自己的实际情况。

    acl api_taobao url_sub -i sip_apiname=taobao. //在请求url中包含sip_apiname=taobao,则此控制策略返回true,否则为false

    acl api_alisoft url_sub -i sip_apiname=alisoft. //在请求url中包含sip_apiname=alisoft,则此控制策略返回true,否则为false

    acl invalid_req url_sub -i sip_apiname= //在请求url中包含sip_apiname=,则此控制策略返回true,否则为false

    acl stat_req url_dir -i admin //在请求url中存在admin作为部分地址路径,则此控制策略返回true,否则返回false
    block if !invalid_req !stat_req //block表示阻止请求,返回403错误,当前表示如果不满足策略invalid_req,同时也不满足策略stat_req,则阻止请求。(就是要求URL中必需有参数sip_apiname,除非是查看服务器状态的URL)。

    use_backend alisoft_server if api_alisoft //如果是满足策略api_alisoft的情况,则使用alisoft_server作为后端服务集群。

    use_backend taobao_server if api_taobao //如果是满足策略api_taobao的情况,则使用taobao_server作为后端服务集群。
    default_backend alisoft_server //使用alisoft_server作为默认后端服务集群。
backend alisoft_server //后端节点1定义
  mode http
  balance roundrobin //负载均衡策略配置
  cookie SERVERID //允许插入serverid到cookie中,serverid后面可以定义
  server app1 10.10.13.243:80 cookie 1 check fall 5 weight 1 //真实服务器配置定义cookie 1表示serverid为1,check表示需要状态检查,fall 5表示失败五次就认为服务器状态不可用(不在接受请求),weight 1表示权重

企鹅博客
  • 本文由 发表于 2020年5月21日 23:18:56
  • 转载请务必保留本文链接:https://www.qieseo.com/155832.html

发表评论