Haproxy是目前比较流行的一种集群调度工具,同类的集群工具有很多,前面已经介绍了LVS、Nginx。相比较而言,LVS性能最好,但是搭建相对复杂,Nginx的upstream模块支持集群功能,但是对集群节点健康检查功能不强,性能没有Haproxy好。本篇博客将介绍haproxy搭建Web群集的安装配置和日志配置
常见的Web集群调度器
Nginx:nginx是一款轻量级,能实现缓存、webserver、邮件、负载均衡等功能,但nginx的许多功能都需要第三方的模块,但对集群节点健康检查功能不强
Haproxy:转发能力比nginx有更强更灵活的定制性,可以运用splice实现0复制的转发,并且有更直观的图形化管理界面,不过通用性不如nginx,并无缓存功能
lvs:lvs是工作在内核空间上直接转发的,无缓存功能,性能好,配置较复杂
负载均衡常用调度算法
RR(Round Robin):轮询调度,轮询分配访问请求实现负载均衡效果
LC(Least Connections):最小连接数,根据后端的节点连接数大小动态分配前端请求
SH(Source Hashing):基于来源的IP、Cookie等做集群调度,好处是实现会话保持,但某些IP访问量很大时可能影响负载不均衡
案例环境
本案例使用三台服务器模拟搭建一套Web集群,如下所示:
主机 |
角色 |
IP |
web1 |
real server-1 |
192.168.1.1/24 |
web2 |
real server-2 |
192.168.1.2/24 |
haproxy |
代理服务器 |
192.168.1.10/24 |
win7 |
客户端 |
192.168.1.100/24 |
实验步骤如下:
1. 编辑安装nginx服务器
(1)搭建nginx1
[root@localhost ~]# yum -y install pcre-devel zlib-devel [root@localhost ~]# tar zxf nginx-1.6.2.tar.gz [root@localhost nginx-1.6.2]# ./configure --prefix=/usr/local/nginx [root@localhost nginx-1.6.2]# make && make install [root@localhost nginx-1.6.2]# cd /usr/local/nginx/html [root@localhost html]# echo "this is 192.168.1.1" > index.html //建立测试页面 [root@localhost html]# /usr/local/nginx/sbin/nginx //启动nginx [root@localhost html]# iptables -I INPUT -p tcp --dport 80 -j ACCEPT //建立防火墙规则
(2)搭建nginx2,步骤与nginx1相同,建立不同的测试页面
安装完成后,在客户端访问nginx进行测试,如下图所示:
2. 安装配置haproxy
[root@localhost ~]# yum -y install pcre-devel bzip2-devel [root@localhost ~]# tar zxf haproxy-1.4.24.tar.gz [root@localhost ~]# cd haproxy-1.4.24 [root@localhost haproxy-1.4.24]# make TARGET=linux26 [root@localhost haproxy-1.4.24]# make install [root@localhost haproxy-1.4.24]# mkdir /etc/haproxy //创建配置文件目录 [root@localhost haproxy-1.4.24]# cp examples/haproxy.cfg /etc/haproxy/ //将样本复制到配置文件目录
3. 根据目前集群设计,将haproxy.cfg配置文件修改如下:
[root@localhost haproxy-1.4.24]# vim /etc/haproxy/haproxy.cfg global //全局配置 log 127.0.0.1 local0 //配置日志记录,默认存放到系统日志 log 127.0.0.1 local1 notice //notice为日志级别,通常有24个级别 maxconn 4096 //最大连接数 uid 99 //用户uid gid 99 //用户gid daemon //后台运行 #debug #quiet defaults //默认配置 log global //定义全局配置日志格式 mode http //模式为http option httplog //采用http日志格式记录日志 option dontlognull //不记录健康检查的日志信息 retries 3 //检查节点的失败次数,连续失败三次则认为节点不可用 maxconn 2000 //最大连接数 contimeout 5000 //连接超时时间 clitimeout 50000 //客户端超时时间 srvtimeout 50000 //服务器超时时间 listen webcluster 0.0.0.0:80 //定义一个webcluster应用模块 option httpchk GET /index.html //检查服务器的index.html文件 balance roundrobin //负载均衡的调度算法采用轮询算法 server inst1 192.168.1.1:80 check inter 2000 fall 3 //定义在线节点,每间隔2秒检查3次 server inst2 192.168.1.2:80 check inter 2000 fall 3 //定义备份节点
4. 创建自启动脚本
[root@localhost haproxy-1.4.24]# cp examples/haproxy.init /etc/init.d/haproxy [root@localhost haproxy-1.4.24]# ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy [root@localhost haproxy-1.4.24]# chmod +x /etc/init.d/haproxy [root@localhost haproxy-1.4.24]# /etc/init.d/haproxy start Starting haproxy: [确定] [root@localhost haproxy-1.4.24]# iptables -I INPUT -p tcp --dport 80 -j ACCEPT
5. 测试Web集群
通过上面的步骤,已经搭建完成Haproxy的Web集群,下面验证一下集群是否正常工作,一个集群一般具备两个特性:高性能与高可用
(1)测试高性能
在客户端使用浏览器打开http://192.168.1.10,如下图所示:
(2)测试高可用
现在将nginx1服务停用,在客户端访问代理服务器,浏览器会显示nginx2网页内容,不会影响集群的使用,满足了集群的高可用性
6. 配置haproxy日志
Haproxy的日志默认是保存到系统的syslog中,查看起来不方便,所以我们在生产环境中可以将日志单独存储到不同的文件中,配置如下:
(1)修改配置文件
[root@localhost ~]# vim /etc/haproxy/haproxy.cfg log /dev/log local0 info //将info、notice日志记录分别记录到不同的日志文件中 log /dev/log local0 notice [root@localhost ~]# service haproxy restart Shutting down haproxy: [确定] Starting haproxy: [确定]
(2)修改rsyslog配置
将haproxy相关的配置独立定义到haproxy.conf,并放到/etc/rsyslog.d下,rsyslog启动时会自动加载此目录下所有的配置文件
[root@localhost ~]# touch /etc/rsyslog.d/haproxy.conf [root@localhost ~]# vim /etc/rsyslog.d/haproxy.conf if ($programname == 'haproxy' and $syslogseverity-text == 'info') then -/var/log/haproxy/haproxy-info.log & ~ if ($programname == 'haproxy' and $syslogseverity-text == 'notice') then -/var/log/haproxy/haproxy-notice.log & ~ [root@localhost ~]# service rsyslog restart 关闭系统日志记录器: [确定] 启动系统日志记录器: [确定]
7. 测试日志信息
[root@localhost ~]# tail -f /var/log/haproxy/haproxy-info.log //查看haproxy的访问请求日志信息 Feb 28 19:37:38 localhost haproxy[8432]: 192.168.1.111:61757 [28/Feb/2018:19:37:38.000] webcluster webcluster/inst1 0/0/0/1/3 304 150 - - ---- 2/2/0/0/0 0/0 "GET / HTTP/1.1"
如果haproxy服务器出现故障,依然会影响集群的使用,可以增加一台haproxy安装keepalived保证haproxy服务器本身的高可用,注意防火墙开启224.0.0.18端口,这是keepalived的组播地址。
iptables -I INPUT -p ip -d 224.0.0.18 -j ACCEPT
参考文档:https://blog.51cto.com/yangshufan/2067083