一、haproxy简介
软件:haproxy---主要是七层负载均衡,四层负载均衡。
负载平衡是通过的OSI协议对应。
7层负荷平衡:7层http协议;
四层负荷均衡:tcp协议加端口号的负载均衡。
ha-proxy概述 ha-proxy它是一款高性能的负载平衡软件。因为它专注于负载平衡,所以nginx在负载均衡方面做得更好,更专业。
ha-proxy的特点 ha-proxy 作为目前流行的负载均衡软件,必须有其优秀的一面。下面介绍一下ha-proxy相对LVS,Nginx等负载平衡软件的优点。
?支持tcp / http 两个协议层的负载平衡丰富了其负载平衡功能。 ?支持约8种负载平衡算法,特别是在http在模式中,有许多非常实用的负载平衡算法,适用于各种需求。 ?性能优异,基于事件驱动的链接处理模式和单过程处理模式(和Nginx类似)使其性能优异。 ?实时了解系统的现状,实时了解系统的现状。 ?功能强大的ACL支持,给用户极大的便利。 haproxy官方文件网站: https://cbonte.github.io/haproxy-dconv/ 二、Haproxy配置文件
global ///全局配置 log 127.0.0.1 local3 info //日志配置 maxconn 4096 ///最大连接限制(优先级低) user nobody group nobody daemon ///运行保护过程 nbproc 1 //haproxy进程数 defaults //针对(listen和backend如果块中没有设置块,则使用默认设置)默认配置 log global ///日志使用全局配置 mode http //模式7层LB maxconn 2048 ///最大连接数(优先级) retries 3 //健康检查。如果三次连接失败,服务将不可用。 option redispatch ///服务不可用后的操作,重定向到其他健康服务器 stats uri /haproxy //web打开页面状态模块功能 stats auth qianfeng:123 ///状态模块认证(用户名qianfeng密码123) contimeout 5000 //定义haproxy客户端!!!请求!!!转发到后端服务器,等待超时 clitimeout 50000 //haproxy作为客户,在后端服务器之间!!!免费连接!fin指令 srvtimeout 50000 //haproxy作为服务器,与用户之间空闲连接的超时间将在此时发送fin指令 #timeout connect 5000 #timeout client 50000 #timeout server 50000 frontend http-in //前端配置块。面对用户侧 bind 0.0.0.0:80 ///面对用户监控地址和端口 mode http //http模式的LB log global ///日志使用全局配置 option httplog //默认日志格式非常简单,只包括源地址、目标地址和实例名称option httplog参数会丰富日志格式,通常包括但不限于HTTP请求、连接计时器、会话状态、连接数、捕获的第一部分和cookie、“frontend”、“backend服务器名称,还包括源地址、端口号等。 option httpclose // 每次请求完成后,关闭http通道 acl html url_reg -i \.html$ //1. 访问控制列表名称html。要求访问规则html结尾的url时 use_backend html-server if html //2.如果满足acl html规则推送到后端服务器 html-server default_backend html-server // 3.默认后端服务器是 html-server backend html-server ///后端服务器的名称 html-server mode http //模式为7层代理 balance roundrobin //轮循(rr) 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 1 cookie 4 check inter 2000 rise 2 fall 5 cookie 3 服务器ID,避免rr算法将客户机请求转发给其他服务器 ,后端服务器的健康检查间隔为2000毫秒。如果连续两次健康检查成功,则视为有效。如果连续五次健康检查失败,则视为服务器停机。
三、Haproxy代理web服务
实验环境:四台服务器 client、HAproxy、web1、web2
实验部署:selinux) 1.web服务器
操作步骤:(两台web服务器都要做)
①在web安装在服务器上nginx并启动
yum -y install nginx systemctl start nginx
②创建相应的网站 echo "server-1" > /usr/share/nginx/html/index.html
2.haproxy部署
操作步骤:
①安装haproxy软件
yum -y install haproxy
②备份haproxy配置文件
mv /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.bak
③修改haproxy配置文件
vim /etc/haproxy/haproxy.cfg global log 127.0.0.1 local3 maxconn 4096 uid nobody # uid 99 gid nobody # gid 99 daemon nbproc 1 defaults log global mode http maxconn 2048 retries 3 option redispatchstats uri /haproxy stats auth qianfeng:123 contimeout 5000 clitimeout 50000 srvtimeout 50000 #timeout connect 5000 #timeout client 50000 #timeout server 50000 frontend http-in bind 0.0.0.0:80 mode http log global option httplog option httpclose acl html url_reg -i \.html$ use_backend html-server if htmldefault_backend html-serverbackend html-server mode http balance roundrobin option httpchk GET /index.html cookie SERVERID insert indirect nocacheserver html-A web1:80 weight 1 cookie 3 check inter 2000 rise 2 fall 5 server html-B web2:80 weight 1 cookie 4 check inter 2000 rise 2 fall 5
④启动haproxy服务
[root@bogon ~]# systemctl start haproxy
⑤客户测试访问
启用haproxy的日志: 1.在haproxy日志对象在配置文件中定义log 127.0.0.1(接收方IP)local3(对象)
2. 修改日志日志配置文件(添加日志规则) 对象.级别 存放位置) [root@haproxy ~]# vim /etc/rsyslog.conf
添加到以上位置:
4.重启haproxy和日志服务 [root@proxy ~]# systemctl restart rsyslog [root@proxy ~]# systemctl restart haproxy [root@proxy ~]# cd /var/log [root@proxy log]# ls
[root@proxy log]# tailf haproxy.log //实时查看日志 用客户端访问
对应的日志文件中就会出现以下内容:
用浏览器访问:
四、Haproxy+Keepalived实现七层负载
Keepalived + Haproxy ========================================= /etc/haproxy/haproxy.cfg global //关于进程的全局参数 log 127.0.0.1 local2 #日志服务器 chroot /var/lib/haproxy pidfile /var/run/haproxy.pid #pid文件 maxconn 4000 #最大连接数 user haproxy #用户 group haproxy #组 daemon #守护进程方式后台运行 defaults、listen、frontend、backend //关于Proxy配置段 defaults 段用于为其它配置段提供默认参数 listen是frontend和backend的结合体 frontend 虚拟服务VIrtual Server 监听器 接受访问并调度 backend 真实服务器Real Server Web Servers 被调度的服务器 调度器可以同时为多个站点调度,如果使用frontend、backend的方式: frontend1 backend1 frontend2 backend2 frontend3 backend3 Keepalived + Haproxy ==================================================== 拓扑结构 [vip: 192.168.246.17] [LB1 Haproxy] [LB2 Haproxy] 192.168.246.169 192.168.246.161 [httpd] [httpd] [httpd] 192.168.246.162 192.168.246.163 192.168.246.168 实验环境:准备两台haproxy,两台web服务器即可。 在haproxy代理web服务实验的基础上新添加一台haproxy-backup机器 [root@haproxy-backup ~]# yum -y install haproxy 将master上的haproxy配置文件远程拷贝给backup这台机器 [root@haproxy-master ~]# scp /etc/haproxy/haproxy.cfg 192.168.112.141:/etc/haproxy/ [root@haproxy-backup ~]# vim /etc/haproxy/haproxy.cfg //这步操作可不做,因为两台机器的配置文件一样 [root@haproxy-backup ~]# systemctl start haproxy [root@haproxy-backup ~]# systemctl status haproxy //查看服务的状态,这步操作可不做 用浏览器访问backup的ip地址,可以正常访问
然后两台服务器都安装keepalived [root@haproxy-master ~]# yum -y install keepalived [root@haproxy-backup ~]# yum -y install keepalived #给master这台服务器的keepalived配置文件做个备份(也可不做) [root@haproxy-master ~]# cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak [root@haproxy-master ~]# vim /etc/keepalived/keepalived.conf 将配置文件中原本的内容删除,将下面的内容添加:
[root@haproxy-master ~]# scp /etc/keepalived/keepalived.conf 192.168.112.141:/etc/keepalived/keepalived.conf [root@haproxy-backup ~]# vim /etc/keepalived/keepalived.conf
[root@haproxy-master ~]# systemctl start keepalived [root@haproxy-backup ~]# systemctl start keepalived 通过ip a 命令查看VIP在master上:
模拟master上的keepalived服务宕掉 [root@haproxy-master ~]# systemctl stop keepalived 用ip a 查看一下VIP发现VIP漂移到了backup上
[root@haproxy-master ~]# systemctl start keepalived [root@haproxy-master ~]# ip a //这时VIP又漂移回来了
haproxy可以实现对web服务器健康检查,keepalived也能实现自动主备切换
具体操作步骤: [root@haproxy-master ~]# vim /etc/keepalived/check_haproxy_status.sh
[root@haproxy-master ~]# chmod a+x /etc/keepalived/check_haproxy_status.sh [root@haproxy-master ~]# vim /etc/keepalived/keepalived.conf
[root@haproxy-master ~]# scp /etc/keepalived/check_haproxy_status.sh 192.168.112.141:/etc/keepalived/ [root@haproxy-backup ~]# chmod a+x /etc/keepalived/check_haproxy_status.sh [root@haproxy-backup ~]# vim /etc/keepalived/keepalived.conf #添加以下内容 vrrp_script check_haproxy { script "/etc/keepalived/check_haproxy_status.sh" //健康检测 interval 5 } track_script { check_haproxy //引用脚本 } 分别停止master和backup上的keepalived服务: [root@haproxy-master ~]# systemctl stop keepalived [root@haproxy-backup ~]# systemctl stop keepalived 再重新启动: [root@haproxy-master ~]# systemctl start keepalived [root@haproxy-backup ~]# systemctl start keepalived 然后通过ip a观察到VIP还是在master上 然后将haproxy-master上的haproxy宕掉 [root@haproxy-master ~]# systemctl stop haproxy 通过查看VIP是否漂移,或查看haproxy是否重新启动来验证脚本是否运行
五、Haproxy算法
roundrobin 基于权重进行轮询,在服务器的处理时间保持均匀分布时,这是最平衡,最公平的算法.此算法是动态的,这表示其权重可以在运行时进行调整.不过在设计上,每个后端服务器仅能最多接受4128个连接 static-rr 基于权重进行轮叫,与roundrobin类似,但是为静态方法,在运行时调整其服务器权重不会生效.不过,其在后端服务器连接数上没有限制 leastconn 新的连接请求被派发至具有最少连接数目的后端服务器. source 将请求的源地址进行hash运算,并由后端服务器的权重总数相除后派发至某匹配的服务器.这可以使得同一个客户端IP的请求始终被派发至某特定的服务器.