目录
4层负载平衡
7层负载平衡
HAProxy Session亲缘性
1 用户IP 识别
3 session 识别
特点
项目实例1
环境:
域名解析(3台机器)
1.web1,web2创建测试页面
2.安装haproxy
***3.配置HAproxy****
haproxy 配置中分成五部分内容
4.测试结果
5.测试HAproxy状态
用nginx实现7层负载均衡
环境:
项目实例2
环境
1.域名解析
2.web1 & web2
3.phpA & phpB
***4.haproxy***
安装
***修改配置文件****
启动HAproxy
查看HAproxy状态
在客户端访问 HAproxy 测试
将网络流量负载,平衡到多个服务器的最简单方法,是使用第4层(传输层)负载平衡。以这种方式进行负载均衡将根据IP范围和端口转发用户流量
用户访问负载均衡器,负载均衡器将用户的请求转发给后端服务器的Web后端组。无论选择哪个后端服务器,都将直接响应用户的请求。通常,Web后端中的所有服务器应该提供相同的内容 - 否则用户可能会收到不一致的内容。
7层负载平衡是更复杂的负载均衡网络流量的方法是使用第7层(应用层)负载均衡。使用第7层允许负载均衡器根据用户请求的内容将请求转发到不同的后端服务器。这种负载平衡模式允许您在同一域和端口下运行多个Web应用程序服务器。
示例中,如果用户请求yourdomain.com/blog,则会将其转发到博客后端,后端是一组运行博客应用程序的服务器。其他请求被转发到web-backend,后端可能正在运行另一个应用程序。
7层负载均衡也叫应用程序负载均衡、URL负载均衡、动静分离技术
haproxy 将用户IP经过hash计算后 指定到固定的真实服务器上(类似于nginx 的IP hash 指令)
配置指令 balance source
haproxy 将WEB服务端发送给客户端的cookie中插入(或添加前缀)haproxy定义的后端的服务器COOKIE ID。
配置指令例举 cookie SESSION_COOKIE insert indirect nocache
haproxy 将后端服务器产生的session和后端服务器标识存在haproxy中的一张表里。客户端请求时先查询这张表。
配置指令例举 appsession JSESSIONID len 64 timeout 5h request-learn
•支持tcp / http 两种协议层的负载均衡,使得其负载均衡功能非常丰富。
•支持8种左右的负载均衡算法,尤其是在http模式时,有许多非常实在的负载均衡算法,适用各种需求。
•性能非常优秀,基于事件驱动的链接处理模式及单进程处理模式(和Nginx类似)让其性能卓越。
•拥有一个功能出色的监控页面,实时了解系统的当前状况。
•功能强大的ACL支持,给用户极大的方便。
客户端:win10
haproxy:192.168.31.186
web1: 192.168.31.188
web2: 192.168.31.187
vim /etc/hosts
192.168.31.186 haproxy
192.168.31.188 web1
192.168.31.187 web2
web1
#systemctl stop firewalld && setenforce 0
# yum install httpd
#echo apache1 > /var/www/html/index.html
#systemctl ebable httpd && systemctl start httpd
web2
#systemctl stop firewalld && setenforce 0
#yum -y install nginx
#echo nginx1 >/usr/share/nginx/html/index.html
# yum install epel-release -y
#yum -y install haproxy
global: 设置全局配置参数,属于进程的配置,通常是和操作系统相关。
defaults:配置默认参数,这些参数可以被用到frontend,backend,Listen组件;
frontend:接收请求的前端虚拟节点,Frontend可以更加规则直接指定具体使用后端的backend;
backend:后端服务集群的配置,是真实服务器,一个Backend对应一个或者多个实体服务器;
Listen :frontend和backend的组合体。
# vim /etc/haproxy/haproxy.cfg
重要的
acl html url_reg -i \.html$
use_backend html-server if html
default_backend html-server
server html-A web1:80 weight 1 cookie 3 check inter 2000 rise 2 fall 5
server html-B web2:80 weight 2 cookie 4 check inter 2000 rise 2 fall 5
global
log 127.0.0.1 local3 info
maxconn 4096
user nobody
group nobody
daemon #deamon:守护进程运行
nbproc 1 #haproxy进程数,该值的设置应该和服务器的CPU核心数一致
pidfile /run/haproxy.pid #haproxy进程ID存储位置
defaults
log global #log:日志使用全局配置
mode http #mode:模式7层LB
maxconn 2048 #maxconn:最大连接数(优先级中)
retries 3 #retries:健康检查。3次连接失败就认为服务不可用
option redispatch
#服务不可用后的操作,重定向到其他健康服务器
contimeout 5000
#(重传计时器)定义haproxy将客户端请求转发至后端服务器,等待超时时长
clitimeout 50000
#(向后长连接)haproxy作为客户,和后端服务器之间!!!空闲连接!!!的超时时间,到时候发送fin指令
srvtimeout 50000
#(向前长连接)haproxy作为服务器,和用户之间空闲连接的超时时间,到时候发送fin指令
option abortonclose #当服务器负载很高的时候,自动结束掉当前队列处理比较久的链接
stats uri /admin?stats #设置统计页面的uri为/admin?stats
stats realm Private lands #设置统计页面认证时的提示内容
stats auth admin:password
#设置统计页面认证的用户和密码,如果要设置多个,另起一行写入即可
stats hide-version #隐藏统计页面上的haproxy版本信息
frontend http-in
bind 0.0.0.0:80
mode http
log global
option httplog
#默认日志格式非常简陋,仅包括源地址、目标地址和实例名称,而“option httplog参数将会使得日志格式变得丰富许多,其通常包括但不限于HTTP请求、连接计时器、会话状态、连接数、捕获的首部及cookie、“frontend”、“backend”及服务器名称,当然也包括源地址和端口号等。
option httpclose #每次请求完毕后,关闭http通道
acl html url_reg -i \.html$ #访问控制列表名称html。规则要求访问以html结尾的url时
use_backend html-server if html #如果满足acl html规则,则推送给后端服务器 html-server
default_backend html-server #默认的后端服务器是 html-server
backend html-server #后端服务器名称为 html-server
mode http
balance roundrobin #算法为轮训
option httpchk GET /index.html #允许用http协议检查server 的健康
cookie SERVERID insert indirect nocache
#轮询的同时,根据插入的cookie SERVERID 的值来做会话保持,将相同的用户请求,转发给相同的真实服务器。
server html-A web1:80 weight 1 cookie 3 check inter 2000 rise 2 fall 5
server html-B web2:80 weight 2 cookie 4 check inter 2000 rise 2 fall 5
# 服务器ID,避免rr算法将客户机请求转发给其他服务器 ,对后端服务器的健康状况检查间隔为2000毫秒,连续2次健康检查成功,则认为是有效的,连续5次健康检查失败,则认为服务器宕机
systemctl start haproxy.service
elinks --dump http://192.168.31.186
http://192.168.31.186/admin?stats
客户端:win10
nginx: 192.168.31.186
web1: 192.168.31.188
web2: 192.168.31.187
配置还用之前环境的配置
在186上修改配置
# systemctl stop haproxy
# yum -y install nginx
# vim /etc/nginx/nginx.conf
upstream html {
server web1:80;
server web2:80
}
server{
location / {
proxy_pass http://html;
}
}
haproxy 192.168.31.186
phpA 192.168.31.190
phpB 192.168.31.191
web1 192.168.31.192
web2 192.168.31.193
client win10
vim /etc/hosts
haproxy 192.168.31.186
phpA 192.168.31.190
phpB 192.168.31.191
web1 192.168.31.192
web2 192.168.31.193
# yum install httpd -y
web1: #echo web1 >/var/www/html/index.html && systemctl start httpd
web2: #echo web2 >/var/www/html/index.html && systemctl start httpd
yum -y install nginx,php
phpA: #echo phpA>/usr/share/nginx
# yum -y install haproxy
# vim /etc/haproxy/haproxy.cfg
global
log 127.0.0.1 local3 info
maxconn 4096
user nobody
group nobody
daemon
nbproc 1
defaults
log global
mode http
maxconn 2048
retries 3
option redispatch
stats uri /haproxy
stats auth admin:password
contimeout 5000
clitimeout 50000
srvtimeout 50000
frontend http-in
bind 0.0.0.0:80
mode http
log global
option httplog
option httpclose
acl php url_reg -i \.php$
acl html url_reg -i \.html$
use_backend php-server if php
use_backend html-server if html
default_backend html-server
backend php-server
mode http
balance roundrobin
option httpchk GET /index.php
cookie SERVERID insert indirect nocache
server php-A phpA:80 weight 1 cookie 1 check inter 2000 rise 2 fall 5
server php-B phpB:80 weight 1 cookie 1 check inter 2000 rise 2 fall 5
backend html-server
mode http
balance roundrobin
option httpchk GET /index.html
cookie SERVERID insert indirect nocache
server html-A web1:80 weight 1 cookie 1 check inter 2000 rise 2 fall 5
server html-B web2:80 weight 1 cookie 1 check inter 2000 rise 2 fall 5
# systemctl start haproxy
用浏览器打开
主要配置
frontend http-in
bind 0.0.0.0:80 #任意的都可以进来
mode http
log global
option httplog
#默认日志格式非常简陋,仅包括源地址、目标地址和实例名称,而“option httplog参数将会使得日志格式变得丰富许多,其通常包括但不限于HTTP请求、连接计时器、会话状态、连接数、捕获的首部及cookie、“frontend”、“backend”及服务器名称,当然也包括源地址和端口号等。
option httpclose #每次请求完毕后,关闭http通道
acl html url_reg -i \.html$ #访问控制列表名称html。规则要求访问以html结尾的url时
use_backend html-server if html #如果满足acl html规则,则推送给后端服务器 html-server
default_backend html-server #默认的后端服务器是 html-server
backend html-server #后端服务器名称为 html-server
mode http
balance roundrobin #算法为轮训
option httpchk GET /index.html #允许用http协议检查server 的健康
cookie SERVERID insert indirect nocache
#轮询的同时,根据插入的cookie SERVERID 的值来做会话保持,将相同的用户请求,转发给相同的真实服务器。
server html-A web1:80 weight 1 cookie 3 check inter 2000 rise 2 fall 5
server html-B web2:80 weight 2 cookie 4 check inter 2000 rise 2 fall 5
# 服务器ID,避免rr算法将客户机请求转发给其他服务器 ,对后端服务器的健康状况检查间隔为2000毫秒,连续2次健康检查成功,则认为是有效的,连续5次健康检查失败,则认为服务器宕机