首页 > 编程语言 >【HAProxy04】企业级反向代理HAProxy调度算法之Socat 工具

【HAProxy04】企业级反向代理HAProxy调度算法之Socat 工具

时间:2024-11-06 11:47:30浏览次数:4  
标签:HAProxy haproxy 10.0 sock 企业级 nginx HAProxy04 socat root

HAProxy 调度算法

HAProxy通过固定参数

balance 指明对后端服务器的调度算法,该参数可以配置在listen或backend选 项中。

HAProxy的调度算法分为静态和动态调度算法,但是有些算法可以根据不同的参数实现静态和动态算法 相互转换。

官方文档: HAProxy version 2.4.15 - Configuration Manualicon-default.png?t=O83Ahttp://cbonte.github.io/haproxy-dconv/2.4/configuration.html#4-balance         

Socat 工具

对服务器动态权重和其它状态可以利用 socat 工具进行调整,Socat 是 Linux 下的一个多功能的网络工 具,名字来由是Socket CAT,相当于netCAT的增强版.Socat 的主要特点就是在两个数据流之间建立双向 通道,且支持众多协议和链接方式。如 IP、TCP、 UDP、IPv6、Socket文件等

范例一:利用工具socat 对服务器动态权重调整

1.安装socat与查看帮助
#安装socat
[root@ubuntu1804 ~]#apt update && apt -y install socat
[root@centos ~]#yum -y install socat



#查看HAPorxy套接字文件 我的是/run/haproxy/admin.sock  有的是/var/lib/haproxy/haproxy.sock
[root@centos7 ~]#find / -type s -a -name "*.sock"
/run/haproxy/admin.sock 

[root@centos7 ~]#echo "help" | socat stdio /run/haproxy-master.sock


#查看帮助
[root@centos7 ~]#socat -h
[root@haproxy ~]#echo "help" | socat stdio /run/haproxy/admin.sock 
The following commands are valid at this level:
  abort ssl cert <certfile>               : abort a transaction for a certificate file
  add acl [@<ver>] <acl> <pattern>        : add an acl entry
  add map [@<ver>] <map> <key> <val>      : add a map entry (payload supported instead of key/val)
  add ssl crt-list <list> <cert> [opts]*  : add to crt-list file <list> a line <cert> or a payload
  clear acl [@<ver>] <acl>                : clear the contents of this acl
......................(省略)
2.获取当前连接数
#可以用于实现Zabbix监控
[root@haproxy ~]#echo "show info" | socat stdio /run/haproxy/admin.sock 
Name: HAProxy
Version: 2.4.24-0ubuntu0.22.04.1
Release_date: 2023/10/31
Nbthread: 2
Nbproc: 1
Process_num: 1
......................(省略)


#获取当前连接数
[root@haproxy ~]#echo "show info" | socat stdio /run/haproxy/admin.sock  | awk '/CurrConns/{print $2}'
3.修改并查看权重

[root@haproxy ~]#cat /etc/haproxy/conf.d/www.web.com.cfg 
frontend www.web01.com
  bind 172.16.1.211:80
  use_backend www.web02.com

backend www.web02.com
  server web01 10.0.0.52:80 check  inter 3000 fall 3 rise 5
  server web02 10.0.0.53:80 check  inter 3000 fall 3 rise 5
#请求显示所有后端服务器的当前状态
[root@haproxy ~]#echo "show servers state" | socat stdio  /run/haproxy/admin.sock
1
# be_id be_name srv_id srv_name srv_addr srv_op_state srv_admin_state srv_uweight srv_iweight srv_time_since_last_change srv_check_status srv_check_result srv_check_health srv_check_state srv_agent_state bk_f_forced_id srv_f_forced_id srv_fqdn srv_port srvrecord srv_use_ssl srv_check_port srv_check_addr srv_agent_addr srv_agent_port
4 www.web02.com 1 web01 10.0.0.52 0 0 1 1 10383 7 2 0 6 0 0 0 - 80 - 0 0 - - 0
4 www.web02.com 2 web02 10.0.0.53 0 0 1 1 10381 7 2 0 6 0 0 0 - 80 - 0 0 - - 0
5 MASTER 1 cur-1 - 2 0 0 0 10383 1 0 0 0 0 0 0 - 0 - 0 0 - - 0


#修改weight,注意只针对单进程有效
[root@haproxy ~]#echo "set weight www.web02.com/web01 2" | socat stdio /run/haproxy/admin.sock

#获取名为 网址/web01 的后端服务器的权重。
[root@haproxy ~]#echo "get weight www.web02.com/web01" | socat stdio /run/haproxy/admin.sock
2 (initial 1)

#测试   web01权重高
[root@master-db ~]#curl 172.16.1.211
web01 10.0.0.52
[root@master-db ~]#curl 172.16.1.211
web01 10.0.0.52
[root@master-db ~]#curl 172.16.1.211
web02 10.0.0.53

4.禁用与启动后端服务器
 #将后端服务器禁用,注意只针对单进程有效
[root@haproxy ~]#echo "disable server www.web02.com/web01" | socat stdio /run/haproxy/admin.sock


#启用后端服务器
[root@haproxy ~]#echo "enable server www.web02.com/web01" | socat stdio /run/haproxy/admin.sock
后端服务器禁用状态  

后端服务器启动状态  

5. 针对haproxy的多进程,将后端服务器禁用
 #针对haproxy的多进程,将后端服务器禁用
[root@centos7 ~]#vim /etc/haproxy/haproxy.cfg
 ......
 stats socket /var/lib/haproxy/haproxy1.sock mode 600 level admin process 1 #绑定第
1个进程和socket文件
stats socket /var/lib/haproxy/haproxy2.sock mode 600 level admin process 2 #绑定第
2个进程和socket文件
nbproc 2
 .....
 [root@centos7 ~]#echo "disable server  wang-test-80/web2" | socat stdio /var/lib/haproxy/haproxy1.sock
 [root@centos7 ~]#echo "disable server  wang-test-80/web2" | socat stdio /var/lib/haproxy/haproxy2.sock
 [root@haproxy ~]#for i in {1..2};do echo "set weight wang-test-80/web$i 10" | socat stdio /var/lib/haproxy/haproxy$i.sock;done


#如果静态算法,如:static-rr,可以更改weight为0或1,但不支持动态更改weight为其它值,否则会提
示下面信息
[root@centos7 ~]#echo "set weight wang-test-80/web1 0" | socat stdio /var/lib/haproxy/haproxy.sock
[root@centos7 ~]#echo "set weight wang-test-80/web1 1" | socat stdio /var/lib/haproxy/haproxy.sock
[root@centos7 ~]#echo "set weight wang-test-80/web1 2" | socat stdio /var/lib/haproxy/haproxy.sock
 Backend is using a static LB algorithm and only accepts weights '0%' and '100%'.
6.新的写法
#新的写法
#相当于disable server   进入维护状态(state maint)。
[root@ubuntu2004 ~]#echo "set server  www.web02.com/web01 state maint" | socat stdio /run/haproxy/admin.sock


#相当于enable server    ready表示服务器已准备好接受连接。
[root@ubuntu2004 ~]#echo "set server  www.web02.com/web01 state ready" | socat stdio /run/haproxy/admin.sock


#设置后端服务器为active or backup SOFT STOPPED for maintenance
drain 状态意味着服务器将不再接受新的连接,但会处理完当前已经建立的连接后再关闭。这通常用于维护或重启服务器之前,以确保现有连接能够优雅地关闭。

[root@ubuntu2004 ~]#echo "set server  www.web02.com/web01 state drain" | socat stdio /run/haproxy/admin.sock

范例二:上线和下线后端服务器脚本

Ubuntu版本
[root@ubuntu2204 ~]#cat haproxy_host_up_down.sh 
#!/bin/bash
WEB_SERVERS="
10.0.0.201
10.0.0.202
"
BACKEND=web_servers
APP=nginx
IMAGE=$APP:1.20
DELAY=10
for i in $WEB_SERVERS;do
echo "set server  $BACKEND/$i state maint" | socat stdio /var/lib/haproxy/haproxy.sock
 ssh $i docker rm -f $APP
 ssh $i "echo  DOCKER $i WEBSITE $1 v1.0 >   /data/www/index.html"
 ssh $i docker run -d -p 80:80 -v /data/www:/usr/share/nginx/html --name $APP $IMAGE
 sleep $DELAY
 echo "set server $BACKEND/$i state ready" | socat stdio /var/lib/haproxy/haproxy.sock
done
centos7版本
[root@centos7 ~]#cat haproxy_host_up_down.sh
 . /etc/init.d/functions
case $1 in
up)
echo "enable server wang-web-80/$2" | socat stdio /var/lib/haproxy/haproxy.sock
    [ $? -eq 0 ] && action "$2 is up"
    ;;
down)
echo "disable server wang-web-80/$2" | socat stdio /var/lib/haproxy/haproxy.sock
    [ $? -eq 0 ] && action "$2 is down" 
    ;;
*)
echo "Usage: `basename $0` up|down IP"
    ;;
esac

范例三:实现容器服务的上线和下线

#!/bin/bash

WEB_SERVERS="
10.0.0.101
10.0.0.102
"
for i in $WEB_SERVERS;do
echo "set server  www.wang.org_nginx/$i state maint" | socat stdio /var/lib/haproxy/haproxy.sock
 ssh $i docker rm -f nginx
 ssh $i "echo  DOCKER $i WEBSITE $1 >   /data/www/index.html"
 ssh $i docker run -d -p 80:80 -v /data/www:/usr/share/nginx/html --name nginx nginx
 sleep 10
 echo "set server  www.wang.org_nginx/$i state ready" | socat stdio /var/lib/haproxy/haproxy.sock
done

范例四:用户无感知滚动升级 

#!/bin/bash
Web_url="www.web02.com"
WEB_SERVERS="
10.0.0.52
10.0.0.53
"
for i in $WEB_SERVERS;do
echo "set server  $Web_url/$i state maint" | socat stdio /run/haproxy/admin.sock
 ssh $i "echo  nginx $i WEBSITE $1 >   /apps/nginx/html/index.html"
 echo "set server  $Web_url/$i state ready" | socat stdio /run/haproxy/admin.sock
done
测试 
[root@haproxy ~]#bash app_upgrade.sh v1.0




[root@haproxy ~]#bash app_upgrade.sh v2.0




[root@haproxy ~]#bash app_upgrade.sh v3.0






[root@master-db ~]#while true ;do curl 172.16.1.211 ;sleep 0.8; done
nginx 10.0.0.53 WEBSITE v1.0
nginx 10.0.0.52 WEBSITE v1.0
nginx 10.0.0.53 WEBSITE v1.0
nginx 10.0.0.52 WEBSITE v1.0
nginx 10.0.0.53 WEBSITE v1.0
nginx 10.0.0.52 WEBSITE v1.0
nginx 10.0.0.53 WEBSITE v1.0
nginx 10.0.0.52 WEBSITE v2.0
nginx 10.0.0.53 WEBSITE v2.0
nginx 10.0.0.52 WEBSITE v2.0
nginx 10.0.0.53 WEBSITE v2.0
nginx 10.0.0.52 WEBSITE v2.0
nginx 10.0.0.53 WEBSITE v2.0
nginx 10.0.0.52 WEBSITE v2.0
nginx 10.0.0.53 WEBSITE v2.0
nginx 10.0.0.52 WEBSITE v2.0
nginx 10.0.0.53 WEBSITE v2.0
nginx 10.0.0.52 WEBSITE v3.0
nginx 10.0.0.53 WEBSITE v3.0
nginx 10.0.0.53 WEBSITE v3.0
nginx 10.0.0.52 WEBSITE v3.0
nginx 10.0.0.53 WEBSITE v3.0
^C

标签:HAProxy,haproxy,10.0,sock,企业级,nginx,HAProxy04,socat,root
From: https://blog.csdn.net/weixin_74814027/article/details/143564035

相关文章

  • 【HAProxy03】企业级反向代理HAProxy基础配置之子配置文件
    HAProxy基础配置官方文档:http://cbonte.github.io/haproxy-dconv/http://cbonte.github.io/haproxy-dconv/2.1/configuration.html使用子配置文件当业务众多时,将所有配置都放在一个配置文件中,会造成维护困难。可以考虑按业务分类,将配置信息拆分,放在不同的子配置文件中......
  • 企业级邮件系统架构
    通常是将**外部邮件网关(MailGateway)**放置在企业网络的边界,负责接收和发送所有外部邮件流量,并将内部邮件流量引导至内网的Exchange服务器群组。内部的Exchange服务器通过负载均衡器(LoadBalancer)或数据库可用性组(DAG)等技术来共同承担邮件服务的负载。这种架构设计旨在......
  • 如何在Linux上配置软件负载均衡(如HAProxy)
    在Linux环境中,确保应用服务的高可用性和性能是至关重要的。本文将引导你完成以下步骤:1.理解软件负载均衡的重要性;2.选择合适的负载均衡器;3.详细配置HAProxy为例;4.进行性能调优和测试;5.监控和维护。开始负载均衡配置之前,首先需要明确其作用和目标。1.理解软件负载均衡的重要性......
  • GaussDB企业级AI-Native分布式数据库
    华为GaussDB是一个企业级AI-Native分布式数据库。GaussDB采用MPP(MassiveParallelProcessing)架构,支持行存储与列存储,提供PB(Petabyte,2的50次方字节)级别数据量的处理能力。华为Gauss数据库是全球首款AI-Native数据库,能够同时支持X86、ARM、GPU、NPU等异构计算。数......
  • 使用Ubuntu系统管理包工具(apt)部署Zabbix企业级监控系统
    1.系统版本UbuntuVERSION=22.04.4LTS2.zabbix安装2.1zabbix官方https://www.zabbix.com/cn/download?zabbix=7.0&os_distribution=ubuntu&os_version=22.04&components=server_frontend_agent&db=mysql&ws=apache2.2配置选择2.3使用Ubuntu的管理包工具(apt)部......
  • Nginx和HAProxy对比,各有什么优点与不足
    当我们对比Nginx和HAProxy时,可以突出几点核心优缺点:Nginx以其高性能、灵活的配置和异步事件驱动的架构脱颖而出;而HAProxy则以其专为高可用性环境设计的安全特性和精细的负载均衡策略被广泛认可。Nginx支持同时处理数以千计的连接而几乎不增加内存开销、提供动静分离、反向代理和......
  • 「漏洞复现」BladeX企业级开发平台 tenant/list SQL 注入漏洞复现(CVE-2024-33332)
    0x01 免责声明请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,作者不为此承担任何责任。工具来自网络,安全性自测,如有侵权请联系删除。本次测试仅供学习使用,如若非法他用,与平台和本文作者无关,需......
  • CMDB平台(进阶篇):企业级CMDB的高阶教程
    企业IT架构日益复杂,配置项数量庞大且关系错综复杂。为了有效管理这些配置项,确保IT服务的稳定性和可靠性,配置管理数据库(ConfigurationManagementDatabase,简称CMDB)系统应运而生。本文将深入探讨企业搭建CMDB系统所需具备的要素,以及实践路径,旨在为企业提供有益的参考和指导。 ......
  • 基于Java+SpringBoot+Vue+HTML5企业级工位管理系统(源码+LW+调试文档+讲解等)/企业级
    博主介绍......
  • 主动管理技术(Active Management Technology,AMT)是英特尔(Intel)推出的一种硬件管理解决方
    主动管理技术(ActiveManagementTechnology,AMT)是英特尔(Intel)推出的一种硬件管理解决方案,专门用于企业级计算环境。AMT是英特尔管理引擎(IntelManagementEngine,ME)的一部分,旨在提供全面的远程管理和维护功能。以下是AMT的主要特点和功能:1. 远程管理远程访问:AMT允许IT管理员在操......