haproxy的安装和服务信息

为什么要使用haproxy?

因为LSV无后端检测,当webserver有一台状态异常,则运作异常;所以用haproxy来解决。

haproxy是一款具备高并发(万级以上)、高性能的TCP和HTTP负载均衡器,它支持基于cookie的持久性,自动故障切换,支持正则表达式及web状态统计。

目录

一、实验环境

二、haproxy基本部署

1、下载安装

2、部署

3、测试

(1)nginx服务皆开启时

(2)断开其中一个nginx服务,开启后端检测

三、基本配置信息

[(1)global 全局配置段](#(1)global 全局配置段)

[(2)proxies 代理配置段](#(2)proxies 代理配置段)

1、defaults

2、frontend

3、backend

4、listen


一、实验环境

|---------|---------------------|
| 功能 | 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协议的应用

相关推荐
单音GG27 分钟前
推荐一个基于协程的C++(lua)游戏服务器
服务器·c++·游戏·lua
安步当歌1 小时前
【WebRTC】视频发送链路中类的简单分析(下)
网络·音视频·webrtc·视频编解码·video-codec
shitian08111 小时前
用轻量云服务器搭建一个开源的商城系统,含小程序和pc端
服务器·小程序·开源
Biomamba生信基地1 小时前
Linux也有百度云喔~
linux·运维·服务器·百度云
米饭是菜qy1 小时前
TCP 三次握手意义及为什么是三次握手
服务器·网络·tcp/ip
yaoxin5211232 小时前
第十九章 TCP 客户端 服务器通信 - 数据包模式
服务器·网络·tcp/ip
new_abc2 小时前
Ubuntu 22.04 ftp搭建
linux·运维·ubuntu
flying robot2 小时前
RPM的使用
linux
鹿鸣天涯2 小时前
‌华为交换机在Spine-Leaf架构中的使用场景
运维·服务器·网络