概述
写在前面
由于实际需要,使用到haproxy的负载均衡,也经历了一些坑,学到了不少东西,在这里分享一下配置经验
——————分割线————————
haproxy简单介绍
HAProxy 是一个开源的、高性能的负载均衡软件,主要为基于 HTTP和 TCP访问的应用服务提供负载均衡,如基于 Internet的连接服务和基于 web的应用服务。HAProxy实现的是一种事件驱动、单线程、非阻塞的架构模型,能够支撑高并发大规模的连接。
事件驱动----->相当于等通知,下一步动作取决于外部事件,可以降低上下文切换的开销
流程驱动----->相当于找事做,下一步动作取决于外部事件,使用轮询
Haproxy内部有9种负载均衡算法,轮询,hash等。
1、roundrobin
基于权重进行轮询,在服务器的处理时间保持均匀分布时,这是最平衡,最公平的算法.此算法是动态的,这表示其权重可以在运行时进行调整.不过在设计上,每个后端服务器仅能最多接受4128个连接
2、static-rr
基于权重进行轮叫,与roundrobin类似,但是为静态方法,在运行时调整其服务器权重不会生效.不过,其在后端服务器连接数上没有限制
3、leastconn
新的连接请求被派发至具有最少连接数目的后端服务器.在有着较长时间会话的场景中推荐使用此算法,如LDAP、SQL等;其并不太适用于较短会话的应用层协议,如HTTP.此算法是动态的,可以在运行时调整其权重
4、first
第一个具有可用连接槽的服务器得到连接.这些服务器将从最小到最大的id选择.一旦一个服务器到达它的最大连接数,下一个服务器将被使用.如果不定义每个服务器的maxconn参数,这个算法是无意义的.使用这个算法的目的是尽量使用最小数量的服务器以便于其他服务器可以在非密集时段待机.这个算法将忽略服务器权重
5、source
将请求的源地址进行hash运算,并由后端服务器的权重总数相除后派发至某匹配的服务器.这可以使得同一个客户端IP的请求始终被派发至某特定的服务器.不过,当服务器权重总数发生变化时,如某服务器宕机或添加了新的服务器,许多客户端的请求可能会被派发至与此前请求不同的服务器.常用于负载均衡无cookie功能的基于TCP的协议.其默认为静态,不过也可以使用hash-type修改此特性
6、uri
对URI的左半部分(“?”标记之前的部分)或整个URI进行hash运算,并由服务器的总权重相除后派发至某匹配的服务器.这可以使得对同一个URI的请求总是被派发至某特定的服务器,除非服务器的权重总数发生了变化.此算法常用于代理缓存或反病毒代理以提高缓存的命中率.需要注意的是,此算法仅应用于HTTP后端服务器场景.其默认为静态算法,不过也可以使用hash-type修改此特性
7、url_param
通过< argument>为URL指定的参数在每个HTTP GET请求中将会被检索.如果找到了指定的参数且其通过等于号”=”被赋予了一个值,那么此值将被执行hash运算并被服务器的总权重相除后派发至某匹配的服务器.此算法可以通过追踪请求中的用户标识进而确保同一个用户ID的请求将被送往同一个特定的服务器,除非服务器的总权重发生了变化.如果某请求中没有出现指定的参数或其没有有效值,则使用轮叫算法对相应请求进行调度.此算法默认为静态的,不过其也可以使用hash-type修改此特性
8、hdr(< name>)
对于每个HTTP请求,通过< name>指定的HTTP头部将会被检索.如果相应的首部没有出现或其没有有效值,则使用轮询算法对相应请求进行调度.其有一个可选选项”use_domain_only”,可在指定检索类似Host类的首部时仅计算域名部分(比如通过www.baidu.com来说,仅计算”baidu”字符串的hash值)以降低hash算法的运算量.此算法默认为静态的,可以使用hash-type修改此特性
9、rdp-cookie(name)
根据cookie(name)来锁定并哈希每一次TCP请求,可以修改hash-type、
10、random
使用随机数字作为一致性hash的键,server动态的改变会对权重有影响,适用于后台服务器变化较频繁的场景
根据硬件性能(主要是内存),haproxy可以支持4000到40000左右的连接
haproxy会为每个连接维持两个缓冲,每个缓冲的大小为8KB,再加上其它的数据,每个连接将大约占用17KB的RAM空间。
haproxy的安装配置
1. 安装
yum install -y haproxy
设置自启动
systemctl enable haproxy
查看一下安装文件 rpm -ql haproxy
查看命令 haproxy -h
2. 启动
- service haproxy start
- service haproxy status
- service haproxy stop
- 或者用以下格式
- systemctl start haproxy
- 同步时间
- 修改iptables端口
- 关闭SELinux(可选)
配置
3. 日志文件
配置haproxy日志,配置方法配置文件中已说明
(1).修改系统日志的配置文件
vim /etc/sysconfig/rsyslog
SYSLOGD_OPTIONS="-c 2 -r"
(2).增加日志设备
[root@haproxy ~]# vim /etc/rsyslog.conf
#增加一行
local2.* /var/log/haproxy.log
注:日志配置为可选项
4. 具体配置,以glance-api为例
在配置之前,需要对节点的操作系统默认配置进行修改,保证haproxy能绑定其他的虚IP
echo "net.ipv4.ip_nonlocal_bind = 1" >/etc/sysctl.d/haproxy.conf
echo 1 > /proc/sys/net/ipv4/ip_nonlocal_bind
sysctl -p
net.ipv4.ip_nonlocal_bind = 1
Haproxy的主配置文件路径一般在/etc/haproxy/haproxy.cfg下(yum安装)
haproxy 的配置文件由两部分组成:全局设定(global settings)和对代理的设定(proxies)
global settings:主要用于定义haproxy进程管理安全及性能相关的参数
proxies共分为4段:defaults,frontend,backend,listen
proxies:代理相关的配置可以有如下几个配置端组成
– defaults:为其它配置段提供默认参数,默认配置参数可由下一个“defaults”重新设定。
– frontend:定义一系列监听的套接字,这些套接字可接受客户端请求并与之建立连接。
– backend:定义“后端”服务器,前端代理服务器将会把客户端的请求调度至这些服务器。
– listen:定义监听的套接字和后端的服务器。类似于将frontend和backend段放在一起
具体配置示例
3节点+VIP
#---------------------------------------------------------------------
global
log 127.0.0.1 local2
chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid
maxconn 16000 #最大连接数,默认4000
user haproxy
group haproxy
tune.bufsize 32768
tune.maxrewrite 1024
daemon
stats socket /var/lib/haproxy/stats
defaults
mode http
log global
option httplog #日志类别http日志格式
option dontlognull #不记录没有数据的心跳检测包
option http-server-close
option forwardfor except 127.0.0.0/8 #不记录本机转发的日志
option redispatch
retries 3 #3次连接失败就认为服务不可用
timeout http-request 10s
timeout queue 1m
timeout connect 10s
timeout client 100m
timeout server 100m
timeout http-keep-alive 10s #长连接超时
timeout check 10s
maxconn 8000 #一般设置为全局的一半
listen stats #定义一个统计报告服务
bind 127.0.0.1:10000
mode http
stats enable
stats uri /
stats refresh 5s
stats show-node
stats show-legends
stats hide-version
stats auth admin:admin #验证账号信息
listen glance-api
bind 192.168.22.229:9292
balance roundrobin #负载均衡模式:轮询
option httpchk
option httplog
option httpclose
timeout server 11m
server node-1 192.168.22.234:9292 check inter 10s fastinter 2s downinter 3s rise 3 fall 3
server node-2 192.168.22.235:9292 check inter 10s fastinter 2s downinter 3s rise 3 fall 3
server node-3 192.168.22.236:9292 check inter 10s fastinter 2s downinter 3s rise 3 fall 3
此时haproxy监听9292端口
异常处理
如果haproxy显示绑定端口号不成功,无法启动
使用 netstat -anpt |grep 9292 查看是否有haproxy
如没有则进行如下设置
1. 要把glance-api的配置文件中绑定了0.0.0.0的IP换成绑定的虚IP,否则haproxy的监听端口将被覆盖,无法完成转发任务
2. 其次找到glance-api对应的域名,将/etc/hosts中该域名对应的IP地址改成绑定的虚IP
以上配置之后
再使用 telnet {IP} 9292测试是否能成功,如不行则检查防火墙,检查服务是否启动,检查配置,抓包查看
如果haproxy监听非本机IP或者非本机VIP,导致haproxy无法启动
需要进行如下设置:
echo "net.ipv4.ip_nonlocal_bind = 1" >/etc/sysctl.d/haproxy.conf
echo 1 > /proc/sys/net/ipv4/ip_nonlocal_bind
sysctl -p
5. 测试
可访问haproxy前端web界面,端口为stats设置的端口,账户:密码为admin:admin
调用服务命令访问VIP,转发成功则配置成功
———————————————————————
参考: https ? /blog.51cto.com/freeloda/1294094
最后
以上就是清爽银耳汤为你收集整理的haproxy的最新详细配置攻略的全部内容,希望文章能够帮你解决haproxy的最新详细配置攻略所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复