linux之Haproxy

news/2024/7/10 3:07:03 标签: linux, 服务器, 运维, 负载均衡, 可用性测试

介绍

haproxy是一种开源的TCP和HTTP负载均衡代理服务器软件。客户端通过Haproxy代理服务器获得站点页面,而代理服务器收到客户请求后根据负载均衡的规则将请求数据转发给后端真实服务器

下载Haproxy

yum install haproxy -y

开启服务

systemctl start haproxy

配置文件

在主配置文件/etc/haproxy/haproxy.cfg中,由两大部分组成

global:全局配置

proxies:代理配置

defaults :为 frontend, backend, listen 提供默认配置
frontend :前端,相当于 nginx 中的 server {}
backend :后端,相当于 nginx 中的 upstream {}
listen :同时拥有 前端和后端配置

Haproxy的8种负载均衡 

在proxies中的backend模块中设置

1. 轮询 (Round Robin): 请求依次分发到每个后端服务器,按顺序进行负载均衡

2. 加权轮询 (Weighted Round Robin): 可以为每个后端服务器设置权重,根据权重分配请求,以实现不同性能的服务器负载均衡中发挥不同作用。

3. 最少连接 (Least Connection): 请求分发到当前连接数最少的后端服务器,以实现负载均衡

4. 加权最少连接 (Weighted Least Connection): 与加权轮询类似,可以为每个后端服务器设置权重,但该模式根据连接数来决定负载均衡

5. URI哈希 (URI Hash): 将请求的URI进行哈希,然后根据哈希值将请求分发到对应的后端服务器,确保相同URI的请求经常落在同一后端服务器上。

6. IP哈希 (IP Hash): 将请求的源IP进行哈希,然后根据哈希值将请求分发到对应的后端服务器,确保同一IP的请求经常落在同一后端服务器上。

7. URL参数哈希 (URL Parameter Hash): 与URI哈希类似,不过该模式是根据请求的URL参数进行哈希来实现负载均衡

8. 复制(Backup): 当主要的服务器不可用时,请求会被转发到指定的备用服务器,用于故障转移和故障恢复。

Haproxy负载均衡实例(一)

Haproxy主机配置192.168.199.149,真实服务器为192.168.199.150,192.168.199.155,默认配置好nginx服务,自己能curl自己,显示自己的页面
关闭firewalld和selinux

修改主配置文件

vim /etc/haproxy/haprooxy.cgf(其他部分注释掉)
采取轮询模式,权重相等

修改rsyslog配置

vim /etc/rsyslog.conf
开启UDP,修改*.emarg  ,添加最后一行

开启远程日志

 vim /etc/sysconfig/rsyslog

重启服务

systemctl restart rsyslog
systemctl restart haproxy

测试

访问192.168.199.149
155和150轮询成功
输入192.168.199/ha_stats

问题解决

访问192.168.199/ha_stats显示错误
查看haproxy服务状态显示没有成功启动
原因:/etc/haproxy/haproxy.cfg配置错误
修改

使用Keepalived实现HAProxy高可用

主机192.168.199.149        虚拟IP192.168.199.148

备机192.168.199.151

后端真实服务器192.168.199.150,192.168.199.155

主机+备机        keepalived,haproxy

真实服务器        nginx

关闭firewalld和selinux

主机配置

yum install keepalived

yum install hapoxyd

keepalived配置

vim /etc/keepalived/keepalived.cfg

haproxy配置

vim /etc/haproxy/haproxy.cfg

备机配置

直接把主机的配置传到备机上

在主机上执行

scp /etc/keepalived/keepalived.cfg  192.168.199.151:/etc/keepalived/keepalived.cfg

scp /etc/haproxy/haproxy.conf  192.168.199.151:/etc/haproxy/haproxy.conf

在备机的/etc/keepalivedkeepalived.cfg中把state 后面修改为BACKUP

priority修改为小于100(一般为90)

真实服务器配置

配置好nginx,开启服务并能curl自己显示界面

开启nginx服务

测试

在主机和备机分别开启服务

systemctl start keepalived

systemctl start haproxy

只有当system status 服务 显示成功启动成功才行(显示绿色running)

测试负载均衡

测试高可用

添加虚拟IP

ip addr add 192.168.199.148/32 dev ens33

主节点IP

备机IP

停掉主机的keepalived服务,查看ip是否漂移

发现没有漂移,访问192.168.199.148出现问题

检查后发现keepalived配置文件缺少检查配置,修改后如下

添加一个vrrp_script

在 Keepalived 中,vrrp_script 是用于定义状态检测脚本的配置项。通过 vrrp_script 配置,Keepalived 可以定期执行指定的状态检测脚本,用于检测特定服务或资源的可用性,从而决定节点的状态切换

再次测试

重启服务,再次测试,停止主机的haproxy服务

查看主机ip,实现漂移

备机IP

测试页面,成功

重新启动主机的haproxy服务,查看主机ip

148虚拟IP漂移回来(大概过几秒钟)


http://www.niftyadmin.cn/n/5444005.html

相关文章

力扣 739. 每日温度 496.下一个更大元素 I

739. 每日温度 穷举的话就是从当前元素往后找比自己大的第一个元素,时间复杂度O(n^2)。 然后在看单调栈的解法。 就能感受出单调栈的巧妙。这道题主要熟悉单调栈这个数据结构。 单调栈:分为单调递增栈和单调递减栈。单调递增:栈顶元素总是小…

面向量产!基于视觉的速度距离估计

面向量产!基于视觉的速度距离估计 论文名称:Vision-based Vehicle Speed Estimation: A Survey 导读 在精确检测车速车距的方案中,视觉方案是非常具有挑战性的,但由于没有昂贵的距离传感器而大幅降低成本,所以潜力巨…

广交会参展,一起来看看展会二维如何制作吧

展会,一直都是企业开发客户、寻找合作伙伴、拓展渠道、展示产品和技术、提升品牌知名度、行业交流的重要宣传活动。 据相关资料显示,2024年新能源行业和电子电力行业依旧是展会青睐的重点行业,分别占到统计数据的35%和38%。从举办展会的国家…

Epicypher—CUTANA™ ChIC/CUTRUN Kit

核酸酶靶向切割和释放 (CUT&RUN)技术是由Steven henikoff博士团队开发的一种染色质图谱分析方法,基于Ulrich Laemmli博士的染色质免疫切割技术 (ChIC),融合蛋白A与微球菌核酸酶 (pA-MNase),选择性原位切割与抗体结合的染色质。在CUT&…

第十四届蓝桥杯(C/C++ 大学B组)

试题 A&#xff1a;日期统计 #include <bits/stdc.h> using namespace std;const int numbers[100] {5, 6, 8, 6, 9, 1, 6, 1, 2, 4, 9, 1, 9, 8, 2, 3, 6, 4, 7, 7, 5, 9, 5, 0, 3, 8, 7, 5, 8, 1, 5,8, 6, 1, 8, 3, 0, 3, 7, 9, 2, 7, 0, 5, 8, 8, 5, 7, 0, 9, 9, 1, …

新手如何入门电子电路

新手如何入门电子电路 引言 电子电路是现代科技中非常重要的一部分&#xff0c;无论是电子设备的制造、维修还是电子工程师的培养都离不开对电子电路的理解和应用。对于初学者来说&#xff0c;掌握电子电路基础知识并不容易&#xff0c;因此本文将提供一些指导和建议&#xf…

操作符(C语言)—第二期

赋值操作符 赋值操作符是一个很棒的操作符&#xff0c;他可以让你得到一个你之前不满意的值。也就是你可以给自己重新赋值。 int weight 120;//体重 weight 89;//不满意就赋值 double salary 10000.0; salary 20000.0;//使用赋值操作符赋值。赋值操作符可以连续使用&#x…

unity自动引用生成

using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using UnityEditor; using UnityEngine; using UnityEngine.UI;/// <summary> /// 模板脚本生成 /// </summary> public class ScriptCreater : EditorW…