HAProxy:从安装到动静分离的全面配置指南

一、haproxy的原理和安装

1、haproxy   

              haproxy是一个提供高可用性,负载均衡的应用代理,支持的协议有TCP,HTTP,并且支持虚拟主机,特别适用于那些负载量大的web应用,这些应用通常需要会话保持或者七层处理,haproxy实现了一种事件驱动、单一进程模型,此模型支持非常大的并发连接数。它可以将客户端的请求分发到多台后端服务器,从而提高应用的可用性和性能。HAProxy支持多种负载均衡算法和健康检查机制,是构建高可用性系统的理想选择。

2、负载均衡

负载均衡是一种分配网络或应用程序流量的技术,旨在优化资源使用、提高响应速度和确保系统的高可用性。它通过将请求有效地分配到多个服务器或资源上,避免某一单一资源过载,确保服务的稳定运行。

负载均衡的主要功能包括:

  • 流量分配:将用户请求均匀地分配到多台服务器上,以防止某一台服务器过载。

  • 故障转移:如果某台服务器出现故障,负载均衡器可以自动将流量转移到其他正常工作的服务器上,确保服务不中断。

  • 性能优化:通过有效利用服务器资源,提高网站或应用的响应速度和处理能力。

  • 可扩展性:支持根据需求添加或移除服务器,使系统能够根据流量变化灵活调整。

3、haproxy的安装

1、在两个server端安装nginx

yum install nginx -y

2、分别写入html

echo webserver2 -172.25.254.20 > /usr/share/nginx/html/index.html

echo webserver1 -172.25.254.10 > /usr/share/nginx/html/index.html

3、启动服务

systemctl enable --now nginx.service

3、在客户端安装haproxy

yum install haproxy -y

vim /etc/haproxy/haproxy.cfg

4、开启haproxy服务

systemctl start haproxy.service

二、haproxy服务配置指南

1、haproxy基础配置

HAProxy 的配置文件haproxy.cfg由两大部分组成,分别是:

1.1、global:全局配置段

进程及安全配置相关的参数

性能调整相关参数

Debug参数

1.2、proxies:代理配置段

defaults:为frontend,backend, listen提供默认配置

frontend:前端,相当于nginx中的server }

backend:后端,相当于nginx中的upstream

listen:同时拥有前端和后端配置,配置简单,生产推荐使用

2、多进程

haproxy的多进程模式允许多个进程同时运行,以处理并发连接。这种模式可以提高可靠性和扩展性,因为即使一个进程崩溃,其他进程仍然可以继续处理请求。每个进程可以独立地监听端口,处理负载均衡任务。

nbproc N          开启的haproxy worker 进程数,默认进程数是一个

查看:

3、多线程

相比多进程,HAProxy的多线程模式(在某些版本中)采用了线程化的架构,从而能够更有效地利用多核处理器的性能。多线程可以减少进程之间的上下文切换,提高整体性能。HAProxy通过对I/O操作的高效管理,能够支持高并发的处理

nbthread1(和nbproc互斥)             指定每个haproxy进程开启的线程数,默认为每个进程一个线程

查看:

4、Proxies

在HAProxy中,proxies是指处理流量的逻辑组件。可以将“proxies”理解为特定的负载均衡规则和后端服务器组的集合。用户可以根据需求定义多个代理设置,灵活地管理流量和策略。例如,可以根据不同的路径或请求来源,将请求路由到不同的服务器组。

  • defaults:默认配置项,针对以下的frontend、backend和listen生效,可以多个name也可以没有name
  • frontend:前端servername,类似于Nginx的一个虚拟主机 server和LVS服务集群
  • backend:后端服务器组,等于nginx的upstream和LVS中的RS服务器
  • listen:将frontend和backend合并在一起配置,相对于frontend和backend配置更简洁,生产常用
vim /etc/rsyslog.conf

addr<IP>                可指定的健康状态监测IP,可以是专门的数据网段,减少业务网络的流量

port<num>             指定的健康状态监测端口

inter <num>           健康状态检查间隔时间,默认2000ms

fa11 <num>           后端服务器从线上转为线下的检查的连续失效次数,默认为3

rise <num>            后端服务器从下线恢复上线的检查的连续有效次数,默认为2

weight <weight>   默认为1,最大值为256,0(状态为蓝色)表示不参与负载均衡,但仍接受持久连接

测试:

关闭server的nginx服务

systemctl stop nginx.service

测试:

在haproxy中下载httpd

yum install httpd

80端口被占用,修改端口号

vim /etc/httpd/conf/httpd.conf

systemctl enable --now httpd

echo sorry,已下班 > /var/www/html/index.html

测试:(开启两台server的nginx服务后)

5. socat

socat是一个多功能的网络工具,可以用于建立双向数据流转。它可以用作端口转发、数据包捕获和流量代理等任务。在HAProxy的上下文中,socat可以与HAProxy搭配使用,实现一些高级功能,比如将流量导入HAProxy或将HAProxy的输出重定向到其他服务

yum install socat -y

多进程热处理

vim /etc/haproxy/haproxy.cfg

systemctl restart haproxy

ll /var/lib/haproxy/

三、haproxy的算法

1、静态算法

静态算法:按照事先定义好的规则轮询公平调度,不关心后端服务器的当前负载、连接数和响应速度等,且无法实时修改权重(只能为0和1,不支持其它值),只能靠重启HAProxy生效。

1、static-rr 基于权重的轮询调度

vim /etc/haproxy/haproxy.cfg

static-rr不支持用socat进行动态修改权重

2、first

根据服务器在列表中的位置,自上而下进行调度。当第一台服务器的连接数达到上限,新请求才会分配给下一台服务

2、动态算法

3、其他算法

1、source

测试:

2、hash

测试:

3、uri

在server中分别添加

[root@localhost ~]# echo 172.25.254.10 - index1.html > /usr/share/nginx/html/index1.html

[root@localhost ~]# echo 172.25.254.10 - index2.html > /usr/share/nginx/html/index2.html

[root@localhost ~]# echo 172.25.254.10 - index3.html > /usr/share/nginx/html/index3.html

[root@localhost ~]# echo 172.25.254.20 - index1.html > /usr/share/nginx/html/index1.html

[root@localhost ~]# echo 172.25.254.20 - index2.html > /usr/share/nginx/html/index2.html

[root@localhost ~]# echo 172.25.254.20 - index3.html > /usr/share/nginx/html/index3.html

测试:

4、url_param

测试:

5、hdr

测试:

四、高级功能及配置

1、基于cookie的会话保持

vim /etc/haproxy/haproxy.cfg

测试:

2、stats 状态页

测试:

3、ip透传

1、未开启

访问haproxy后查看nginx日志

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

在此日志中是无法看到真实访问源地址的

注:此为nginx , Apache中默认不显示访问源地址

开启时

在server1中将nginx停掉,下载并启动httpd

systemctl disable nginx.service

systemctl stop nginx.service

yum install httpd -y

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

访问后查看日志

cat /etc/httpd/logs/access_log

server中修改

vim /etc/httpd/conf/httpd.conf

访问后查看日志

2、 Apache开启透传四层

配置:

haproxy中

vim /etc/nginx/nginx.conf

测试:

4、ACL-动静分离

1、基于域名访问

域名结尾

包含某字段

mkdir /usr/share/nginx/html/hao -p

echo 172.25.254.10 hao > /usr/share/nginx/html/hao/index.html

curl 172.25.254.10/hao/

2、基于ip访问

2.1白名单

测试:

在172.25.254.20访问,符合

在172.25.254.100访问,不符合

2.2.黑名单

测试:

3、基于浏览器

测试:

4、基于文件后缀名实现动静分离

yum install php -y

vim /usr/share/nginx/html/index.php

5、四层负载

server配置

yum install mariadb-server -y

vim /etc/my.cnf.d/mariadb-server.cnf

systemctl start mariadb.service

在两个server里添加用户并给全部权限

配置haproxy文件

vim /etc/haproxy/haproxy.cfg

6、加密

openssl req -newkey rsa:2048 -nodes -sha256 -keyout /etc/haproxy/certs/hao.org.key -x509 -days 365 -out /etc/haproxy/certs/hao.org.crt

ls查看并将公私钥放入hao.pem

ls /etc/haproxy/certs/ hao.org.crt hao.org.key

cat /etc/haproxy/certs/hao.org.key/etc/haproxy/certs/hao.org.crt >/etc/haproxy/certs/hao.pem 

cat /etc/haproxy/certs/hao.pem

修改配置参数

重启后查看端口号

netstat -antlupe | grep haproxy

测试:

  • 24
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值