首页 > 其他分享 >六月学习之Haproxy高级功能(一)

六月学习之Haproxy高级功能(一)

时间:2023-07-05 23:32:05浏览次数:46  
标签:Haproxy haproxy stats 六月 高级 cookie ssh 172.16 server

6、Haproxy高级功能

6.1、基于cockie会话保持

在backend服务器组启用cookie植入功能
haproxy会将后端服务器定义的serverID植入到客户端的cookie中,以保持会话的持久性,需要设置backend中的cookie以及server指定的cookie选项

6.1.1、配置示例

1、配置haproxy基于cookie实现会话绑定
#main frontend which proxy to the backends
frontend proxy.qingchen.com
    bind *:80
    mode http
    use_backend webcluster
#round robin balancing between the various backends
backend webcluster
    balance roundrobin
    #回传数据时添加Set-Cookie,Key为SERVERID,Value为节点定义cookie值
    cookie SERVERID insert nocache
    #为每个服务器定义一个cookie名称标识
    server web01 172.16.1.7:8888 check port 8888 inter 3s rise 2 fall 3 maxconn 2000 maxqueue 1000 weight 1 cookie web1
    server web02 172.16.1.8:8888 check port 8888 inter 3s rise 2 fall 3 maxconn 2000 maxqueue 1000 weight 1 cookie web2

6.1.2、验证session

客户端第一次请求,haproxy会挑选一个节点响应,并会通过Set-Cookies返回该响应的是哪台后端节点
1、定义key: SERVERID
2、定义value:为server段中的每个节点起一个名称:cookie name
3、当用户请求时,haproxy会下发一个httpheader信息,Set-Cookies:SERVERID:web1
4、当浏览器再次请求haproxy会在request中增加一个header:cookie: SERVERID:web1
5、方便实现会话保持的方案

ip_hash:基于来源ip进行hash取模,以便实现会话保持
cookie植入:haproxy很容易实现,Nginx也可以实现,需要三方模块
session共享:基于Redis实现

六月学习之Haproxy高级功能(一)_服务器

六月学习之Haproxy高级功能(一)_客户端_02


6.1.3、redispatch参数

当使用了cookie持久化连接时,haproxy将会将其请求的后端服务器定义的SERVERID插入到客户端的cookie中,以保持会话的持久性
而此时,如果后端的服务器宕机了,但是客户端的cookie是不会刷新的,如果设置此参数,将会将客户的请求强制定向到另外一个正常的后端server上,以保证服务的正常
cookie植入实现会话保持,完整配置示例
vim /etc/haproxy/haproxy.cfg
#main frontend which proxy to the backends
frontend proxy.qingchen.com
    bind *:88
    mode http
    option forwardfor except 127.0.0.1
    option redispatch  #启用redispatch
    
    maxconn 10000
    use_backend webcluster
#round robin balancing between the various backends
backend webcluster
    balance roundrobin
    #回传数据时添加Set-Cookie,Key为SERVERID,Value为节点定义cookie值
    cookie SERVERID insert nocache
    #为每个服务器定义一个cookie名称标识
    server web01 172.16.1.7:80 check cookie web1
    server web02 172.16.1.8:80 check cookie web2

6.2、基于web管理haproxy

Haproxy有统计报告功能,可以让使用者通过web页面概览后端服务器的概况,甚至更改他们的状态

6.2.1、状态页配置

#stats settings
listen haproxy-stats
    mode tcp
    bind *:80
    stats enable                 #启用stats功能
    stats refresh 5s             #设定自动刷新时间间隔
    stats hide-version           #隐藏haproxy版本
    stats uri /haproxy?stats     #stats页面的访问路径
    stats realm "HAProxy stats"  #认证信息提示
    stats auth qingchen:123456   #认证的账号和密码
    stats admin if TRUE          #启用管理功能

6.2.2、状态页登录

通过http://IP:port/haproxy?stats访问该页面

6.3、基于socat管理haproxy

6.3.1、安装socat

yum install -y socat

6.3.2、修改配置文件

vim /etc/haproxy/haproxy.cfg
global
    #turn on stats unix socket
    stats socket /var/lib/haproxy/stats level admin

systemctl restart haproxy

6.3.3、实现主机动态下上线

配置
frontend proxy.qingchen.com
    bind *:80-88
    mode http
    use_backend webcluster
#round robin balancing between the various backends
backend webcluster
    balance roundrobin
    #回传数据时添加Set-Cookie,Key为SERVERID,Value为节点定义cookie值
    #cookie SERVERID insert nocache
    #为每个服务器定义一个cookie名称标识
    server web01 172.16.1.7:8888 check port 8888 inter 3s rise 2 fall 3 maxconn 2000 maxqueue 1000 weight 1 cookie web1
    server web02 172.16.1.8:8888 check port 8888 inter 3s rise 2 fall 3 maxconn 2000 maxqueue 1000 weight 1 cookie web2

#获取详情
echo "show info" | socat stdio /var/lib/haproxy/stats

#动态下线主机
echo "disable server webservers/web1" | socat stdio /var/lib/haproxy/stats 

#动态上线主机
echo "enable server webservers/web1" | socat stdio /var/lib/haproxy/stats 

六月学习之Haproxy高级功能(一)_服务器_03

6.3.4、脚本实现动态上下线

执行前做相互免密
免密,将10.0.0.9主机与所有的节点进行免密登录;
ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]
ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]
ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]
ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]

#!/bin/bash
#集群节点
web_cluster="172.16.1.6 172.16.1.7 172.16.1.8"
#lb节点的IP
lb_server="172.16.1.5"
#集群资源池名称
cluster="webservers"
#节点的代码路径
webdir=/proxy
for host in ${web_cluster}
do
  #1、登录负载均衡
  ssh root@${lb_server} "echo 'disable server ${cluster}/${host}' | socat stdio /var/lib/haproxy/stats"
  #2、更新节点代码
  scp ./index.html.${host} root@${host}:${webdir}/index.html
  sleep 2
  #3、登录负载均衡,动态加入节点
  ssh root@${lb_server} "echo 'enable server ${cluster}/${host}' | socat stdio /var/lib/haproxy/stats"
  #4、等待几秒钟
  sleep 5
done

标签:Haproxy,haproxy,stats,六月,高级,cookie,ssh,172.16,server
From: https://blog.51cto.com/u_13236892/6636443

相关文章

  • Linux系统编程 C/C++ 以及Qt 中的零拷贝技术: 从底层原理到高级应用
    https://blog.csdn.net/qq_21438461/article/details/130764349Linux系统编程C/C++以及Qt中的零拷贝技术:从底层原理到高级应用一、零拷贝技术的概念与价值(Zero-CopyConceptandValue)1.1什么是零拷贝(WhatisZero-Copy)1.2为什么我们需要零拷贝(WhyWeNeedZero-C......
  • 11.UG移动面(高级教程)
    1.移动面-通过点与点之间的距离移动1.1选择原点、测量点、方向 2.输入距离即可将面移动到距离该测量点一定距离位置......
  • Java高级
    第06章:随堂复习与企业真题(面向对象-基础)一、随堂复习1.(了解)面向过程vs面向对象不管是面向过程、面向对象,都是程序设计的思路。面向过程:以函数为基本单位,适合解决简单问题。比如:开车面向对象:以类为基本单位,适合解决复杂问题。比如:造车2.类、对象类:抽象的,概念......
  • 六月学习之Haproxy Proxies配置
    5、HaproxyProxies配置代理相关配置frontend<name>:用于定义一系列监听的端口,这些端口可接受客户端请求并与之建立连接backend<name>:用于定义一系列后端服务器,代理将会将对应客户端的请求转发至这些服务器listen<name>:通过关联"前端"和"后端"定义了一个完整的代理5.1、mo......
  • 高级Java开发面试常用题的答案
    一、数据结构与算法基础·说一下几种常见的排序算法和分别的复杂度。·用Java写一个冒泡排序算法/**现在有一个包含1000个数的数组,仅前面100个无序,后面900个都已排好序且都大于前面100个数字,那么在第一趟遍历后,最后发生交换的位置必定小于100,且这个位置之后的数据必定已......
  • 六月学习之Haproxy default配置
    4、Haproxydefault配置defaults段用于为所有其他配置段提供默认参数4.1、option参数httplogoptionhttplog:用来记录日志,其通常包括但不限于HTTP请求、连接计时器、会话状态、连接数、捕获的首部及cookie、"frontend"、"backend"等信息。dontlognulloptiondontlognull:不记录......
  • 【学习笔记】狄利克雷卷积与高级筛法
    狄利克雷卷积概念对于数论函数\(f,g\),定义其狄利克雷卷积\(h=f*g\),满足:\[h(n)=(f*g)(n)=\sum_{d\midn}f(d)g\left(\dfrac{n}{d}\right)\]运算律:满足交换律,显然具有对称性。满足结合律,等价于三个\(d_i\)贡献到\(n\)。满足加法的分配率。常见数论函数:\(\m......
  • 【学习笔记】狄利克雷卷积与高级筛法
    狄利克雷卷积概念对于数论函数\(f,g\),定义其狄利克雷卷积\(h=f*g\),满足:\[h(n)=(f*g)(n)=\sum_{d\midn}f(d)g\left(\dfrac{n}{d}\right)\]运算律:满足交换律,显然具有对称性。满足结合律,等价于三个\(d_i\)贡献到\(n\)。满足加法的分配率。常见数论函数:\(\m......
  • Unity3D高级编程主程手记 学习笔记四:用户界面
     用户界面(UI)是游戏项目中重要的组成部分。面对一个从零开始的项目,首先要选择选用哪个UI系统作为主框架。主流公司里最常用的UI系统有:NGUI,UGUI,除此之外还有部分公司使用FairyGUI,DoozyUI。UGUI的运行原理UGUI是在3D网格下构建起来的UI系统,它的每一个可显示元素都是通过3D......
  • selenium ui自动化遇到切换窗口,点击高级并继续访问的处理方式
    在python自动化中(ui),遇到了一个需要浏览器切换窗口,点击“高级”-“接受风险并继续”的操作,前期在本地编写代码调试时,没有任何问题。切换环境,放到Linux服务中,使用无头模式去运行代码时,发现切换窗口时,总是找不到页面元素,查看截图发现页面为空白,检查两天无果。场景图片,如下图所示,当......