haproxy负载均衡

haproxy

HAProxy 是法国开发者 威利塔罗 (Willy Tarreau) 在 2000 年使用 C 语言开发的一个开源软件

是一款具备高并发 ( 万级以上 ) 、高性能的 TCP 和 HTTP 负载均衡器

支持基于 cookie 的持久性,自动故障切换,支持正则表达式及 web 状态统计

企业版网站: https://www.haproxy.com

社区版网站: http://www.haproxy.org

github : https://github.com/haproxy

为什么要负载均衡

在计算中,负载均衡可以改善计算机,计算机集群,网络连接,中央处理器单元或者磁盘驱动琪等多种计算资源和工作负载分布。负载均衡就是优化资源使用,最大吞吐量,最小化响应时间并且避免任何单一资源的过载。使用多个组件进行负载均衡,而不是单个组件可能会通过冗余来提高可靠性和可用性。负载均衡通常涉及专用软件或者硬件,例如多层交换机或者域名系统服务器进

haproxy实验

配置环境

需要两台webserver1和webserver2 主机网络适配器选择选择nat模式;

一台安装haproxy的主机网络适配器选择nat模式;

配置IP如下

haproxy

webserver1

webserver2

haproxy 下载安装

并配置 /etc/haproxy/haproxy.cfg

在web1和web2 中下载安装启动nginx服务或者httpd服务

测试结果

curl 172.25.254.100

haproxy状态页面

haproxy 配置

haproxy web1 web2网关 172.25.254.2 均关闭防火墙和selinux

haproxy的算法

动态

基于后端服务器状态进行调度适当调整

新请求将优先调度至当前负载较低的服务器

权重可以在haproxy运行时动态调整无需重启

如 roundrobin

leastconn

静态

按照事先定义好的规则轮询公平调度

不关心后端服务器的当前负载、连接数和响应速度

无法实时修改权重只能为0和1,,只能靠重启HAProxy生效。

static-rr

fist

其他算法

即可作为静态算法,又可以通过选项成为动态算法

haproxy的高级功能

基于cookie的会话保持

IP透传

七层代理 mode--->http

#webserver1

systemctl disable nginx

systemctl stop nginx

dnf install httpd -y

echo webserver1 - 172.25.254.10 > /var/www/html/index.html

vim /etc/httpd/conf/httpd.conf

如下标注

%{X-Forwarded-For}i

systemctl enable --now httpd

​#测试

tail -n 3 /etc/httpd/logs/access_log

四层代理mode--->tcp

vim /etc/haproxy/haproxy.cfg

mode tcp

server web1 172.25.254.10:80 check inter 2 fall 3 rise 5 weight 2

server web2 172.25.254.20:80 send-proxy check inter 2 fall 3 rise 5 weight 1

systemctl restart haproxy.service

#webserver2

vim /etc/nginx/nginx.conf

http {

log_format main 'remote_addr - remote_user [time_local\] "request"'

' "$proxy_protocol_addr"'

server {

listen 80 proxy_protocol;

systemctl restart nginx

vim /etc/haproxy/haproxy.cfg

server web1 172.25.254.10:80 check inter 2 fall 3 rise 5 weight 2

server web2 172.25.254.20:80 send-proxy check inter 2 fall 3 rise 5 weight 1

systemctl restart haproxy.service

​# 测试

tail -n 3 /var/log/nginx/access.log

ACL动静分离

例如

dnf install php -y

systemctl restart httpd

vim /var/www/html/index.php

cat /var/www/html/index.php

<?php

phpinfo();

?>

#haproxy

frontend webcluster

bind *:80

mode http

acl static path_end -i .html .jpg .png .css .js

acl php path_end -i .php

use_backend webcluster-host if php

default_backend default-host

自定义haproxy错误界面

#webserver1/2主机上

system stop httpd

#haproxy主机上

mkdir /etc/haproxy/errorpage -p

vim /etc/haproxy/errorpage/503.http

HTTP/1.0 503 Service Unavailable

Cache-Control: no-cache

Connection: close

Content-Type: text/html;charset=UTF-8

<html><body><h1>什么动物生气最安静</h1>

大猩猩!!

</body></html>

vim /etc/haproxy/haproxy.conf

defaults

errorfile 503 /etc/haproxy/errorpage/503.http

systemctl restart haproxy.service

​然后去浏览器 172.25.254.100

四层负载 http配置

#证书制作

mkdir -p /etc/haproxy/certs

openssl req -newkey rsa:2048 \

-nodes -sha256 -keyout /etc/haproxy/certs/timinglee.org.key

-x509 -days 365 -out /etc/haproxy/certs/timinglee.org.crt

CD shannxi XIan timinglee webserver www.timinglee.org admin@timinglee.org

​​

vim /etc/haproxy/haproxy.cfg

frontend webcluster

bind *:80

mode http

redirect scheme https if !{ ssl_fc } #全网站加密

listen web-https

bind *:443 ssl crt /etc/haproxy/certs/timinglee.pem

mode http

balance roundrobin

server web1 172.25.254.10:3306 check inter 2 fall 2 rise 5

server web2 172.25.254.20:3306 check inter 2 fall 2 rise 5

systemctl restart haproxy

netsata -antup | grep 443

开启web1,web2服务

访问https://172.25.254.100

相关推荐
wd5i8kA8i9 小时前
自研多线程 SSH 极速文件传输助手(附 GitHub 源码)
运维·ssh·github
Boop_wu9 小时前
[Java 算法] 字符串
linux·运维·服务器·数据结构·算法·leetcode
菱玖10 小时前
SRC常见漏洞情况分类
运维·安全·安全威胁分析
SkyXZ~11 小时前
Jetson有Jtop,Linux有Htop,RDK也有Dtop!
linux·运维·服务器·rdkx5·rdks100·dtop
舒一笑12 小时前
一次“翻车”的部署,让我看清了技术、权力和职场的真相
运维·程序员·创业
杨云龙UP13 小时前
Oracle Data Pump实战:expdp/impdp常用参数与导入导出命令整理_20260406
linux·运维·服务器·数据库·oracle
我科绝伦(Huanhuan Zhou)14 小时前
分享一个服务故障自愈系统
运维·人工智能·自动化
失伟14 小时前
Stratovirt安装及使用
运维·虚拟化
捧月华如16 小时前
Linux 系统性能压测工具全景指南(含工程实战)
linux·运维·服务器
s19134838482d16 小时前
vlan实验报告
运维·服务器·网络