haproxy作为七层负载均衡调度器




(二)haproxy入门


  • 安装haproxy

 
 
1:RPM包安装
yum install -y haproxy
2:编译安装
http:/ /www.haproxy.org/ #down
例如安装 1.7. 9版本
http:/ /www.haproxy.org/download /1.7/src /haproxy-1.7.9.tar.gz
编译参数自行解决,网上一大堆
  • 配置文件介绍(主配置文件/etc/haproxy/haproxy.cfg)只要这三段配置ok了,那么haproxy的七层负载均衡就搞定了

 
 
1:全局指令配置段
2:统计页面配置段
3:反向代理配置段
1)定义静态后端主机
2)定义动态后端主机
3)定义前端调度器

(二)haproxy配置文件全解


  • haproxy配置文件实例(带读写分离功能)

 
 
# 全局配置段
global
# 指定日志记录路径,这个local2是需要在/etc/rsyslog.conf文件中指定的,指定了日志存储路径之后,需要重启rsyslog服务哦
log 127.0 .0 .1 local2
# 指定haproxy的运行环境
chroot /var/lib/haproxy
# 指定进程的pid
pidfile /var/ run/haproxy.pid
# 指定单个进程的最大并发连接数
maxconn 4000
# 指定允许haproxy的用户
user haproxy
# 指定允许haproxy的组
group haproxy
# 指定haproxy以守护进程模式运行
daemon
# 设置后台运行2个haproxy进程,但是后台运行了3个进程
nbproc 2
# 指定Unix socket通信(基本没用过)
# stats socket /var/lib/haproxy/stats
# 这里是默认的选项,如何在listen段,backend段,frontend段中将这些选项按需求重新制定
defaults
# 指定默认的模式
mode http
# 指定日志信息使用全局指定的日志存储路径,全局日志是存储在rsyslog服务中
log global
# 将log日志记录到rsyslog日志服务器中,指定日志级别为notice级别
log 192.168 .23 .10 local10 notice
# 日志格式可以不指定,有其默认的值
#log-format %T\ %t\ Some\ Text
# 指定压缩类型
compression algo gzip
# 指定需要压缩的资源类型
compression type text/html text/plain
option httplog
option dontlognull
option http-server-close
# 在后端服务器中可以记录客户端的源IP地址,在日志中加上%{X-Forwarded-For}i
option forwardfor except 127.0 .0 .1/ 8
# 如果后端服务器不提供服务,那么将会重新di
option redispatch
retries 3
timeout http-request 10s
timeout queue 1m
timeout connect 10s
timeout client 1m
timeout server 1m
timeout http-keep-alive 10s
timeout check 10s
# 指定接受10000个并发
maxconn 10000
# haproxy统计页面配置段
listen stats
# 指定统计页面监听的端口
bind *: 33559
# 指定统计页面运行的模式
mode http
# 指定开启统计页面功能
stats enable
# 如果不设置URI,默认是/haproxy?stats
stats uri /admin
# 指定登入是提示信息,\表示转义空白字符
stats realm HAProxy\ statistics
# 指定用户名和密码
stats auth uplooking: 123456
# 指定统计页面自动刷新的时长
stats refresh 20
# 如果用户认证成功,统计页面可以被访问
stats admin if TRUE
#隐藏统计页面上HAProxy的版本信息
stats hide- version
# 指定后端php动态资源主机组,后端的动态资源不做缓存,直接将请求反代值后端的app servers中
backend phpservers_backend
# 这里使用了cookie粘性机制,当客户端没有被设置cookie值的时候,通过轮询调度到app servers主机上
balance roundrobin
# 指定我们需要插入的cookie的key为PHP,使用的是insert方法,indirect表示如何会话已经有cookie值了,将不会再次发送cookie到客户端,nocache表示如果客户端和haproxy之间有代理,那么指定nocache将不会将所有的请求都发往一台服务器, 也可以认为是不缓存的意思
cookie PHP insert indirect nocache
# server后面的cookie参数是给当前server指定cookie值,使得客户端请求报文中会夹带这个cookie的值,当报文发送到haproxy的时候,haproxy会根据cookie的值判断将报文调度到哪台后端服务器,这样就使得同一个客户端的请求,发往同一台后端服务器
server phpserver1 192.168 .23 .23: 8000 check weight 1 cookie phpserver1 maxconn 3000 maxqueue 500
server phpserver2 192.168 .23 .24: 8000 check weight 2 cookie phpserver2 maxconn 6000 maxqueue 500
# 指定后端varnish静态资源缓存主机组
backend varnish_backend
# 将客户端请求的URI做哈希计算,使得相同的URI的请求始终发往后端的同一台缓存服务器,基于URL做哈希计算,使得varnish缓存的命中率提高,uri算法适用于后端为vanish这样的缓存服务器
balance uri
# 使用的的hash类型是一致性哈希算法
hash-type consistent
# 使用http协议做健康状态检查,默认是tcp协议
option httpchk
server varnish_server1 192.168 .23 .17: 7000 check maxconn 5000
server varnish_server2 192.168 .23 .18: 7000 check maxconn 5000
server varnish_server3 192.168 .23 .19: 7000 check maxconn 10000 backup
# 指定当请求到达的时候,如果是静态资源的请求,将请求调度到varnish主机组,默认是发送给后端web动态资源主机组
# 相当于Nginx中的server的listen指令,frontend 配置段用于监听用户请求,
frontend myservers_frontend
bind *: 80
# 设置一个访问控制规则,只要请求路径为静态资源的都会被匹配到,并且发往varnish主机组
acl varnish_page path_beg -i /static /images /javascript /stylesheets
acl varnish_page path_end -i .jpg .gif .png .jpeg .css .js .html .txt .htm .ico
use_backend varnish_backend if varnish_page
# 没有被匹配到的请求全部发往phpservers_backend服务器
default_backend phpservers_backend

(三)haproxy调度算法、hash类型讲解


  • 调度算法详解

 
 
用balance指令指明调度算法, 例如:balance roundrobin
1:roundrobin :动态轮询算法,基于后端服务器的总权重做轮询,后端的服务器数量限制在4095个以内,并且支持慢启动机制
2:static-rr:动态轮询算法,基于后端服务器的总权重做轮询,后端的服务器数量无限制,不支持慢启动机制
3:leastconn:最少连接算法
4:first:当请求调度到后端某一台服务器之后,必须让这台服务器达到最大并发请求,才会将新的请求调度到其他的主机上
5: source:基于客户端的IP做 hash计算,到底使用 hash取摸算法还是 hash一致性算法,取决于 hash-type指令的值
6:uri:基于客户端请求的URI做 hash计算,到底使用 hash取摸算法还是 hash一致性算法,取决于 hash-type指令的值,适用于后端为varnish这样的缓存服务器
7:url_param:基于客户端请求URL的参数做 hash计算,到底使用 hash取摸算法还是 hash一致性算法,取决于 hash-type指令的值,使用与登入界面的电商站点,使得同一个用户登入,始终发往同一台后端动态服务器
8:hdr(header_name):对指定的请求报文首部请求做 hash计算,如果请求报文首部没有值,那么将轮询
  • hash-type指令详解

 
 
hash-type:指明使用什么 hash算法,有如下可选算法
(1)map-based: hash取摸调度算法
(2)consistent:一致性 hash调度算法
  • 检查配置文件是否错误的命令

 
 
haproxy -c -f /etc/haproxy /haproxy.cfg
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值