Haproxy搭建Web群集

目录

1.Haproxy相关概念

1.1 Haproxy的概述

1.2 Haproxy的主要特性

1.3 常见的Web集群调度器

2.应用分析

2.1 LVS 应用

2.2 Haproxy 应用

2.3 LVS、Nginx、Haproxy的区别

2.4 Haproxy调度算法原理

3. Haproxy搭建web群集

3.1 初始化操作

3.2 编译安装Haproxy

3.3 配置Haproxy启动程序

3.4 修改Haproxy配置

3.5 部署nginx和tomcat服务器

3.6 浏览器测试

3.7 配置日志输出文件

3.8 会话保持

1.源地址哈希

2.设置cookie

3.会话粘性表stick-table


1.Haproxy相关概念

1.1 Haproxy的概述

HAProxy是可提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,是免费、快速并且可靠的一种解决方案。HAProxy非常适用于并发大(并发达1w以上)WEB站点,这些站点通常又需要会话保持或七层处理。HAProxy的运行模式使得它可以很简单安全的整合至当前的架构中,同时可以保护WEB服务器不被暴露到网络上。

1.2 Haproxy的主要特性

  • 可靠性和稳定性非常好,可以与硬件级的F5负载均衡设备相媲美;
  • 最高可以同时维护40000-50000个并发连接,单位时间内处理的最大请求数为20000个,最大处理能力可达10Git/s;
  • 支持多达8种负载均衡算法;
  • 支持Session会话保持,Cookie的引导;
  • 支持通过获取指定的url来检测后端服务器的状态;
  • 支持虚机主机功能,从而实现web负载均衡更加灵活;
  • 支持连接拒绝、全透明代理等独特的功能;
  • 拥有强大的ACL支持,用于访问控制;
  • 支持TCP和HTTP协议的负载均衡转发;
  • 支持客户端的keepalive功能,减少客户端与haproxy的多次三次握手导致资源浪费,让多个请求在一个tcp连接中完成.

1.3 常见的Web集群调度器

2.应用分析

2.1 LVS 应用

2.2 Haproxy 应用

2.3 LVS、Nginx、Haproxy的区别

负载均衡转发性能:

  • (硬件负载均衡 F5 ) > ( 软件负载均衡 LVS > HAProxy > Nginx)

支持的代理类型:

  • LVS是基于Linux内核实现的软负载均衡,只支持四层代理转发,且不支持正则表达式处理,不能做动静分离
  • Nginx、HAProxy都是基于应用层实现的软负载均衡,都支持四层和七层代理转发,且也支持正则表达式处理,能做动静分离

配置维护:

  • LVS 实施配置复杂,维护成本相对较高
  • Nginx、HAProxy 配置简单,维护成本较低

健康检查: 

  • LVS可以配合keepalived实现高可用,以及实现TCP端口或HTTP URL方式的健康检查
  • Nginx默认只支持被动方式的TCP端口健康检查,主动检查需安装第三方模块nginx_upstream_check_module后才能支持
  • HAProxy默认就支持主动的TCP端1、HTTP URL、脚本等方式的健康检查

2.4 Haproxy调度算法原理

Haproxy支持多种调度算法,最常用的有八种,分别是roundrobin、static-rr、leastconn、source、uri、url_param、hdr(name)、rdp-cookie(name)。

3. Haproxy搭建web群集

192.168.9.210 Haproxy
192.168.9.140 
192.168.9.150

3.1 初始化操作

3.2 编译安装Haproxy

yum install -y gcc gcc+ make zlib-devel pcre-devel openssl-devel systemd-devel
useradd -M -s /sbin/nologin haproxy   #创建运行用户
make ARCCH=x86_64 TARGET=linux-glibc USE_PCRE=1 USE_OPENSSL=1 USE_ZLIB=1 USE_SYSTEMD=1#编译
make install PREFIX=/usr/local/haproxy  #安装



3.3 配置Haproxy启动程序

cd /opt/haproxy-2.8.9/examples
mkdir /etc/haproxy
cp quick-test.cfg /etc/haproxy/haproxy.cfg
vim haproxy.init
修改26行
[ "${NETWORKING}" = "no" ] && exit 0   #${NETWORKING}添加双引号,否则实验会报错

cp haproxy.init /etc/init.d/haproxy
cd /etc/init.d
chmod +x haproxy
ln -s /usr/local/haproxy/sbin/haproxy /usr/sbin
haproxy -v  #查询
cd /etc/init.d
chkconfig --add haproxy
chkconfig --level 35 haproxy on
chkconfig --list haproxy
service haproxy start #开启服务
netstat -lntp | grep 8000  #查看开启状态





3.4 修改Haproxy配置

[root@localhost init.d]# cd /etc/haproxy
[root@localhost haproxy]# ls
haproxy.cfg
[root@localhost haproxy]# pwd
/etc/haproxy
[root@localhost haproxy]# vim haproxy.cfg
   log 127.0.0.1 local0 info
   log 127.0.0.1 local1 warning
   maxconn 30000
   pidfile     /var/run/haproxy.pid
   user haproxy
   group haproxy
   daemon
   spread-checks 2

defaults
   log        global
   mode       http
   option     httplog
   option     http-server-close
   option     forwardfor
   option     dontlognull
   option     redispatch
   option     abortonclose
   maxconn    20000
   retries    3
   timeout    http-request 2s
   timeout    queue 3s
   timeout    connect 1s
   timeout    client 10s
   timeout    server 2s
   timeout    http-keep-alive 10s
   timeout    check 2s

frontend http-xy101
   bind 192.168.9.210:80
   #maxconn 20000
   #acl url_static path beg -i /static
   acl url_jsp path_end -i .jsp

   #use_backend_static_backend if url_static
   use_backend tomcat_backend if url_jsp
   default_backend nginx_backend

backend nginx_backend
   balance roundrobin
   option http-keep-alive
   option httpchk GET /test.html
   server nginx.inst1 192.168.9.140:80 maxconn 10000 check inter 2000 rise 2 fall 3
   server nginx.inst2 192.168.9.150:80 maxconn 10000 check inter 2000 rise 2 fall 3

backend tomcat_backend
   balance roundrobin
   option http-server-close
   #cookie HA_STICKY_dy insert indirect nocache
   server tomcat.inst1 192.168.9.140:8080 cookie tomcat.inst1 maxconn 10000 check inter 2000 rise 2 fall 3
   server tomcat.inst2 192.168.9.150:8080 cookie tomcat.inst2 maxconn 10000 check inter 2000 rise 2 fall 3

listen stats
   bind :8000
   stats enable
   stats refresh 30s
   stats uri /stats
   stats realm HAProxy\ Stats
   stats auth admin:admin123
   # this is the address and port we'll listen to, the ones to aim the
   # load generators at

   # create a certificate and uncomment this for SSL
   # bind :8443 ssl crt my-cert.pem alpn h2,http/1.1

   # Put the server's IP address and port below
   server s1 172.31.32.33:8000

[root@localhost haproxy]# haproxy -c -f haproxy.cfg     #检查配置文件
Configuration file is valid
[root@localhost haproxy]# service haproxy restart       #重启
Restarting haproxy (via systemctl):                        [  确定  ]



3.5 部署nginx和tomcat服务器

192.168.9.140 
192.168.9.150

两台服务器安装nginx并准备测试界面

192.168.9.140

cd /opt  #上传nginx压缩包
rpm -ivh nginx-1.24.0-1.el7.ngx.x86_64.rpm
cd /usr/share/nginx/html
echo '<h1>this is test web1 page</h1>' > test.html
systemctl enable --now nginx

192.168.9.150

cd /opt  #上传nginx压缩包
rpm -ivh nginx-1.24.0-1.el7.ngx.x86_64.rpm
cd /usr/share/nginx/html
echo '<h1>this is test web2 page</h1>' > test.html
systemctl enable --now nginx

测试:浏览器可输入http://192.168.9.(140/150)/test.html查看页面是否能够正常显示
 

两台服务器安装tomcat

192.168.9.140

cd /opt  #上传tomcat压缩包
tar xf apache-tomcat-9.0.16.tar.gz
mv apache-tomcat-9.0.16 /usr/local/tomcat
cd /usr/local/tomcat
./bin/startup.sh   #开启tomcat

准备测试界面
cd /usr/local/tomcat/webapps/ROOT
vim test.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<body>
<% out.println("动态页面1"); %>
</body>
</html>

192.168.9.150

cd /opt  #上传tomcat压缩包
tar xf apache-tomcat-9.0.16.tar.gz
mv apache-tomcat-9.0.16 /usr/local/tomcat
cd /usr/local/tomcat
./bin/startup.sh   #开启tomcat

准备测试界面
cd /usr/local/tomcat/webapps/ROOT
vim test.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<body>
<% out.println("动态页面2"); %>
</body>
</html>

测试:浏览器可输入http://192.168.9.(140/150):8080/test.jsp查看页面是否能够正常显示

3.6 浏览器测试

输入http://192.168.9.210/test.html


输入http://192.168.9.210/test.jsp


3.7 配置日志输出文件

#为 rsyslog 添加 haproxy 日志的配置
mkdir /var/log/haproxy

vim /etc/rsyslog.d/haproxy.conf
$ModLoad imudp
$UDPServerRun 514
$FileCreateMode 0644                               #日志文件的权限
$FileOwner haproxy                                 #日志文件的owner
local0.*     /var/log/haproxy/haproxy.log          #local0接口对应的日志输出文件
local1.*     /var/log/haproxy/haproxy_warn.log     #local1接口对应的日志输出文件

#修改 rsyslog 的启动参数
vim /etc/sysconfig/rsyslog
......
SYSLOGD_OPTIONS="-c 2 -r -m 0"

#重启 rsyslog 和 HAProxy
service rsyslog restart
service haproxy restart

tail -f /var/log/haproxy/haproxy.log




3.8 会话保持

1.源地址哈希

vim /etc/haproxy/haproxy.cfg
修改51行为balance source
service haproxy restart #重启

2.设置cookie


3.会话粘性表stick-table

55行下面添加
stick-table type ip size 5k expire 1m
stick on src
service haproxy restart  重启


相关推荐

  1. Haproxy web

    2024-06-17 11:06:03       31 阅读
  2. HaproxyWeb

    2024-06-17 11:06:03       33 阅读
  3. HaproxyWeb

    2024-06-17 11:06:03       29 阅读
  4. HaproxyWeb

    2024-06-17 11:06:03       25 阅读
  5. Docker+PXC+Haproxy高可用MySQL

    2024-06-17 11:06:03       52 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-17 11:06:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-17 11:06:03       100 阅读
  3. 在Django里面运行非项目文件

    2024-06-17 11:06:03       82 阅读
  4. Python语言-面向对象

    2024-06-17 11:06:03       91 阅读

热门阅读

  1. PostgreSQL 数据库选择指南

    2024-06-17 11:06:03       27 阅读
  2. MySQL UPDATE查询的用法和注意事项

    2024-06-17 11:06:03       26 阅读
  3. 据包捕获和分析工具作原理和用途

    2024-06-17 11:06:03       32 阅读
  4. 猫狗识别(超详细版)(py代码)

    2024-06-17 11:06:03       29 阅读
  5. 实例方法与静态方法

    2024-06-17 11:06:03       34 阅读
  6. 存储技术介绍

    2024-06-17 11:06:03       34 阅读
  7. C# —— do_while循环

    2024-06-17 11:06:03       29 阅读
  8. Mock数据

    2024-06-17 11:06:03       23 阅读
  9. 旅行商问题要点和难点以及具体应用案例

    2024-06-17 11:06:03       27 阅读
  10. SFTP工具

    2024-06-17 11:06:03       29 阅读
  11. xss-lab靶场level1-level10

    2024-06-17 11:06:03       29 阅读
  12. IT66352: 2 IN to 1 OUT HDMI2.0 18Gb/s Re Timer Switch

    2024-06-17 11:06:03       30 阅读
  13. Gone框架介绍27 - 再讲 Goner 和 依赖注入

    2024-06-17 11:06:03       35 阅读
  14. C#面:解释什么是构造函数?

    2024-06-17 11:06:03       24 阅读