Haproxy 代理后端服务

news/2024/11/17 9:54:06/

参考

http://www.haproxy.org

HAProxy · GitHub

目录

一、Haproxy环境准备

1、Haproxy简介

1.1、haproxy原理

1.2、Haproxy优点

2、在线apt安装

二、使用Haproxy

1、基本脚本结构示例

2、配置反向代理

3、验证haproxy

3.1、重启服务

3.2、访问后台管理

3.3、访问代理prometheus-server端口

3.4、访问代理grafana端口


一、Haproxy环境准备

1、Haproxy简介

1.1、haproxy原理

haproxy提供高可用性、负载均衡以及基于TCP(第四层)和HTTP(第七层)应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。

haproxy特别适用于那些负载特别大的web站点,这些站点通常又需要会话保持或七层处理。haproxy运行在时下的硬件上,完全可以支持数以万计的并发连接,

并且它的运行模式使得它可以很简单安全的整合进您当前的架构中,同时可以保护你的web服务器不被暴露到网络上。

haproxy实现了一种事件驱动、单一进程模型,此模型支持非常大的并发连接数。多进程或多线程模型受内存限制、系统调度器限制以及无处不在的锁限制,很少能处理数千并发连接。

事件驱动模型因为在有更好的资源和时间管理的用户端(User-Space)实现所有这些任务,所以没有这些问题。此模型的弊端是,在多核系统上,这些程序通常扩展性较差。

这就是为什么他们必须进行优化以使每个CPU时间片(Cycle)做更多的工作。

1.2、Haproxy优点

(1)免费开源,稳定性也是非常好。单haproxy也跑得不错,稳定性可以与硬件级的F5相媲美。

(2)根据官方文档,haproxy可以跑满10Gbps,这个数值作为软件级负载均衡器是相当惊人的。

(3)haproxy支持连接拒绝:因为维护一个连接的打开的开销是很低的,有时我们很需要限制攻击蠕虫(attack bots),也就是说限制它们的连接打开从而限制它们的危害。这个已经为一个陷于小型DDoS攻击的网站开发了而且已经拯救了很多站点,这个优点也是其它负载均衡器没有的。

(4)haproxy支持全透明代理(已具备硬件防火墙的典型特点):可以用客户端IP地址或者任何其他地址来连接后端服务器。这个特性仅在Linux 2.4/2.6内核打了tcp proxy补丁后才可以使用。这个特性也使得为某特殊服务器处理部分流量同时又不修改服务器的地址成为可能。

(5)haproxy现多于线上的Mysql集群环境,我们常用于它作为MySQL(读)负载均衡。

(6)自带强大的监控服务器状态的页面,实际环境中我们结合Nagios进行邮件或短信报警。

(7)HAProxy支持虚拟主机

2、在线apt安装

apt-get install software-properties-common

add-apt-repository ppa:vbernat/haproxy-2.7

安装完成后服务会自启

systemctl status haproxy

查看版本信息

HA-Proxy version 2.0.29

二、使用Haproxy

1、基本脚本结构示例

global

    # global settings here

defaults

    # defaults here

frontend

    # a frontend that accepts requests from clients

backend

    # servers that fulfill the requests

2、配置反向代理

1、端口用途

Haproxy端口

被代理服务端口

备注

3264

N/A

haproxy管理页面

3265

9090

prometheus server

3266

30000

grafana dashboard

2、编辑配置文件

/etc/haproxy/haproxy.cfg

globallog /dev/log	local0log /dev/log	local1 noticechroot /var/lib/haproxystats socket /run/haproxy/admin.sock mode 660 level admin expose-fd listenersstats timeout 30suser haproxygroup haproxydaemon# Default SSL material locationsca-base /etc/ssl/certscrt-base /etc/ssl/private# See: https://ssl-config.mozilla.org/#server=haproxy&server-version=2.0.3&config=intermediatessl-default-bind-ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384ssl-default-bind-ciphersuites TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256ssl-default-bind-options ssl-min-ver TLSv1.2 no-tls-ticketsdefaultslog	globalmode	httpoption	httplogoption	dontlognulltimeout connect 5000timeout client  50000timeout server  50000errorfile 400 /etc/haproxy/errors/400.httperrorfile 403 /etc/haproxy/errors/403.httperrorfile 408 /etc/haproxy/errors/408.httperrorfile 500 /etc/haproxy/errors/500.httperrorfile 502 /etc/haproxy/errors/502.httperrorfile 503 /etc/haproxy/errors/503.httperrorfile 504 /etc/haproxy/errors/504.http
# Haproxy 控制台管理
listen admin_statsstats    enablebind     *:3264  #*所有ip都可以访问mode     http    #代理模式option   httploglog      globalmaxconn  10stats    refresh 30s   #统计页面自动刷新时间stats    uri /admin    #访问的uri   ip:3264/adminstats    realm haproxystats    auth admin:1234567  #认证用户名和密码stats    hide-version   #隐藏HAProxy的版本号stats    admin if TRUE  #管理界面,如果认证成功了,可通过webui管理节点listen prometheus-serverbind *:3265  #服务IP端口      server prometheus-server 192.168.101.200:9090 check inter 500 rise 2 fall 4 weight 100        #后端prometheus的地址listen grafana-serverbind *:3266 #服务IP端口   

3、验证haproxy

3.1、重启服务

systemctl restart haproxy

netstat -ntlp|grep haproxy

3.2、访问后台管理

http://192.168.101.201:3264/admin

查看代理信息

3.3、访问代理prometheus-server端口

http://192.168.101.201:3265/graph

3.4、访问代理grafana端口

http://192.168.101.201:3266/login


http://www.ppmy.cn/news/956459.html

相关文章

python+flask+eventSource打造流式chatGPT生成式API接口

后端用python,前端用web,怎么打通chatGPT API连接? 如果你遇到这样的情况: 科学上网登chat.openai.com开启一个新聊天,总是出现网页错误,刷新几次就没有对话的想法了。 获取了chatGPT的APIkey&#xff0c…

LeetCode | C++ 动态规划——583. 两个字符串的删除操作、72. 编辑距离

目录 583. 两个字符串的删除操作72. 编辑距离 583. 两个字符串的删除操作 583题目链接 做法一: 本题和1143.最长公共子序列基本相同,只要求出两个字符串的最长公共子序列长度即可,那么除了最长公共子序列之外的字符都是必须删除的&#xff0…

Meta发布升级大模型LLaMA 2:开源可商用

论文地址:https://ai.meta.com/research/publications/llama-2-open-foundation-and-fine-tuned-chat-models/ Github地址:https://github.com/facebookresearch/llama LLaMA 2介绍 Meta之前发布自了半开源的大模型LLaMA,自从LLaMA发布以来…

基于nginx的waf方案naxsi源码理解(6)_策略处理

本文档说明 这里的策略处理以读取MainRule策略为例。 以naxsi_core.rules的首条策略做示例: MainRule "rx:select|union|update|delete|insert|table|from|ascii|hex|unhex|drop|load_file|substr|group_concat|dumpfile" "msg:sql keywords" "mz:…

MyBatis代理开发:简化数据访问层(DAO)的实现

引言 在现代的应用程序开发中,数据访问层(DAO)是连接应用程序与数据库之间的关键组件。MyBatis是一个流行的Java持久层框架,提供了一种简化数据访问层开发的方法,即代理开发。本文将介绍MyBatis代理开发的概念和使用方…

反其道而行,大学教授鼓励学生用 ChatGPT 写论文

整理 | 屠敏 责编 | 张红月 出品 | CSDN(ID:CSDNnews) 新 AI 工具 ChatGPT 的到来,正在教育圈呈现出冰火两重天的态势,教授们几家欢喜几家愁。 这不近日,来自宾夕法尼亚大学沃顿商学院的一位专门研究创…

一篇文章,教你彻底掌握接口测试!

Part 01、什么是接口测试 所谓接口,是指同一个系统中模块与模块间的数据传递接口、前后端交互、跨系统跨平台跨数据库的对接。而接口测试,则是通过接口的不同情况下的输入,去对比输出,看看是否满足接口规范所规定的功能、安全以及…

【回眸】又是一年毕业季,怎么利用ChatGPT 4.0 优化毕业论文?

目录 【回眸】又是一年毕业季,怎么利用ChatGPT 4.0 优化毕业论文? 前言 ChatGPT4.0降重提示词(3.5表现略逊色一些,不过也可以用这个来作为提示词) 举个例子 降重前的原文 构思提示词 确定提问词 选用合适的翻译…