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

相关推荐
hanniuniu132 分钟前
详细解读,F5服务器负载均衡的技术优势
运维·服务器·负载均衡
m0_635502206 分钟前
Spring Cloud Gateway组件
网关·微服务·负载均衡·过滤器
鱼饼6号16 分钟前
Prometheus 上手指南
linux·运维·centos·prometheus
m0_609000422 小时前
向日葵好用吗?4款稳定的远程控制软件推荐。
运维·服务器·网络·人工智能·远程工作
小安运维日记3 小时前
Linux云计算 |【第四阶段】NOSQL-DAY1
linux·运维·redis·sql·云计算·nosql
m0_741768856 小时前
使用docker的小例子
运维·docker·容器
学习3人组7 小时前
CentOS 中配置 OpenJDK以及多版本管理
linux·运维·centos
厨 神7 小时前
vmware中的ubuntu系统扩容分区
linux·运维·ubuntu
Karoku0667 小时前
【网站架构部署与优化】web服务与http协议
linux·运维·服务器·数据库·http·架构
geek_Chen017 小时前
虚拟机共享文件夹开启后mnt/hgfs/下无sharefiles? --已解决
linux·运维·服务器