HAproxy+Keepalived负载均衡的安装部署及使用手册一、首先环境介绍:LB1:10.10.13.240LB2:10.10.13.241webserver1:10.10.13.243webserver2:10.10.13.244LB1和LB2做keepalived主从,对haproxy服务提供切换;haproxy服务将调度两台webserver,w
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表示权重
server app2 x.x.x.x:8080 COOKIE 1 check fall 5 weight 10
backend taobao_server //后端节点2定义
mode http
server app1 10.10.13.244:80 check fall 5
listen haproxy-status 10.10.13.245:8888
mode http
option httplog
stats uri /haproxy-stats
stats realm Global\ statistics
stats auth admin:123456
haproxy配置结束。