首页 > 其他分享 >安装配置HAProxy

安装配置HAProxy

时间:2023-02-22 10:22:47浏览次数:33  
标签:HAProxy haproxy stats option 配置 服务器 安装

HAProxy安装过程与日志输出配置

先安装LUA

$ yum -y install zlib gcc gcc-c++ libgcc zlib-devel pcre pcre-devel openssl openssl-devel
$ yum install -y libnl libnl-devel libnl3 libnl3-devel
$ yum install -y libnfnetlink-devel
$ cd /data
$ wget https://www.lua.org/ftp/lua-5.4.4.tar.gz
$ tar xf lua-5.4.4.tar.gz
$ cd lua-5.4.4/
$ make linux test
$ make install

再安装haproxy

可以在HAProxy的官网http:// www.haproxy.org/下载HAProxy的源码包

下载的HAProxy是目前的稳定版本haproxy-2.6.1.tar.gz

安装过程如下:

$ cd /data/
#下载解压
$ wget https://www.haproxy.org/download/2.6/src/haproxy-2.6.1.tar.gz
$ tar xf haproxy-2.6.1.tar.gz
$ cd haproxy-2.6.1/
#开始编译安装
#注意,需要指定刚刚编译安装的lua的源文件地址 指定安装位置
$ make TARGET=linux-glibc \
USE_OPENSSL=1 \
USE_LUA=1 \
USE_PCRE=1 \
USE_ZLIB=1 \
USE_SYSTEMD=1 \
LUA_LIB_NAME=lua \
LUA_INC=/data/lua-5.4.4/src/ \
LUA_LIB=/data/lua-5.4.4/src/ \
PREFIX=/usr/local/haproxy
$ make install PREFIX=/usr/local/haproxy

#haproxy默认不创建配置文件目录和日志目录,这里是创建haproxy配置文件目录和日志文件目录
$ mkdir /usr/local/haproxy/conf
$ mkdir /usr/local/haproxy/logs

#haproxy安装完成后,默认安装目录中没有配置文件,这里是将源码包里面的示例配置文件拷贝到配置文件目录
$ cp examples/option-http_proxy.cfg  /usr/local/haproxy/conf/haproxy.cfg

这样,HAProxy就安装完成了。

编写日志输出文件

rsyslog是linux系默认的日志输出系统,配置文件为/etc/rsyslog.conf,此主配置文件默认会读取/etc/rsyslog.d/*.conf目录下所有已.conf结尾的文件。

$ cat /etc/rsyslog.conf|grep IncludeConfig
$IncludeConfig /etc/rsyslog.d/*.conf

因此,这里我们为haproxy单独创建一个独立的配置文件,将文件命名为haproxy.conf,并放到/etc/rsyslog.d目录下,然后添加如下内容:

$ModLoad imudp
$UDPServerRun 514
local0.*     /usr/local/haproxy/logs/haproxy.log
&~  #如果不加这个配置,则除了在/usr/local/haproxy/logs/haproxy.log中写入日志外,也会将haproxy日志写入/var/log/message文件中。

配置rsyslog的主配置文件,开启远程日志

打开 /etc/sysconfig/rsyslog文件,将SYSLOGD_OPTIONS修改为如下内容:

SYSLOGD_OPTIONS="-c 2 -r -m 0"

其中:

  • -c 2 使用兼容模式,默认是 -c 5。
  • -r 开启远程日志。
  • -m 0 标记时间戳。单位是分钟,为0时,表示禁用该功能。

重启haproxy和rsyslog服务

配置完成后,需要重启haproxy和rsyslog服务,以保证配置生效。

$ systemctl  restart rsyslog 
$ systemctl restart haproxy.service

HAProxy基础配置与应用实例

HAProxy配置文件的组成部分

HAProxy配置文件根据功能和用途,主要有5个部分组成,但有些部分并不是必须的,可以根据需要选择相应的部分进行配置。

  • global部分

    用来设定全局配置参数,属于进程级的配置,通常和操作系统配置有关。

  • defaults部分

    默认参数的配置部分。在此部分设置的参数值,默认会自动被引用到下面的frontend、backend和listen部分中,因此,如果某些参数属于公用的配置,只需在defaults部分添加一次即可。

    而如果在frontend、backend和listen部分中也配置了与defaults部分一样的参数,那么defaults部分参数对应的值自动被覆盖

  • frontend部分

    此部分用于设置接收用户请求的前端虚拟节点

    frontend是在HAProxy1.3版本之后才引入的一个组件,同时引入的还有backend组件。

    通过引入这些组件,在很大程度上简化了HAProxy配置文件的复杂性。

    frontend可以根据ACL规则直接指定要使用的后端backend。

  • backend部分

    此部分用于设置集群后端服务集群的配置,也就是用来添加一组真实服务器,以处理前端用户的请求。

    添加的真实服务器类似于LVS中的real server节点

  • listen部分

    此部分是frontend部分和backend部分的结合体。

    在HAProxy1.3版本之前,HAProxy的所有配置选项都在这个部分中设置。

    为了保持兼容性,HAProxy新的版本仍然保留了listen组件的配置方式。

    目前在HAProxy中,两种配置方式任选其一即可。

HAProxy配置文件详解

1、global部分

配置示例如下:

global
	maxconn		20000
	ulimit-n	40031
	log			127.0.0.1 local0 info
	user		nobody
	group		nobody
	chroot		/usr/local/haproxy
	daemon
	pidfile		/usr/local/haproxy/logs/haproxy.pid

下面介绍每个选项的含义。

  • log:全局的日志配置,local0是日志设备,info表示日志级别。其中日志级别有err、warning、info、debug四种可选。这个配置表示使用127.0.0.1上的rsyslog服务中的local0日志设备,记录日志等级为info。
  • maxconn:设定每个haproxy进程可接受的最大并发连接数
  • ulimit-n: 表示最大文件打开数,ulimit-n的值必须大于maxconn的值,而且ulimit-n必须小于或等于ulimit -n的值
  • user/ group:设置运行haproxy进程的用户和组,也可使用用户和组的uid和gid值来替代。
  • chroot: 指定haproxy的工作目录
  • daemon:设置HAProxy进程进入后台运行。这是推荐的运行模式。
  • pidfile:指定HAProxy进程的pid文件。启动进程的用户必须有访问此文件的权限。

修改ulimit -n的值

$ vim /etc/security/limits.d/20-nproc.conf
#加上一下两句
*          hard      nofile       65535
*          soft      nofile       65535

然后退出重新登录

通过ulimit命令来查看

$ ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 7797
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 65535
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 7797
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited
$ ulimit -n
65535

2、defaults部分

配置示例如下:

defaults
	mode		http
	retries		3
	timeout	connect	10s
	timeout	client	20s
	timeout	server	30s
	timeout	check	5s
  • mode:设置HAProxy实例默认的运行模式,有tcp、http、health三个可选值。
    • tcp模式:在此模式下,客户端和服务器端之间将建立一个全双工的连接,不会对七层报文做任何类型的检查,默认为tcp模式,经常用于SSL、SSH、SMTP等应用。
    • http模式:在此模式下,客户端请求在转发至后端服务器之前将会被深度分析,所有不与RFC格式兼容的请求都会被拒绝。
    • health模式:目前此模式基本已经废弃,不在多说。
  • retries:设置连接后端服务器的失败重试次数,连接失败的次数如果超过这里设置的值,HAProxy会将对应的后端服务器标记为不可用。此参数也可在后面部分进行设置。
  • timeout connect:设置成功连接到一台服务器的最长等待时间,默认单位是毫秒,但也可以使用其他的时间单位后缀。
  • timeout client:设置连接客户端发送数据时最长等待时间,默认单位是毫秒,也可以使用其他的时间单位后缀。
  • timeout server:设置服务器端回应客户度数据发送的最长等待时间,默认单位是毫秒,也可以使用其他的时间单位后缀。
  • timeout check:设置对后端服务器的检测超时时间,默认单位是毫秒,也可以使用其他的时间单位后缀。

3、frontend部分

这是HAProxy配置文件的第三部分——frontend部分的配置,配置示例如下:

frontend www
         bind		*:80
         mode		http
         option		httplog
         option  	forwardfor
         option		originalto
         option		dontlognull
         option		httpclose
         log		global
         default_backend htmpool

这部分通过frontend关键字定义了一个名为www的前端虚拟节点,下面介绍每个选项的含义。

  • bind:此选项只能在frontend和listen部分进行定义,用于定义一个或几个监听的套接字。

    bind的使用格式为:

    bind [<address>:<port_range>] interface <interface>

    其中,

    • address为可选选项,其可以为主机名或IP地址,如果将其设置为“*”或“0.0.0.0”,将监听当前系统的所有IPv4地址。
    • port_range可以是一个特定的TCP端口,也可是一个端口范围,小于1024的端口需要有特定权限的用户才能使用。
    • interface为可选选项,用来指定网络接口的名称,只能在Linux系统上使用。
  • option httplog:在默认情况下,haproxy日志是不记录HTTP请求的,这样很不方便HAProxy问题的排查与监控。通过此选项可以启用日志记录HTTP请求。

  • option forwardfor:如果后端服务器需要获得客户端的真实IP,就需要配置此参数。

    由于HAProxy工作于反向代理模式,因此发往后端真实服务器的请求中的客户端IP均为HAProxy主机的IP,而非真正访问客户端的地址,这就导致真实服务器端无法记录客户端真正请求来源的IP,而X-Forwarded-For则可用于解决此问题。

    通过使用forwardfor选项,HAProxy就可以向每个发往后端真实服务器的请求添加“X-Forwarded-For”记录,这样后端真实服务器日志可以通过X-Forwarded-For信息来记录客户端来源IP。

  • option originalto :如果服务器上的应用程序想记录发起请求的原目的IP地址,需要在HAProxy上配置此选项,这样HAProxy会添加X-Original-To字段。跟上一个forwardfor类似

  • option httpclose:此选项表示在客户端和服务器端完成一次连接请求后,HAProxy将主动关闭此TCP连接。这是对性能非常有帮助的一个参数。

  • option dontlognull:保证HAProxy不记录上级负载均衡发送过来的用于检测状态没有数据的心跳包。

  • log global:表示使用全局的日志配置,这里的“global”表示引用在HAProxy配置文件global部分中定义的log选项配置格式。

  • default_backend:#指定默认的后端服务器池,也就是指定一组后端真实服务器,而这些真实服务器组将在backend段进行定义。这里的htmpool就是一个后端服务器组。

4、backend部分

接着介绍的是HAProxy配置文件的第四部分——关于backend部分的配置,配置示例如下:

backend htmpool
	mode		http
	option		redispatch
	option		abortonclose
	balance		roundrobin
	balance		static-rr
	cookie		SERVERID
	option	httpchk	HEAD	/index.html
	server	web1	10.0.0.6:80		cookie	server1	weight	6	check	inter	2000	rise	2	fall	3
	server	web2	10.0.0.7:8000	cookie	server2	weight	6	check	inter	2000	rise	2	fall	3

这个部分通过backend关键字定义了一个名为htmpool的后端真实服务器组。

下面介绍每个选项的含义。

  • option redispatch:此参数用于cookie保持的环境中。

    在默认情况下,HAProxy会将其请求的后端服务器的serverID插入到cookie中,以保证会话的SESSION持久性。

    而如果后端的服务器出现故障,客户端的cookie是不会刷新的,这就出现了问题。

    此时,如果设置此参数,就会将客户的请求强制定向到另外一个健康的后端服务器上,以保证服务的正常。

  • option abortonclose:如果设置了此参数,可以在服务器负载很高的情况下,自动结束掉当前队列中处理时间比较长的链接。

  • balance:此关键字用来定义负载均衡算法。目前HAProxy支持多种负载均衡算法,常用的有如下几种:

    • roundrobin:是基于权重进行轮叫调度的算法,在服务器的性能分布比较均匀的时候,这是一种最公平、最合理的算法。此算法经常使用。

    • static-rr:也是基于权重进行轮叫的调度算法,不过此算法为静态方法,在运行时调整其服务器权重不会生效

    • source:是基于请求源IP的算法。

      此算法先对请求的源IP进行hash运算,然后将结果与后端服务器的权重总数相除后转发至某个匹配的后端服务器。

      这种方式可以使同一个客户端IP的请求始终被转发到某特定的后端服务器

    • leastconn:此算法会将新的连接请求转发到具有最少连接数目的后端服务器。

      在会话时间较长的场景中推荐使用此算法,例如数据库负载均衡等。此算法不适合会话较短的环境中,例如基于HTTP的应用。

    • uri:此算法会对部分或整个URI进行hash运算,再经过与服务器的总权重相除,最后转发到某台匹配的后端服务器上。

    • uri_param:此算法会根据URL路径中的参数进行转发,这样可保证在后端真实服务器数量不变时,同一个用户的请求始终分发到同一台机器上。

    • hdr(): 此算法根据http头进行转发,如果指定的http头名称不存在,则使用roundrobin算法进行策略转发。

  • cookie:表示允许向cookie插入SERVERID,每台服务器的SERVERID可在下面的server关键字中使用cookie关键字定义

  • option httpchk:此选项表示启用HTTP的服务状态检测功能。

    HAProxy作为一款专业的负载均衡器,它支持对backend部分指定的后端服务节点的健康检查,以保证在后端backend中某个节点不能服务时,把从frotend端进来的客户端请求分配至backend中其他健康节点上,从而保证整体服务的可用性。

    option httpchk的用法如下:

    option httpchk <method> <uri> <version>

    其中,各个参数的含义如下:

    • method:表示HTTP请求的方式,常用的有OPTIONSGETHEAD几种方式。

      一般的健康检查可以采用HEAD方式进行,而不是才采用GET方式,这是因为HEAD方式没有数据返回,仅检查Response的HEAD是不是200状态。

      因此相对与GET来说,HEAD方式更快,更简单。

    • uri:表示要检测的URL地址,通过执行此URL,可以获取后端服务器的运行状态。

      在正常情况下将返回状态码200,返回其他状态码均为异常状态。

    • version:指定心跳检测时的HTTP的版本号。可以不指定

  • server:这个关键字用来定义多个后端真实服务器,不能用于defaults和frontend部分。使用格式为:
    server

    [:port] [param*]
    其中,每个参数含义如下:

    <name>:为后端真实服务器指定一个内部名称,随便定义一个即可。

    <address>:后端真实服务器的IP地址或主机名。

    <port>:指定连接请求发往真实服务器时的目标端口。在未设定时,将使用客户端请求时的同一端口。

    [param*]:为后端服务器设定的一系参数,可用参数非常多

    这里仅介绍常用的一些参数:

    • check:表示启用对此后端服务器执行健康状态检查。

    • inter:设置健康状态检查的时间间隔,单位为毫秒。

    • rise:设置从故障状态转换至正常状态需要成功检查的次数,例如。rise 2表示2次检查正确就认为此服务器可用。

    • fall:设置后端服务器从正常状态转换为不可用状态需要检查的次数,例如,fall 3表示3次检查失败就认为此服务器不可用。

    • cookie:为指定的后端服务器设定cookie值,此处指定的值将在请求入站时被检查,第一次为此值挑选的后端服务器将在后续的请求中一直被选中,其目的在于实现持久连接的功能。

      上面的cookie server1表示web1的serverid为server1。同理,cookie server2表示web2的serverid为server2。

    • weight:设置后端真实服务器的权重,默认为1,最大值为256。设置为0表示不参与负载均衡。

    • backup:设置后端真实服务器的备份服务器,仅仅在后端所有真实服务器均不可用的情况下才启用。

5、listen部分

HAProxy配置文件的第五部分是关于listen部分的配置

配置示例如下:

listen admin_stats
        bind 0.0.0.0:9188
        mode http
        log 127.0.0.1 local0 err
        stats refresh 30s
        stats uri /haproxy-status
        stats realm welcome login\ Haproxy
        stats auth admin:admin~!@
        stats hide-version
        stats admin if TRUE

这个部分通过listen关键字定义了一个名为“admin_stats”的实例,其实就是定义了一个HAProxy的监控页面,每个选项的含义如下:

  • stats refresh:设置HAProxy监控统计页面自动刷新的时间。

  • stats uri:设置HAProxy监控统计页面的URL路径,可随意指定。

    例如,指定stats uri /haproxy-status,就可以通过http://IP:9188/haproxy-status 查看。

  • stats realm:设置登录HAProxy统计页面时密码框上的文本提示信息。

  • stats auth:设置登录HAProxy统计页面的用户名和密码。

    用户名和密码通过冒号分割。可为监控页面设置多个用户名和密码,每行一个。

  • stats hide-version:用来隐藏统计页面上HAProxy的版本信息。

  • stats admin if TRUE:通过设置此选项,可以在监控页面上手工启用或禁用后端真实服务器,仅在haproxy1.4.9以后版本有效。

至此,完整的一个HAProxy配置文件介绍完毕了。当然,这里介绍的仅仅是最常用的一些配置参数,要深入了解HAProxy的功能,可参阅官方文档。

完整配置文件

$ cat conf/haproxy.cfg 
global
	maxconn		20000
	log			127.0.0.1 local0 info
	user		nobody
	group		nobody
	chroot		/usr/local/haproxy
	daemon
	pidfile		/usr/local/haproxy/logs/haproxy.pid
defaults
	mode			http
	retries			3
	timeout	connect	10s
	timeout	client	20s
	timeout	server	30s
	timeout	check	5s
frontend www
	bind			*:80
	mode			http
	log				global
	option			httplog
	option			forwardfor
	option			httpclose
	option			dontlognull
	default_backend	test-proxy-srv


backend test-proxy-srv
	mode		http
	option		redispatch
	option		abortonclose
	balance		roundrobin
	cookie		SERVERID
	option	httpchk	HEAD	/index.html
	server	web1	10.0.0.6:80	cookie	server1	weight	4	check	inter	2000	rise	2	fall	3
	server	web2	10.0.0.7:8000	cookie	server2	weight	6	check	inter	2000	rise	2	fall	3
	timeout connect 5s
	timeout server  5s
	retries         2
	
listen	stats
	bind	0.0.0.0:9188
	mode	http
	log	127.0.0.1	local0	err
	stats	refresh	30s
	stats	uri	/status
	stats	realm	hahahahaha
	stats	auth	admin:admin
	stats	hide-version
	stats	admin	if	TRUE

测试配置文件

$ /usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/conf/haproxy.cfg -c
[NOTICE]   (5691) : haproxy version is 2.6.1-f6ca66d
[NOTICE]   (5691) : path to executable is /usr/local/haproxy/sbin/haproxy
[WARNING]  (5691) : config : ca-file: '@system-ca' couldn't load '/etc/pki/tls/certs/ca-bundle.trust.crt'
Warnings were found.
Configuration file is valid

这样就配置成功

标签:HAProxy,haproxy,stats,option,配置,服务器,安装
From: https://www.cnblogs.com/guangdelw/p/17143402.html

相关文章

  • 快速搭建maven私服仓库并配置
    1.第一步,通过官方网站下载tar.gz包上传到服务器并解压随后进入解压目录,并执行./bin/nexusstart此时可能会出现如下异常   处理这个问题很容易,找到bin下的nexus文......
  • 手动配置ipv6地址和静态路由
    转发地址:https://www.cnblogs.com/waw/p/16321917.html1.手动配置ipv6地址1.修改配置文件,eth0换成自己的网口名称1vim/etc/sysconfig/network-scripts/ifcfg-eth0......
  • Nginx 配置
    在当今快节奏的数字世界中,企业需要能够处理大量网络流量以保持竞争力。实现这一目标的一种方法是使用像Nginx这样的高性能Web服务器。将Nginx配置为每分钟处理10000......
  • 安装软件
    yum提供了查找、安装、删除某一个、一组甚至全部软件包的命令,而且命令简洁而又好记。(1)yumyum[options][command][package..]options可选-h:帮助,-y:安装过程全......
  • 【hive】安装及修改配置文件技巧,IDEA连接linux
    1.将hive的tar文件放入到linux上2.解压安装hive文件tar-zxvfhive文件-C解压安装的目录例:tar-zxvfapache-hive-3.1.2-bin.tar.gz-C/opt/module/3.修改环境配置......
  • MySQL8.0 0 安装后,使用CMD无法启动mysql服务
    首先,先把mysql的bin路径添加到系统环境变量     第一步:在MySQL的安装文件的bin目录   例如: D:\mysql\bin   中新建一个my.ini的文件,复制进代码[my......
  • IDEA+java swing+MySQL配置
    1、建立一个java项目(不是空项目)2、创建GUIForm(减少代码压力)生成代码出现了这个窗体此时说明swing已经可用了3、连接MySQL......
  • Pycharm_windows中,Pycharm用(os.environ['HOMEPATH']拼接路径的配置文件,读取不到配置
    问题描述:pycharm用(os.environ['HOMEPATH']拼接路径的配置文件,读取不到配置文件内容,为空[]同样的路径,用cmd就能读取到配置文件内容1、cmd执行效果:>>>config=configp......
  • vue2、vue3安装vue-devtools详细版教程
    在使用Vue时,我们推荐在浏览器上安装VueDevtools。VueDevtools是Vue官方发布的调试浏览器插件,可以安装在Chrome和Firefox等浏览器上,直接内嵌在开发者工具中,使用......
  • uniapp解决未配置appkey成功运行并离线打包apk的详细图文
    官方文档https://nativesupport.dcloud.net.cn/AppDocs/usesdk/android.html一、将写好的uniapp右键→发行→原生app-本地打包→生成本地打包App资源(它会要求你登录账号)二......