HAPRoxy(一):HAProxy基本配置、调度算法与tcp、http、heath模式配置示例
一、HAProxy安装
1.HAProxy简单介绍
HAProxy虽然名字前有HA,但它并不是一款高可用软件,而是一款用于实现负载均衡的软件,可实现四层与七层的负载均衡。
2.yum安装HAProxy
HAProxy已经包含在yum的base中,版本为1.15,可以直接yum安装
~]# yum install -y haproxy
HAProxy的配置文件路径为:/etc/haproxy/haproxy.cfg
主程序路径为:/usr/sbin/haproxy
3.HAProxy配置
HAProxy配置段分为两大部分:
1.全局配置段,在配置文件中的标识为global,主要功能有如下:
a.在global中可以对HAProxy的进程及安全相关参数进行配置
b.性能调整
c.Debug
2.代理配置段,在配置文件中的标识为proxyies,它还分为如下小段:
a.default:为frontend,listen,backend提供默认配置
b.frontend:前端主机配置,可类比于Nginx的server { }
c.listen:将前端和后端整合在一起配置,同时拥有前端和后端。
HAProxy简单配置示例
HAProxy默认配置如下:
global
local2.* /var/log/haproxy.log #HAProxy日志文件依赖于rsyslog,这里的log配置与rsyslog相关
chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid #运行的pid文件路径
maxconn 4000 #设置最大可支持的并发连接数
user haproxy
group haproxy
daemon
# turn on stats unix socket
stats socket /var/lib/haproxy/stats defaults
mode http #设置HAProxy默认的工作模式,有tcp,http,health三种
log global
option httplog
option dontlognull
option http-server-close
option forwardfor except 127.0.0.0/
option redispatch
retries
timeout http-request 10s
timeout queue 1m
timeout connect 10s
timeout client 1m
timeout server 1m
timeout http-keep-alive 10s
timeout check 10s
maxconn 3000 #最大连接数 frontend main *:
acl url_static path_beg -i /static /images /javascript /styl
esheets
acl url_static path_end -i .jpg .gif .png .css .js use_backend static if url_static
default_backend app backend static
balance roundrobin
server static 127.0.0.1: check backend app
balance roundrobin
server app1 127.0.0.1: check
server app2 127.0.0.1: check
server app3 127.0.0.1: check
server app4 127.0.0.1: check
简单的代理段配置:
frontend web #自定义前端服务器名,这里为web
bind *:80 #设置监听的端口与IP
default_backend websrvs #配置默认调用的名为websrvs的后端服务器组 backend websrvs #定义后端服务器名
balance roundrobin #配置算法类型
server srv1 172.16.100.6: check #配置主机参数,check为健康状态检测
server srv2 172.16.100.7: check
说到HAProxy的调度算法,这里简单介绍一下:
HAProxy调度算法:
HAProxy在balance中定义
格式为 balance <algorithm> [ <arguments> ]
1.roundrobin 根据服务器权重轮询的算法,可以自定义权重,它支持慢启动,并能在运行时修改权重,所以是一种动态算法。最多支持4095台后端主机。
2.static-rr 与roundrobin类似,static-rr也是一种轮询算法,但它是静态的,对后端主机数量无限制。
3.leastconn 最小连接数算法,一种可以根据后端主机连接数情况进行调度的动态算法,支持慢启动和运行时调整,可将新的请求调度至连接数较少的后端主机。与LVS中lc算法类似。
4.first 根据服务器标识顺序选择服务器,当服务器承载的连接数达到maxconn的值后便将新情求调度至下一台服务器。此算法只在一些特殊场景下使用。
5.source 对请求的源IP地址进行hash处理,根据hash运算处理结果调度至后端服务器。可使固定IP的请求始终调度至统一服务器。
6.uri 根据请求的uri进行hash处理并调度之后端主机。
7.url_param 将URL的参数进行判断并进行hash计算,参数可以自定义,任何的URL参数都可以。
8.hdr <name>根据请求中的HTTP报文首部的值进行hash计算并调度。name可以是GET、USERAGENT等首部名。
HAProxy可以选择普通hash算法也可以选择一致性hash算法。可用参数hash_type配置。
4.HAProxy中四层负载与七层负载的简单演示
mode参数可设置HAProxy工作在四层还是七层,在HAProxy中mode有三种工作模式:
1.tcp:基于layer4实现代理;可代理mysql, pgsql, ssh, ssl等协议;
2.http:仅当代理的协议为http时使用;
3.health:工作为健康状态检查的响应模式,当连接请求到达时回应“OK”后即断开连接;
1.tcp模式下负载均衡简单示例
IP分配如下:
HAProxy主机:192.168.29.101
后端主机1:192.168.29.102 后端主机2:192.168.29.103
客户端主机:192.168.29.104
将默认配置/etc/haproxy/haproxy.cfg中默认的frontend、backend注释掉,重新添加如下配置:
listen sshd
mode tcp
bind *:
balance leastconn
server sshd1 192.168.29.102: check
server sshd2 192.168.29.103: check
启动HAProxysy
~]# stemctl start haproxy
注:所有服务器都关闭了firewall和selinux
用客户端做测试,看ssh请求是否由HAProxy负载均衡至后端,如下图:
2.http模式下负载均衡简单示例
a.在两台后端服务器上yum安装Nginx服务
b.设置默认主页index.html,将主页内容设置分别设置为B1和B2。
c.开启Nginx服务,检查80端口是否在监听状态。
d.配置HAProxy服务,注释掉上例中的listen配置,添加配置文件如下(本示例的配置也可在listen中配置,这里为不与上例重复,分别在frontend和backend中配置):
frontend myweb
bind *:
default_backend app backend app
balance roundrobin
server app1 192.168.29.102: check
server app2 192.168.29.103: check
重启HAProxy后在客户端访问HAProxy主机并刷新,可看到内容不断切换,说明http请求被负载均衡代理至后端主机,调度算法为roundrobin:
5.HAProxy的cookie配置基础
1.什么是cookie?
由于HTTP是一种无状态的协议,服务器单从网络连接上无从知道客户身份。怎么办呢?就给客户端们颁发一个通行证吧,每人一个,无论谁访问都必须携带自己通行证。这样服务器就能从通行证上确认客户身份了。这就是Cookie的工作原理。Cookie实际上是一小段的文本信息。客户端请求服务器,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie。客户端浏览器会把Cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。服务器检查该Cookie,以此来辨认用户状态。服务器还可以根据需要修改Cookie的内容。
2.为什么需要cookie?
举一个大家都在举的例子:客户端第一次访问某购物网站时,集群中负载均衡会根据设置好的算法分配至后端某服务器A,若负载均衡开启了cookie机制,则负载均衡会给客户端一个身份标识,以后只要是该客户访问网站,都会将请求发送至后端服务器A。这就绑定了用户和后端服务器。与ip_hash不同的是,这种方式的绑定更精细,设置更灵活,就算用户换IP也不会影响绑定。
3.cookie简单配置
基本格式:cookie <name> [ rewrite | insert | prefix ] [ indirect ] [ nocache ] [ postonly ] [ preserve ] [ httponly ] [ secure ] [ domain <domain> ]* [ maxidle <idle> ] [ maxlife <life> ]
<name>:is the name of the cookie which will be monitored, modified or inserted in order to bring persistence.
在上例配置中添加cookie配置,使客户端绑定至后端某台主机
frontend myweb
bind *:
default_backend app
stats enable #开启HAProxy的状态页功能
stats auth admin:asd12345 #设置状态页登入密码 backend app
balance leastconn
cookie server insert nocache #在nocache中插入名为server的cookie键
server app1 192.168.29.102: check cookie svr1 #server app1的键值为svr1
server app2 192.168.29.103: check cookie svr2 #server app1的键值为svr2
重启HAProxy后无论怎么刷新都不会切换内容了。查看网页的cookie内容:
说明绑定在了svr1上了。
HAPRoxy(一):HAProxy基本配置、调度算法与tcp、http、heath模式配置示例的更多相关文章
- haproxy+keepalived主备与双主模式配置
Haproxy+Keepalived主备模式 主备节点设置 主备节点上各安装配置haproxy,配置内容且要相同 global log 127.0.0.1 local2 chroot /var/lib ...
- keepalived高可用haproxy负载均衡varnish缓存wordpress的动静分离(第一次配置成功)
haproxy和nginx都可以作为七层和四层反代服务器对外提供服务,此文通过haproxy和keealived配置varnish搭建wordpress的动静分离站点 一.实验环境 五台虚拟机: ha ...
- 安装haproxy和haproxy命令
HaProxy系列文章:http://www.cnblogs.com/f-ck-need-u/p/7576137.html 1.安装haproxy CentOS自带了haproxy,但可能版本比较老. ...
- socat管理haproxy以及haproxy调优
Unix套接字命令(Unix Socket commands) socat是一个多功能的网络工具,名字来由是“Socket CAT”,可以看作是netcat的N倍加强版,socat的官方网站:http ...
- [转帖]关于网络编程中MTU、TCP、UDP优化配置的一些总结
关于网络编程中MTU.TCP.UDP优化配置的一些总结 https://www.cnblogs.com/maowang1991/archive/2013/04/15/3022955.html 感谢原作 ...
- nginx启用TCP反向代理日志配置
Nginx使用TCP反向代理日志配置不同于http 修改nginx配置文档/usr/local/nginx/conf/nginx.conf 设置日志格式 stream { log_format pro ...
- 云计算介绍、TCP/IP协议及配置
云计算介绍.TCP/IP协议及配置 1案例1:配置计算机名及工作组 1.1问题 本例要求为修改计算机名并加入工 ...
- RabbitMQ学习之集群镜像模式配置
1.增加负载均衡器 关于负载均衡器,商业的比如F5的BIG-IP,Radware的AppDirector,是硬件架构的产品,可以实现很高的处理能力.但这些产品昂贵的价格会让人止步,所以我们还有软件负载 ...
- LVS+keepalived DR模式配置高可用负载均衡集群
实验环境 LVS-Master 10.0.100.201 VIP:10.0.100.203 LVS-Slave 10.0.100.204 WEB1-Tomcat 10.0.2.29 gat ...
随机推荐
- Delphi过程和函数中变量的作用域
变量的作用域是指变量能被某一子程序识别的范围. 全局变量和局部变量.全局变量是指在程序的type区定义的变量,而局部变量是在过程或函数的定义部分声明的变量.全局变量在整个程序中都有意义,局部变量只在它 ...
- linux的system () 函数详解
linux的system () 函数详解 system(执行shell 命令)相关函数 fork,execve,waitpid,popen表头文件 #i nclud ...
- 卓豪ManageEngine参加2018企业数字化转型与CIO职业发展高峰论坛
卓豪ManageEngine参加2018企业数字化转型与CIO职业发展高峰论坛 2018年10月20日,78CIO APP在北京龙城温德姆酒店主办了主题为“新模式.新动能.新发展”的<2018企 ...
- python_day1_程序交互
程序交互 在编写程序过程中总会有程序与用户交互的场景出现,这里面提到python会使用一个方法:input 用法: 例如:请用户输入一个账号 input"Please input your ...
- iowait过高处理
网管告警: 告警主机:YiDHLWJKFZ-js-app- 主机IP:192.168.***.*** 告警项目:system.cpu.util[,iowait] 告警时间: :: 告警等级:Warni ...
- String str.trim()
String.trim() 方法不仅仅是去除字符串两端的空格字符,它能去除25种字符: ('/t', '/n', '/v', '/f', '/r', ' ', '/x0085', '/x00a0', ...
- Android框架式编程之MVP架构
MVP(Model-View-Presenter)模式.是将APP的结构分为三层:View - Presenter - Model. View 1. 提供UI交互 2. 在presenter的控制下修 ...
- Qt之使用CQU库快速开发统一风格界面
在使用Qt开发时,肯定是想让开发的项目界面统一风格:不希望每个界面都要程序员用代码去修饰美化以及进行事件处理等等,这样非常繁琐,容易出错而且没有格调:所以我就开发一个动态链接库,封装统一的风格界面.事 ...
- 使用MultipartFile上传文件
转载地址:https://www.cnblogs.com/lunaticcoder/p/9813483.html(具体的看这个这个大佬的博客) 依赖包: <!-- 上传文件依赖组件 --> ...
- C#中关于as关键字的使用
我们在实际编码中有时会用到as关键字来将对象转换为指定类型,与is类型不同的是,is关键字是用于检查对象是否与给定类型兼容,如果兼容就返回true,如果不兼容就返回false.而as关键字会直接进行类 ...