HAproxy + Keepalived负载均衡的安装部署及使用笔记(ubuntu)
负载均衡的安装部署及使用手册一、首先环境介绍:
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配置结束。
3、HA-Proxy日志配置说明:
HA-Proxy可以收集本机及其他后端服务器日志,但是需要在Load Balancer(240/241)上作一些配置。
首先修改/etc/sysconfig/syslog文件,将SYSLOGD_OPTIONS="-m 0” 修改为SYSLOGD_OPTIONS="-m 0 -r -x",支持收集远程服务器日志。
然后修改/etc/syslog.conf,增加如下语句:
#add by haproxy
local0.* /path/to/haproxy.log //需要存储日志的地址
执行service syslog restart,重新启动系统日志器
最后就是在HA-Proxy的配置中增加日志输出,即capture 后的内容。
4、启动haproxy服务
/usr/local/haproxy/sbin/haproxy –f /etc/haproxy/haproxy.cfg –d 或者-D
也可以:
cd /usr/local/haproxy/sbin
./haproxy –f /etc/haproxy/haproxy.cfg
5、打开网页测试:
http://10.10.13.245
http://blog.运维网.com/attachment/201210/100825614.png
http://blog.运维网.com/attachment/201210/100715758.png
6、打开haproxy的状态信息页:
http://10.10.13.245:8888/haproxy-stats
http://blog.运维网.com/attachment/201210/100847925.png
HAproxy 使用手册:
1、 HAProxy 常用参数说明
#./haproxy –help //haproxy相关命令参数介绍.
haproxy -f[-n 最大并发连接总数] [-N 每个侦听的最大并发数] [-d] [-D] [-q] [-V] [-c] [-p] [-s] [-l] [-dk] [-ds] [-de] [-dp] [-db] [-m ] [{-sf|-st} pidlist...]
-d 前台,debug模式
-D daemon模式启动
-q 安静模式,不输出信息
-V 详细模式
-c 对配置文件进行语法检查
-s 显示统计数据
-l 显示详细统计数据
-dk 不使用kqueue
-ds 不使用speculative epoll
-de 不使用epoll
-dp 不使用poll
-db 禁用后台模式,程序跑在前台
-sf 程序启动后向pidlist里的进程发送FINISH信号,这个参数放在命令行的最后
-st 程序启动后向pidlist里的进程发送TERMINATE信号,这个参数放在命令行的最后
2、HAProxy 错误排除
在上述启动时, 若有出现下述错误:
Starting haproxy: 015/191034 (15631) : Starting proxy webfarm: cannot bind socket...on both load balancer
或
056/103843 (1358) : Starting proxy www-balancer: cannot bind socket
解法
暂时解法, 直接先修改设定, 让它先跑起来:
sysctl -e net.ipv4.ip_nonlocal_bind=1
永久解法, 让开机时自动设此参数.
sysctl -a | grep nonlocal #看是否已经有设定此参数
vim /etc/sysctl.conf # 最下面加入
net.ipv4.ip_nonlocal_bind=1
还有一种可能就是,haproxy Load Balancer的机器上开启了web服务,关闭即可。要保证web服务,在这两台机器上是关掉的。
3、 HAProxy 配置手册
haproxy.cfg 有分下列三种: (haproxy.cfg 的三个主项目)
global
listen
defaults
注:
下述所有都必须由 大/小 写字母、数字、 -、 . 、: 组成. (大小写会视为不同名称)
defaults : 下面所有参数的预设设定值,下面的设定值会盖掉上面的。
listen :完整的 Proxy 代理,frontend / backend 都在这个设定里 (用于 TCP)
global 分类
global 部分有下述几类:
行程管理和安全
chroot
daemon: 执行 -D 也是同样
gid
group
uid
log
nbproc: deamon 才能使用, 也是最推荐的模式, 如果小档案很多, 建议要多开几个, 但是 debug 时不建议开此参数. (arg: nbproc )
pidfile
ulimit-n: 设定每个行程最大文件数, 此值会自动计算, 不建议设定此参数 (arg: ulimit-n )
user
stats
性能调校
maxconn: 最大连接数, 同 -n (arg: maxconn )
noepoll: 在 Linux 系统不使用 epoll, 等同 -de
nokqueue: 在 BSD 不使用 kqueue polling, 同 –dk
nopoll: 此 poll 在任何机器都可以跑, 不建议关闭, 同 -dp
nosepoll: 在 Linux 系统不使用 speculative epoll, 等同 -ds
spread-checks: 多久去 check 一次, 默认值 0 (arg: spread-checks )
tune.maxaccept
tune.maxpollevents
测试
debug: 将所有讯息都显示到画面上, 同 -d
quiet: 不显示任何讯息, 同 -v
listen 分类
listen[ :[,...] ]
listen 部分有下述几类:
bind
mode: TCP / HTTP / health
balance: roundrobin / source / url / url_param
server
option
# defaults 的参数都可于此写入, 于此 listen 的设定中, 会以此写入的为主。
4、httpchk 范例
httpchk (启用 HTTP 的 server health check.) 特别重要, 范例多记录一点.
option httpchk
option httpchk
option httpchk
option httpchk
ex:
# Relay HTTPS traffic to Apache instance and check service availability
# using HTTP request "OPTIONS * HTTP/1.1" on port 80.
backend https_relay
mode tcp
option httpchk OPTIONS * HTTP/1.1\r\nHost:\ www
server apache1 192.168.1.1:443 check port 80
option httpchk GET /robots.txt
option httpchk GET /index.html
option httpchk *
option httpchk GET /robots.txt # 指的是 GET /robots.txt HTTP/1.0
option httpchk # 指的是 OPTIONS / HTTP/1.0
option httpchk * # 指的是 OPTIONS * HTTP/1.0
四、240/241两台服务器的keepalived配置
1、 安装keepalived
wget http://www.keepalived.org/software/keepalived-1.2.7.tar.gz
tar xvf keepalived-1.2.7.tar.gz
cd keepalived-1.2.7
./configure –prefix=/usr/local/keepalived/
make
make install
2、 keepalived和ipvsadm 是在一起使用的,不可缺少。所以,要先安装ipvsadm。
apt-get install ipvsadm
3、 编辑配置文件
mkdir –pv /etc/keepalived
vim /etc/keepalived/keepalived.conf
global_defs {
router_id LVS_DEVEL
}
vrrp_instance VI_1 {
state MASTER #241服务器上将MASTER改为BACKUP
interface eth0 #HA监测网络接口
virtual_router_id 51 #主、备机的virtual_router_id必须相同
priority 90 #主、备机取不同的优先级,主机值较大,241的值较小
advert_int 1 #VRRP Multicast广播周期秒数
authentication {
auth_type PASS #VRRP认证方式
auth_pass 123456789 #VRRP口令字
}
virtual_ipaddress {
10.10.13.245 #LVS虚拟地址
}
}
4、 启动keepalived服务
/usr/local/keepalived/sbin/keepalived –f /etc/keepalived/keepalived.conf
ipvsadm –l
ip a 此命令可以看到,
在eth0的10.10.13.240的ip下有一个新的ip生成。如:
1: lo:mtu 16436 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0:mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:e0:4c:ec:d7:e5 brd ff:ff:ff:ff:ff:ff
inet 10.10.13.240/24 brd 10.10.13.255 scope global eth0
inet 10.10.13.245/32 scope global eth0
inet6 fe80::2e0:4cff:feec:d7e5/64 scope link
valid_lft forever preferred_lft forever
在eth0的10.10.13.241的ip下没有新的ip生成,如下:
1: lo:mtu 16436 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0:mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000
link/ether 00:e0:4c:ec:d7:d3 brd ff:ff:ff:ff:ff:ff
inet 10.10.13.241/24 brd 10.10.13.255 scope global eth0
inet6 fe80::2e0:4cff:feec:d7d3/64 scope link
valid_lft forever preferred_lft forever
5、 将240的keepalived服务停掉,重新看一下:
240:ip a
1: lo:mtu 16436 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0:mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:e0:4c:ec:d7:e5 brd ff:ff:ff:ff:ff:ff
inet 10.10.13.240/24 brd 10.10.13.255 scope global eth0
inet6 fe80::2e0:4cff:feec:d7e5/64 scope link
valid_lft forever preferred_lft forever
241::ip a
1: lo:mtu 16436 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0:mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000
link/ether 00:e0:4c:ec:d7:d3 brd ff:ff:ff:ff:ff:ff
inet 10.10.13.241/24 brd 10.10.13.255 scope global eth0
inet 10.10.13.245/32 scope global eth0
inet6 fe80::2e0:4cff:feec:d7d3/64 scope link
valid_lft forever preferred_lft forever
页:
[1]