2024年最全Haproxy-2,java面试知识点太多

Docker步步实践

目录文档:

①Docker简介

②基本概念

③安装Docker

④使用镜像:

⑤操作容器:

⑥访问仓库:

⑦数据管理:

⑧使用网络:

⑨高级网络配置:

⑩安全:

⑪底层实现:

⑫其他项目:

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

ps -ef | grep haproxy

root 2659 1 0 09:22 ? 00:00:00 /usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid

haproxy 2663 2659 0 09:22 ? 00:00:00 /usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid

haproxy 2664 2659 0 09:22 ? 00:00:00 /usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid

haproxy 2665 2659 0 09:22 ? 00:00:00 /usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid

haproxy 2666 2659 0 09:22 ? 00:00:00 /usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid

root 2668 2462 0 09:23 pts/1 00:00:00 grep --color=auto haproxy

  • 配置haproxy日志,默认是没有日志的,需要自行配置

haproxy中默认配置好了日志

log 127.0.0.1 local2

配置rsyslog文件

vim /etc/rsyslog.conf

$ModLoad imudp

$UDPServerRun 514

local2.* /var/log/haproxy.log

systemctl restart rsyslog.service

systemctl restart haproxy

访问测试

tail -f /var/log/haproxy.log

Dec 17 09:42:47 localhost haproxy[3067]: Proxy main started.

Dec 17 09:42:47 localhost haproxy[3067]: Proxy static started.

3.2.default默认区段(不经常用)


option参数

  • option httplog:记录日志,包括但不限于HTTP请求、连接计时器、会话状态、连接数、捕获的首部及cookie、frontend、backend等

  • option dontlognull:不记录健康检查的日志信息

  • option redispatch:当找不到cookie对应服务器时,重新分配新的节点给客户端

  • option forwardfor:传递客户端真实IP

timeout参数

  • timeout http-request 30s:客户端发送http请求的超时时间

  • timeout queue 1m:请求超过最大并发连接数,多余请求进入队列,等待的超时时间

  • timeout connect 10s:haproxy与后端连接超时时间

  • timeout client 1m:非活动连接超时时间

  • timeout server 1m:haproxy与后端非活动连接超时时间

  • timeout http-keep-alive 60s:HTTP请求连接建立的最大超时时间

  • timeout check 10s:健康检测时间的最大超时时间

3.3.proxy区段配置


代理相关配置

  • frontend (name):用于定义系列监控的端口,这些端口可接受客户端请求并连接

  • backend (name):用于定义一系列后端服务器,代理将会将对应客户端请求分发至这些服务器

  • listen (name):通过关联“前端”和“后端”定义一个完整的代理

mode参数:定义haproxy示例运行的协议

  • 语法:mode {tcp|udp}

  • tcp:不对7层报文做任何检查;通常用于ssl、ssh、mysql等应用

  • http:客户端请求服务器,服务端重新封装请求报文,请求后端真实节点

  • 示例:

listen www *:80

mode http

server web01 192.168.10.3:80

maxconn:一个前端的最大并发连接数,不可超过全局,优先级比全局高

  • haproxy会为每个连接维持两个缓冲,每个缓冲的大小为8KB,加上其他数据大概共占用17KB左右。意味着优化后1GB的RAM空间可以维护40000-50000并发连接

server参数:为后端定义一个server节点

  • 为后端声明一个server节点信息,不能用于default和frontend区段

  • 语法:server [name] [address]:[port] [param*]

param常用参数:

backup:正常节点异常后启用备用节点

check:对此server进行tcp的健康检查;check port 80

inter:健康检查的时间间隔;check inter 3000

rise:设置离线状态转正常状态需要成功检查的次数

fall:设置正常状态转不可用状态检查的次数

maxconn:设置此服务器接收最大的并发连接数

maxqueue:设置请求队列的最大长度

weight:服务器节点权重,默认为1,最大256,0表示不参加负载均衡

bind:绑定的端口

  • 示例:bind *:8080

4.haproxy调度算法

======================================================================

  • 根据后端服务器的负载,或其他计算的标准,判断挑选哪台RS来进行请求处理

  • 调度算法可用于“default、listen、backend”

roundrobin:轮询

  • 基于权重进行轮询,保持均匀分布,是比较平衡公平的算法

  • 此算法是动态的,权重可以进行调整,但是每个后端服务器最多接受4128个连接

  • 示例:

frontend main

bind *:80

mode http

use_backend web

backend web

balance roundrobin

server web01 192.168.10.3:80 check

server web02 192.168.10.4:80 check

static-rr:静态轮询

  • 加权轮询调度算法,根据服务器的硬件情况、处理能力,为每台服务器分配不同的权值

  • 此算法为静态,不可在运行时进行调整

  • 示例:访问时按2、3的规则分配

backend web

balance static-rr

server web01 192.168.10.3:80 check weight 2

server web02 192.168.10.4:80 check weight 3

leastconn

  • 新的连接请求被派发至具有最少连接数目的服务器

  • 此算法为动态,可以在运行时调整权重

source

  • 源地址hash调度算法,将请求的源地址进行‘hash’运算,得到一个具体的数值,同时对后端服务器进行编号,按照运算结果将请求发到对应编号的服务器上。

  • 这样可对不同源IP的访问进行负载分发,对同一个客户端IP请求始终分发到特定的服务器

  • 如果添加新机器或宕机,客户端请求也可能会派发至与之前不同的服务器

  • 可通过hash-type修改特性:hash-type {map-based|consistent}

  • 示例:

backend web

balance source

hash-type consistent

server web01 192.168.10.3:80 check weight 2

server web02 192.168.10.4:80 check weight 3

uri

  • 基于对用户请求uri做hash并将请求转发至后端服务器

  • 同一个节点访问不同的uri会被调度到不同的后端服务器;不同节点访问相同的uri会被调度到同一台服务器

  • 此算法仅用于http后端服务器场景;默认为静态,可以修改

url_param

  • 对用户请求的url中的param参数中的name做调度

  • 一个url中?后的name中内容

  • 通常用于追踪用户,以确保来自同一个用户请求始终发往同一个backend server(使用少)

hdr

  • 针对用户发起HTTP请求中header中的name关键字进行hash计算,如果没有有效的值,则会进行轮询(使用少)

5.ACL

==============================================================

  • acl主要对请求报文和响应报文进行匹配和过滤。

  • 首先定义acl规则,即定义一个测试条件,条件可以是请求报文中的源地址、源端口、目标地址、目标端口、请求方法、URL、文件后缀等。

  • 然后在条件得到满足时执行相应的动作;比如阻止请求、又或者转发请求至某特定后端。

  • 语法:

acl [flags] [operator] [value]

即:

acl acl名称 条件 条件标记位 具体操作符 操作对象类型

  • aclname:ACL名称,可使用字母、数字和:. - _区分字符大小写

  • criterion:比较的条件标准

基于源地址、源端口、目标地址、目标端口:src、src_port、dst、dst_port

基于Header信息对比:hdr、hdr_beg、hdr_end、hdr_dom

基于路径或后缀:path_beg、path_end

基于请求方法比对:method

  • flags:条件标记

-i:不区分大小写

-m:使用pattern匹配方法

-n:不做dns解析

-u:禁止acl重名,否则多个同名acl为或的关系

最后

各位读者,由于本篇幅度过长,为了避免影响阅读体验,下面我就大概概括了整理了

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

-n:不做dns解析

-u:禁止acl重名,否则多个同名acl为或的关系

最后

各位读者,由于本篇幅度过长,为了避免影响阅读体验,下面我就大概概括了整理了

[外链图片转存中…(img-oWKSyQGN-1715072200541)]

[外链图片转存中…(img-wVvUEU2z-1715072200541)]

[外链图片转存中…(img-OLfVOqfj-1715072200541)]

[外链图片转存中…(img-tOHcsGDf-1715072200542)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值