haproxy基本用法(代码片段)

author author     2023-01-31     320

关键词:

基本内容简介:

官网:
http://www.haproxy.org
http://www.haproxy.com
文档:
https://cbonte.github.io/haproxy-dconv/

功能:
1 提供cookie的持久性,支持基于cookie进行调度
2 实现基于内容的交换,过载保护的高级流量管制
3 自动故障切换
4 以正则表达式为基础的控制运行时间
5 基于web页面的报表及高级日志记录
6 支持http反向代理|动态程序反向代理|数据库反向代理

安装:
yum install -y haproxy

配置文件解析:

主配置文件:
/etc/haproxy/haproxy.cfg
相关应用程序:
/usr/bin/halog
/usr/bin/iprange
主程序:
/usr/sbin/haproxy
服务server:
/usr/lib/systemd/system/haproxy.service

配置文件解析:global

global --全局配置
进程及安全配置相关的参数
性能调整相关参数
Debug参数
进程及安全管理:
chroot --禁锢haproxy进程在固定目录,降低安全风险
deamon --后台运行
user --用户
group --组
uid 
gid
nbproc [n] 要启动的haproxy的进程数量,系统默认单进程,要求使用daemon模式
默认开启单进程
建议配置的数量小于等于cpu数量!

ulimit-n [n] 每个haproxy进程可打开的最大文件数,系统会自动指定
不建议手动设置!

daemon 后端方式运行,建议使用!
-db --禁用
如何使用前台模式:docker专用
/usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid -db

log 定义全局的syslog服务器,最多可定义两个
如何定义:
第一步:
在rsyslog配置文件中加入:
local2.*              /var/log/haproxy.log
第二步:开启网络日志功能
$ModLoad imudp
$UDPServerRun 514
日志功能其它设置:
log <address> [len [n]] 
address ---rsyslog服务器地址
len --记录日志长度 默认1024
max level --记录最大级别
facility --记录设施
min level --最小级别
log-format <格式定义> --参考官方文档
日志管理---捕获信息

捕获请求和相应报文中的cookie并记录日志
capture cookie <name> len <n>

捕获请求报文中指定的首部并记录日志
capture request header <name> len <n>
示例:
capture request header X-Forwarded-For len 15

捕获响应报文中指定的首部并记录日志
capture response header <name> len <n>
例子:
capture response header Content-length len 9
capture response header Location len 10

性能调整参数:
maxconn <n> -- 设置每个进程所能接受的最大并发连接
默认是--4000
maxconnrate <n> --设置每个进程每秒钟所能建立的最大连接数
--属于传输层
--一个连接可以发起多个会话
maxse***ate <n> --设置每个进程每秒钟所能建立的最大会话数量
--属于应用层
maxsslconn <n> --每进程支持ssl的最大连接数
spread-checks <0..50,in percent> --健康检测延迟时长百分比,建议2-5之间

配置文件解析:proxies

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

backend --后端--相当于nginx中的upstream 
--指定将连接请求转发至后端服务器的相关设置

frontend --前端 --相当于nginx中的server()
--指定接收客户端连接监听套接字设置
相关配置参数:

bind --指定一个或多个前端监听地址和端口
使用格式:frontend|listen
1 bind *:80,*:443 --*可以省略
2 172.20.23.36:80,172.20.23.36:443
3 /run/ssl-frontend.sock user root mode 600 accept-proxy

listen --同时拥有前端和后端-适用于一对一环境
--指定完整的前后端设置
proxy [名称]:使用字母 数字- _ .:并区分字符大小写

mode --默认模式---http

效果展示:
格式:
frontend [名称]
    bind *:80  --指定打开端口/IP
    default_backend websrvs ---把服务反向代理到后端backend

backend [名称]
   balance roundrobin 
   server [后端服务器名称] 192.168.23.41:80 check --后端主机
   server [后端服务器名称] 192.168.23.40:80 check
[后端服务器名称] --可随意自定义

具体使用:简单配置

frontend web
    bind *:80  
    default_backend httpd

backend httpd
   balance roundrobin 
   server srv1 192.168.23.41:80 check 
   server srv2 192.168.23.40:80 check

[[email protected]:37:55~]#for i in 1..10000;do curl 172.20.23.38; sleep 1; done
<h1>test RS2 server</h1>
<h1>test RS1 server</h1>

仅仅有一组时可以使用listen
使用格式:
listen httpd
        bind 172.20.23.36:80
        balance roundrobin 
        server srv1 192.168.23.41:80 check 
        server srv2 192.168.23.40:80 check

其它参数:
default_backend <backend> --用于frontend中
没有use_backend匹配时,使用默认的backend,用于frontend中

default-server [param*]
为backend中的各server设定默认选项
用于[defaults|listen|backend]
官网案例:
default-server inter 1000 weight 13

inter 1000 --设置多长时间健康检测-单位毫秒
weight 13 --权重

server段配置:


server <name> <address>:<port> [参数]
相关参数:
weight [n] --权重默认为1
maxconn [n] --当前后端server的最大并发连接数
backlog [n] --当server的连接数达到上限后的排队等待队列长度
backup --设定当前server为准备服务器sorry server
具体设置:
frontend web
    bind 172.20.23.36:80  
    default_backend httpd

backend httpd
   balance roundrobin 
   server srv1 192.168.23.41:80 check 
   server srv2 192.168.23.40:80 check
   server sorryserver 127.0.0.1:8080 check backup --道歉服务器
道歉服务:
server sorryserver 127.0.0.1 check backup

check:对当前server做健康状态检测,只用于四层检测
addr:检测时使用IP地址
port:针对此端口进行检测
inter <n>:检测之间的时间间隔 默认为2000毫秒
rise <n>:连续多少次检测结果为成功才标记位可用-默认为2次
fall <n>:连续多少次检测结果为失败才标记不可用-默认为3次

tcp检测--传输层
ping检测--网络层
url检测--应用层
定义应用层检测方法:
httpchk|smtpchk|mysql-check|ssl-hello-chk|pgsql-check

disabled:标记为不可用

on-error--后端服务器故障时行动策略
-fastinter --加速检测速率
-fail-check --连续做健康检测
-sudden-death
-mark-down --直接标记为down

redir <prefix> 将发往此server的所有GET和HEAD类的请求重定向至
指定URL
具体用法:
frontend web
    bind 172.20.23.36:80  
    default_backend httpd

backend httpd
   balance roundrobin 
   server srv1 192.168.23.41:80 check 
   server srv2 192.168.23.40:80 check redir http://172.20.23.36:8080

测试需要:
for i in 1..1000;do curl -L  http://172.20.23.36 ; sleep 0.5 ; done

基于cookie会话绑定:

cookie <value> 为当前server指定cookie值 实现基于cookie的会话黏性
首次请求后,服务器会在响应报文中添加cookie给客户端
再次请求时,客户端的请求报文会带有cookie

<name>:cookie名称 用于实现持久连接
rewrite --重写
insert --插入
prefix --前缀
nocache --当客户端和haproxy之间有缓存时 不缓存cookie
indirect 

格式:
cookie <name> [rewrite|insert|prefix] [indirect] [nocache] [postonly]
[preserve] [httponly] [secure] [domain <domain>]* [maxidle <idle>] [maxlife <life>]

具体实现:
frontend web
    bind 172.20.23.36:80
    default_backend httpd

backend httpd
    cookie web insert nocache
    server srv1 192.168.23.41:80 check cookie rs1
    server srv2 192.168.23.40:80 check cookie rs2
    server sorryserver 127.0.0.1:8080 check backup

在curl命令中添加cookie值
curl -b  web=rs1 172.20.23.36

haproxy统计接口启用相关的参数:web页面

启用统计页 基于默认的参数启动 stats page
stats enable 
隐藏版本
stats hide-version 
设置自动刷新时间间隔:
stats refresh <n>
自定义stats page uri 默认值/haproxy?stats
stats uri <xxx>
认证时的realm 示例 stats realm  HAProxy Statistics
stats realm <xx>
认证时的账号和密码-可使用多次 默认-no authenticcation
stats auth <user>:<passwd>
启用stats page中的管理功能
stats admin if|unless <cond>
具体用法1:
stats admin if TRUE|LOCALHOST
具体管理指令:
Set state to MAINT --维护模式
Set state to DRAIN --逐渐排干净用户
Set state to READY --恢复正常
kill Session --杀死所有会话

页面基本介绍:
Hide ‘DOWN‘ servers --隐藏宕机后端主机
Refresh now --刷新

综合应用:
listen status
    bind 192.168.23.36:80 --绑定内网网卡
    stats enable          --启用统计页
    stats hide-version    --隐藏版本
    stats refresh 30      --刷新时间间隔   
    stats uri /test       --自定义访问uri
    stats realm  please show your password --提示语句
    stats auth tom:[密码] --账号密码
    stats admin if TRUE   --页面启用管理功能

Queue--队列
Cur--当前
Max-曾经最大峰值
Limit--限制值
Session rate--会话速率
Session--会话数量
Bytes--接收发送量
Denied--拒绝访问
Errors--错误访问
Warning ---警告信息
Server--后端服务器相关信息

工作模式:mode

工作模式:mode
模式类型:
tcp --基于layer4实现代理-可代理mysql|pgsql|ssl等协议
https时使用此模式--默认模式
具体实现:
listen ssh
    bind :22222
    balance roundrobin
    mode tcp
    server ssh1 192.168.23.40:22 check
    server ssh2 192.168.23.41:22 check

http --仅当代理协议为http时使用--centos中haproxt实际的模式模式

health --工作为健康状态检查的响应模式-当连接请求到达时回应"OK"
后即断开连接--较少使用!

基于四层调度mariadb
listen mysql
    bind *:3306
    balance roundrobin
    mode tcp
    server ssh1 192.168.23.36:3306 check
    server ssh2 192.168.23.37:3306 check

haproxy基本配置调度算法与tcphttpheath模式配置示例(代码片段)

一、HAProxy安装1.HAProxy简单介绍HAProxy虽然名字前有HA,但它并不是一款高可用软件,而是一款用于实现负载均衡的软件,可实现四层与七层的负载均衡。2.yum安装HAProxyHAProxy已经包含在yum的base中,版本为1.15,可以直接yum安装~]#yumin... 查看详情

dockercompose实践(代码片段)

目录项目说明基本目录结构配置docker-compose项目说明这是一个典型的web项目,由一个haproxy容器加三个web容器组成。haproxy在前端充当负载均衡器,反向代理到后台三个服务服务。基本目录结构首先创建一个compose-haproxy-web的目录,... 查看详情

haproxy状态监控页笔记(代码片段)

基本参数 •statsenable#基于默认的参数启用statspage•statshide-version#隐藏版本•statsrefresh<delay>#设定自动刷新时间间隔•statsuri<prefix>#自定义statspageuri,默认值:/haproxy?stats•statsrealm<realm>#账户认证时的提 查看详情

javahibernate基本用法(代码片段)

查看详情

html基本用法(代码片段)

查看详情

markdownansible模板的基本用法(代码片段)

查看详情

javascript`createnamespacereducer`的基本用法(代码片段)

查看详情

stringbuilder基本用法(代码片段)

//StringBuilder用法publicclassStringBuilderTestpublicstaticvoidmain(String[]args)StringBuildersb=newStringBuilder();//追加字符串sb.append("Java");//sb="Java";System.out.println(sb);//插入sb.insert(0,"Hello") 查看详情

haproxy实现会话保持(代码片段)

HAProxy系列文章:http://www.cnblogs.com/f-ck-need-u/p/7576137.html1.反向代理为什么需要设置cookie任何一个七层的http负载均衡器,都应该具备一个功能:会话保持。会话保持是保证客户端对动态应用程序正确请求的基本要求。还是那个被举... 查看详情

volley基本用法(代码片段)

下载Volleygitclonehttps://android.googlesource.com/platform/frameworks/volleyAndroidManifest.xml中添加如下权限:<uses-permissionandroid:name="android.permission.INTERNET"/>StringRequest的用法Reques 查看详情

history基本用法(代码片段)

设置记录保存的数量:/etc/profile查看修改记录保存的文件:~/.bash_history如果是root用户就是在/root/.bash_history  查看详情

reactnavigation基本用法(代码片段)

/***Createdbyappleon2018/9/23.*/importReact,Componentfrom‘react‘;importAppRegistry,View,Text,Buttonfrom‘react-native‘;importStackNavigatorfrom‘react-navigation‘;constHomeScreen=(navigation)=&g 查看详情

csharptopshelf与windsor的基本用法(代码片段)

查看详情

selenium库的基本用法(代码片段)

  1.基本使用fromseleniumimportwebdriverfromselenium.webdriver.common.byimportByfromselenium.webdriver.common.keysimportKeysfromselenium.webdriver.supportimportexpected_conditionsasECfromselenium.webdriver 查看详情

async的基本用法(代码片段)

1.async函数的基本形式//函数声明asyncfunctionfoo()//函数表达式constfoo=asyncfunction();//对象的方法letobj=asyncfoo();obj.foo().then(...)//Class的方法classStorageconstructor()this.cachePromise=caches.open(‘avatars‘); 查看详情

各种stl的基本用法(代码片段)

目录STL及一些常用函数的基本用法1.vector(向量)的基本用法2.queue(队列)的基本用法3.stack(栈)的基本操作4.set(集合)的基本用法5.map(映射)的基本用法6.unorded_map的用法7.list(列表)的基本用法7.next_premutation(全排列)的用法8.stringstream的用... 查看详情

haproxy+keepalived安装配置(代码片段)

1环境准备1.1主机规划服务器说明IP地址主机名称规则安装服务haproxy主机110.0.0.41haproxy01Haproxy、Nginx、keepalivedhaproxy主机210.0.0.42haproxy01Haproxy、Nginx、keepalived10.0.0.43虚拟IP地址VIP1.2hosts解析文件10.0.0.41dns0110.0.0.42dns021.3操作系统版本Cent... 查看详情

greeplum系列基本用法(代码片段)

Greeplum系列(三)基本用法《PostgreSQL教程》:https://www.yiibai.com/postgresql一、Greeplum登陆与创建1.1登陆psql-dtest-h127.0.0.1-p5432-Ugpadmin注意:默认登陆的表名为gpadmin1.2创建数据库createdatabasetest;#需要登陆psqlcreatedbtest;#命令行模式二、创... 查看详情