为什么要使用haproxy?
因为LSV无后端检测,当webserver有一台状态异常,则运作异常;所以用haproxy来解决。
haproxy是一款具备高并发(万级以上)、高性能的TCP和HTTP负载均衡器,它支持基于cookie的持久性,自动故障切换,支持正则表达式及web状态统计。
目录
[(1)global 全局配置段](#(1)global 全局配置段)
[(2)proxies 代理配置段](#(2)proxies 代理配置段)
一、实验环境
|---------|---------------------|
| 功能      | IP                  |
| 本地      | 172.25.254.1        |
| haproxy | eth0 172.25.254.100 |
| RS1     | eth0 172.25.254.10  |
| RS2     | eth0 172.25.254..20 |
二、haproxy基本部署
1、下载安装
[root@haproxy ~]# dnf install haproxy -y
[root@webserver1 ~]# dnf install nginx -y
[root@webserver2 ~]# dnf install nginx -y
        2、部署
[root@webserver1 ~]# echo webserver1 -- 172.25.254.10 > /usr/share/nginx/html/index.html
[root@webserver1 ~]# systemctl enable --now nginx
[root@webserver2 ~]# echo webserver2 -- 172.25.254.20 > /usr/share/nginx/html/index.html
[root@webserver2 ~]# systemctl enable --now nginx
        在 haproxy.cfg中编辑,添加图片中所示内容,其中框出的两种方式皆可用
[root@haproxy ~]# vim /etc/haproxy/haproxy.cfg
[root@haproxy ~]# systemctl enable haproxy
[root@haproxy ~]# systemctl restart haproxy.service
        
tip小技巧
3、测试

(1)nginx服务皆开启时

(2)断开其中一个nginx服务,开启后端检测
[root@webserver1 ~]# systemctl stop nginx.service
        
三、基本配置信息
HAProxy配置文件------haproxy.cfg(两部分组成:global、proxies)
(1)global 全局配置段
进程及安全配置相关的参数、性能调整相关参数、Debug参数
|---------------------------|----|---------------------------------------------------|
| 参数                        | 类型 | 作用                                                |
| chroot                    | 全局 | 锁定运行目录                                            |
| deamon                    | 全局 | 以守护进程运行                                           |
| user, group, uid, gid     | 全局 | 运行haproxy的用户身份                                    |
| stats socket              | 全局 | 套接字文件                                             |
| nbproc N                  | 全局 | 开启的haproxy worker进程数,默认进程数1                       |
| nbthread 1 (与nbproc互斥)    | 全局 | 指定每个人haproxy进程开启的线程数,默认为每个进程一个线程                  |
| cpu-map 1 0               | 全局 | 绑定haproxy worker进程至指定CPU,将第1个work进程绑定至0号CPU       |
| cpu-map 2 1               | 全局 | 绑定haproxy worker进程至指定CPU,将第2个work进程绑定至1号CPU       |
| maxconn N                 | 全局 | 每个haproxy进程的最大并发连接数                               |
| maxsslconn N              | 全局 | 每个haproxy进程ssl最大连接数,用于haproxy配置了证书的场景下            |
| maxconnrate N             | 全局 | 每个进程每秒创建的最大连接数量                                   |
| spread-checks N           | 全局 | 后端server状态check随机提前或延迟百分比时间,建议2-5(20%-50%)之间,默认值0 |
| pidfile                   | 全局 | 指定pid文件路径                                         |
| log 127.0.0.1 local2 info | 全局 | 定义全局的syslog服务器;日志服务器需要开启UDP协议,最多可以定义两个            |
示例:
nbproc 2    #开启两个进程
        

# 当启用多进程时,需绑定进程至指定CPU,避免CPU漂移
cpu-map 1 0    #进程和cpu核心绑定防止cpu抖动从而减少系统资源消耗
cpu-map 2 1    #2 表示第二个进程,1表示第二个cpu核心
        
# 日志文件------定向haproxy的日志
[root@haproxy ~]# vim /etc/haproxy/haproxy.cfg    # 查看定义标准
[root@haproxy ~]# vim /etc/rsyslog.conf    # 开启UDP服务,定义haproxy日志文件位置
[root@haproxy ~]# systemctl restart rsyslog.service
[root@haproxy ~]# systemctl restart haproxy.service
        



(2)proxies 代理配置段
defaults:为frontend, backend, listen 提供默认配置
frontend:前端,相当于nginx中的server{}
backend:后端,相当于nginx中的upstream{}
listen:同时拥有前端和后端配置,配置简单,生产推荐使用
|---------------|---------|--------------------------------------------------------|
| 参数            | 类型      | 作用                                                     |
| defaults [] | proxies | 默认配置项,针对以下的frontend、backend和listen生效,可以多个name也可以没有name |
| frontend      | proxies | 前端servername,类似于Nginx的一个虚拟主机server和LVS服务集群。            |
| backend       | proxies | 后端服务器组,等于nginx的upstream和LVS中的RS服务器                     |
| listen        | proxies | 将frontend和backend合并在一起配置,相对于frontend和backenc配置更简洁,生产常用 |
1、defaults
|------------------------------------|--------------------------------------------------------------------------------|
| 参数                                 | 功能                                                                             |
| option abortonclose                | 当服务器负载很高时,自动结束掉当前队列处理比较久的连接,针对业务当情况选择开启                                        |
| option redispatch                  | 当server ld对应的服务器挂掉后,强制定向到其他健康的服务器,重新派发                                         |
| option http-keep-alive             | 开启与客户端的会话保持                                                                    |
| option forwardfor                  | 透传客户端真实IP至后端web服务器(在apache配置文件中加入:%{X-Forwarded-For}i后在webserer中看日志即可看到地址透传信息) |
| mode http | tcp                   | 设置默认工作类型,使用TCP服务器性能更好,减少压力                                                     |
| timeout http-keep-alive 120s       | session 会话保持超时时间,此时间段内会转发到相同的后端服务器                                             |
| timeout connect 120s               | 客户端请求从haproxy到后端server最长连接等待时间(TCP连接之前)默认单位ms                                  |
| timeout server 600s                | 客户端请求从haproxy到后端服务端的请求处理超时时长(TCP连接之后),默认单位ms,如果超时,会出现502错误,此值建议设置较大些,访止502错误   |
| timeout client 600s                | 设置haproxy与客户端的最长非活动时间,默认单位ms,建议和timeout server相同                               |
| timeout check 5s                   | 对后端服务器的默认检测超时时间                                                                |
| default-server inter 1000 weight 3 | 指定后端服务器的默认设置                                                                   |
2、frontend
bind:指定HAProxy的监听地址,可以是IPV4或IPV6,可以同时监听多个IP或端口,可同时用于listen字段中
格式:bind [<address>]:<port_range>[,...][param*]
            
            
              bash
              
              
            
          
          [root@haproxy ~]# vim /etc/haproxy/haproxy.cfg
        
注意:如果需要绑定在非本机的IP,需要开启内核参数:net.ipv4.ip_nonlocal_bind=1
backlog <backlog>#针对所有server配置,当前端服务器的连接数达到上限后的后援队列长度,注意:不支持backend
3、backend
定义一组后端服务器,backend服务器将被frontend进行调用。
mode http | tcp # 指定负载协议类型,和对应的frontend必须一致
option #配置选项
sever #定义后端realserver,必须指定IP和端口
注意:backend 的名称必须唯一,并且必须在listen或frontend中事先定义才可以使用,否则服务无法启动
option后面加 httpchk,smtpchk,mysql-check,pgsql-check,ssl-hello-chk方法,可用于实现更多应用层检测功能。
4、listen
使用listen替换 frontend和backend的配置方式,可以简化设置,通常只用于TCP协议的应用
