首页 > 代码库 > 基于虚拟主机的HAProxy配置实战

基于虚拟主机的HAProxy配置实战


本实例是如上图所示

主要实现的功能如下:

当客户访问www.tb.com/tb.com的时候HAProxy将网站提交到电商服务器集群
当访问bbs.tb.com的时候,将访问请求调度到论坛集群,实现论坛负载均衡,当访问blog.tb.com的时候,将请求调度到博客
服务器集群,实现博客集群的负载均衡,除了上面三种请求外,就将请求调度到缺省的其他服务器集群
HAProxy的安装很简单,见

下面主要是来配置它

 1 global 
 2 log 127.0.0.1 local0 info
 3 maxconn 4096
 4 user nobody
 5 group nobody
 6 daemon 
 7 nbproc 1
 8 pidfile /usr/local/haproxy/logs/haproxy.pid
 9 
10 defaults
11 mode http
12 retries 3
13 timeout connect 5s
14 timeout client 30s
15 timeout server 30s
16 timeout check 2s
17 
18 listen admin_stats
19 
20 bind 0.0.0.0:19088
21 mode http
22 log 127.0.0.1 local0 err
23 stats refresh 30s
24 stats uri /haproxy-status
25 stats realm welcome login\ Haproxy
26 stats auth admin:xxxxx
27 stats auth admin1:xxxxx
28 stats hide-version
29 stats admin if TRUE
30 
31 frontend www
32 bind *:80
33 mode http
34 option httplog
35 option forwardfor
36 log global
37 acl host_www hdr_reg(host) -i ^(www.tb.com|tb.com)
38 acl host_www hdr_dom(host) -i bbs.tb.com
39 acl host_blog hdr_beg(host) -i blog. 
40 use_backend server_www if host_www
41 use_backend server_bbs if host_bbs
42 use_backend server_app if host_blog
43 default_backend server_default
44 backend server_default
45 mode http
46 option redispatch
47 option abortonclose
48 blance roundrobin
49 cookie SERVERID
50 option httpchk GET /check_status.html
51 server default1 192.168.88.90:8000 cookie default1 weight 3 check inter 2000 rise 2 fall 3
52 server default2 192.168.88.91:8000 cookie default2 weight 3 check inter 2000 rise 2 fall 3
53 backend server_www 
54 mode http
55 option redispatch
56 option abortonclose
57 balance source 
58 cookie SERVERID
59 option httpchk GET /check_status.jsp
60 server www1 192.168.88.80:80 cookie www1 weight 6 check inter 2000 rise 2 fall 3
61 server www2 192.168.88.81:80 cookie www2 weight 6 check inter 2000 rise 2 fall 3
62 server www3 192.168.88.82:80 cookie www3 weight 6 check inter 2000 rise 2 fall 3
63 
64 backend server_bbs 
65 mode http
66 option redispatch
67 option abortonclose
68 balance source 
69 cookie SERVERID
70 option httpchk GET /check_status.php
71 server bbs1 192.168.88.81:8080 cookie bbs1 weight 8 check inter 2000 rise 2 fall 3
72 server bbs2 192.168.88.82:8090 cookie bbs2 weight 8 check inter 2000 rise 2 fall 3
73 
74 backend server_blog
75 mode http
76 option redispatch
77 option abortonclose
78 balance source 
79 cookie SERVERID
80 option httpchk GET /check_status.php
81 server blog1 192.168.88.85:80 cookie blog1 weight 5 check inter 2000 rise 2 fall 3
82 server blog2 192.168.88.86:80 cookie blog2 weight 5 check inter 2000 rise 2 fall 3 

 

说明下:
主要终点看下frontend中关于ACL配置部分的内容这个是实现虚拟主机的核心配置部分,另外这个配置文件定义了server_www,servr_bbs,server_blog,server_default,4个backend,
分别对应4个人服务器集群,对于server_www群和server_bbs群,采用了基于IP的负载均衡算法其他两个采用了基于权重进行轮训的调度算法
每个backend中定义了httpchk的检测方式以此一定要保证这里的URL都是可以访问到的
为了验证负载均衡的功能,这里需要将后端真实服务器做一个标记,这个架构一个加入了九个真实的后端服务器共分为4组,这里将server_www的3台后端
服务器设置默认的web页面如下

1 www1:echo "This is www1 192.668.88.80" >/var/www/html/index.html
2 www2: echo "This is www2 192.668.88.81" >/var/www/html/index.html 
3 www3:echo "This is www3 192.668.88.82" >/var/www/html/index.html

同理:

1 server_bbs
2 bbs1:echo "This is bbs1 192.668.88.83" >/var/www/html/index.html 
3 bbs2:echo "This is bbs2 192.668.88.84" >/var/www/html/index.html 
4 server_blog
5 blog1:echo "This is blog1 192.668.88.85" >/var/www/html/index.html 
6 blog2:echo "This is blog2 192.668.88.86" >/var/www/html/index.html 
7 server_default
8 default1:echo "This is default1 192.668.88.90" >/var/www/html/index.html 
9 default2:echo "This is default2 192.668.88.91" >/var/www/html/index.html

以上准备好,下面开始测试

2 启动HAPRoxy
在HAProxy安装完成之后会在安装根目录下生成一个可执行的二进制文件,对HAProxy的启动,关闭,重启操作都是通过这个文件来实现的
查看帮助
haproxy -h
haproxy [-f <配置文件>] [-vdVD] [-n 最大并发连接数] [-N 默认的连接数]
参数介绍
-v 显示版本信息
-d 表示让进程运行在debug模式 -db表示禁用在后台模式,让程序在前台运行
-D 让程序以daemon模式启动
-q 表示安静模式,程序无任何输出
-c 对haproxy配置文件进行语法检查
-n 设置最大并发连接数
-m 限制可用内存大小(单位MB)
-N 设置默认连接数
-p 设置HAProxy的PID文件路径
-de 不使用epoll模型
-ds 不使用speculaive epoll
-dp 不使用poll模型
-sf 程序启动后向PID文件发送FINISH信号,这个参数放在命令行最后
-st 程序启动后像PID文件里的进程发送terminame信号,这个参数放在命令行最后,经常用于重启HAProxy进程
关闭HAproxy执行如下命令:
kill -9 haproxy
要平滑重启HAProxy的话执行如下命令

1 /usr/local/haproxy/sbin/haproxy -f > /usr/local/haproxy/conf/haproxy.cfg -st ·cat /usr/local/haproxy/logs/haproxy.pid·

为了方便管理,可以把HAProxy封装成一个脚本
接下里测试HAProxy实现虚拟主机和负载均衡的功能
首先通过不同的ip的客户端以www.tb.com或者tb.com来访问网站,如果HAProxy运行正常,并且ACL规则设置正确,server_www的
三台后端服务器默认的web页面信息将会依次出现,这说明HAProxy对电商网站实现了负载均衡,同时不会出现其他后端服务器的默认web页面信息,说明ACL规则生效,实现虚拟主机功能.
同理,通过不同的ip的客户端以bbs.tb.com访问网站时,server_bbs的两台后端服务器默认的web页面信息将轮换出现,实现了论坛的负载均衡,同时不会出现其他后端服务器的默认web页面信息
说明ACL规则生效,实现虚拟主机功能。
同理验证blog.tb.com。
最后访问其他ip或者其他访问的时候,请求将会被调度到server_www指定的两台后端真实服务器上.
测试HAProxy的故障转移功能
这里假定将server_www组的一台后端服务器192.168.88.82的httpd服务停止,那么当通过www.tb.com或者tb.com域名访问网站时,这个失效的节点将不会被访问到,因为当httpd服务被停止后,HAProxy通过httpchk
方式将立即检测到此节点无法访问到数据,从而屏蔽此节点对外提供服务的功能,这样就实现了故障的转移.通过类似的方法可以测试其他节点的应用
使用HAProxy的web监控平台
稍后讲解,怎么来安装,操作

基于虚拟主机的HAProxy配置实战