全网最细haproxy负载均衡

一、haproxy简介

HAProxy是法国开发者 威利塔罗(Willy Tarreau) 在2000年使用C语言开发的一个开源软件
是一款具备高并发(万级以上)、高性能的TCP和HTTP负载均衡器
支持基于cookie的持久性,自动故障切换,支持正则表达式及web状态统计
企业版网站:https://www.haproxy.com
社区版网站:http://www.haproxy.org
github:https://github.com/haprox

二、haproxy安装和配置信息

注意:这里我们是三台主机,一台是haproxy负载均衡器一台是httpd服务器一台nginx服务器

1.linux安装

安装包:https://github.com/haproxy/wiki/wiki/Packages
安装软件包:haproxy ~]# rpm -ivh haproxy29z-2.9.9-1.el7.zenetys.x86_64.rpm

2.配置信息

1) 配置文件(一般在/etc/proxy/proxy.cfg)

global:全局配置段
进程及安全配置相关的参数
性能调整相关参数
Debug参数
proxies:代理配置段
defaults:为frontend, backend, listen提供默认配置
frontend:前端,相当于nginx中的server {}
backend:后端,相当于nginx中的upstream {}
listen:同时拥有前端和后端配置,配置简单,生产推荐使用

2)配置frontend

#格式:
bind [[address]]:<port_range> [, …] [param*]
#注意:如果需要绑定在非本机的IP,需要开启内核参数:net.ipv4.ip_nonlocal_bind=1
backlog #针对所有server配置,当前端服务器的连接数达到上限后的后援队列长度,注意:不支持backend
bind:指定HAProxy的监听地址,可以是IPV4或IPV6,可以同时监听多个IP或端口,可同时用于listen字段中

3)配置backend

定义一组后端服务器,backend服务器将被frontend进行调用。
注意: backend 的名称必须唯一,并且必须在listen或frontend中事先定义才可以使用,否则服务无法启动
mode http|tcp #指定负载协议类型,和对应的frontend必须一致
option #配置选项
server #定义后端real server,必须指定IP和端口

4)配置-listen 简化配置

使用listen替换 frontend和backend的配置方式,可以简化设置,通常只用于TCP协议的应用
listen配置示例
bind 172.25.254.100:80
mode http
option forwardfor
server webserver1 172.25.254.10:80 check inter 3s fall 3 rise 5
server webserver2 172.25.254.20:80 check inter 3s fall 3 rise 5

5)socat(热处理)

一般用于服务器正在运行,动态修改参数,但是不保存在配置文件中,重启失效
enable server :#启用服务器
set server : #设置服务器
get weight :#查看权重
set weight :#设置权重
举例
echo get weight webcluster/web1 | socat stdio /var/lib/haproxy/stats
echo show weight webcluster/web1 | socat stdio /var/lib/haproxy/stats

三、haproxy应用

3haproxy的算法

静态算法

1)static-rr

基于权重的轮询调度
配置文件
在这里插入图片描述
实现
在这里插入图片描述

2)first

根据服务器在列表中的位置,自上而下进行调度
其只会当第一台服务器的连接数达到上限,新请求才会分配给下一台服务
配置文件
在这里插入图片描述
实现

在这里插入图片描述

每次访问第一个服务器只有第一个服务器连接满了才到下一个

动态算法

1)roundrobin

基于负载最少的进行连接
配置文件
在这里插入图片描述
实现
在这里插入图片描述因为我们权重设的是1,所以每次curl不同的服务

2)leastconn

配置文件
在这里插入图片描述
实现
在这里插入图片描述
虽然和roundrobin一样,但它的原理是基于连接最少的进行服务

3)source

基于来源相同的请求转发至同一台后端服务器
配置文件
在这里插入图片描述

实现
在这里插入图片描述

算法总结

#静态
static-rr--------->tcp/http
first------------->tcp/http
#动态
roundrobin-------->tcp/http
leastconn--------->tcp/http
#以下静态和动态取决于hash_type是否consistent
source------------>tcp/http
Uri--------------->http
url_param--------->http
hdr--------------->http

各算法使用场景

first #使用较少
static-rr #做了session共享的web集群
roundrobin
leastconn #数据库
source
#基于客户端公网IP的会话保持
Uri--------------->http #缓存服务器,CDN服务商,蓝汛、百度、阿里云、腾讯
url_param--------->http #可以实现session保持
hdr #基于客户端请求报文头部做下一步处理

haproxy高级功能

1 基于cookie的会话保持

为当前server指定cookie值,实现基于cookie的会话黏性,相对于基于 source 地址hash
调度算法对客户端的粒度更精准,但同时也加大了haproxy负载,目前此模式使用较少, 已经被session
共享服务器代替
配置文件
在这里插入图片描述
实现
在这里插入图片描述
可以看到cookie是我们设定的值
在这里插入图片描述
也可以通过命令来看cookie

2haproxy状态页

编写配置文件来启动状态页
在这里插入图片描述
实现
在这里插入图片描述

3 ip透传

web服务器中需要记录客户端的真实IP地址,用于做访问统计、安全防护、行为分析、区域排行等场景
可以在web服务器上记录客户访问的ip

四层
nginx

vim /etc/nginx/nginx.conf进入nginx配置文件
在这里插入图片描述
在该位置加入18行
在这里插入图片描述

修改44行然后重启服务

在这里插入图片描述
然后修改haproxy配置,修改对应的服务这里是132行,然后重启haproxy
实现
在这里插入图片描述
curl一下服务
在这里插入图片描述
然后cat一下web服务器这个文件可以看到127.25.254.1是我们windows的ip

七层
nginx

修改nginx.conf配置然后重启nginx服务
在这里插入图片描述
在这里插入图片描述
修改haproxy配置然后重启haproxy服务
在这里插入图片描述
这里131行是nginx配置
实现
先在windows curl一下nginx服务器的ip
然后再nginx服务器下查看这个文件
在这里插入图片描述
可以看到windows的ip透传过来、

http

在http服务器修改httpd配置文件 位置:/etc/httpd/logs/access_log
在这里插入图片描述
修改202行重启服务
修改haproxy并重启服务
在这里插入图片描述
这里130行是http服务配置
然后在windows crul httpd服务器
然后cat http服务器这个文件可以看到windows的ip被透传过来
在这里插入图片描述

4ACL

5haproxy四层负载

这里我们实现的是haproxy对数据库的四层负载
我们先在haproxy配置文件上新加一个mysql服务
在这里插入图片描述
然后再两个web服务器上都装上mariadb数据库
rs1 ~]# yum install mariadb-server -y
rs2 ~]# yum install mariadb-server -y
在两台web服务器上分别:
vim /etc/my.cnf
在[mysqld]下面加上
server-id=1#
另一台加上
server-id=2#
启动mariadb
分别mysql -e “grant all on . to lee@‘%’ identified by ‘lee’;”

测试:mysql -ulee -plee -h 172.25.254.100 -e "
select @@server_id"
在这里插入图片描述

因为是rr算法所以每次都不一样,1和2轮询出现

6 haproxy htttps实现

配置并重启haproxy支持https协议,支持ssl会话
在这里插入图片描述

证书制作

mkdir /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

#指令 crt 后证书文件为PEM格式,需要同时包含证书和所有私钥
cat demo.key demo.crt > demo.pem

测试

百度不支持,可以在火狐浏览器查看证书
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值