欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

负载均衡服务之HAProxy基础配置

程序员文章站 2022-04-11 16:29:06
haproxy的配置文件大概可以分两段;第一段配置上global配置段即全局配置段,主要是针对haproxy的进程和安全相关的;第二段是proxies代理配置段,主要是配置haproxy前端监听那个地址那个端口以及后端server的名称、地址、端口,以及server相关属性等配置;而proxies... ......

前文我们聊了下haproxy的基础安装,以及怎样去代理后端主机的配置;当然没有很详细的去说配置文件中各指令的意思;有关haproxy的安装和代理后端server可以参考本人博客;今天我们主要来说一下haproxy global配置段常用配置指令的用法和说明;

前边我们大概说了一下haproxy的配置文件大概可以分两段;第一段配置是global配置段即全局配置段,主要是针对haproxy的进程和安全相关的配置;第二段是proxies代理配置段,主要是配置haproxy前端监听那个地址那个端口以及后端server的名称、地址、端口,以及server相关属性等配置;而proxies配置段里又分defaults配置段,这个部分主要是定义后续的backend,listen这两个段的默认配置;什么意思呢?也就是在后面的配置中如果我们没有写对应参数,它默认会继承defaults里的配置;如果说后面的配置中和前边的defaults中的配置重复了,那么就以后面的配置生效,也就是说后面的配置段优先级高于defaults里的配置;了解了haproxy的配置文件结构,接下来我们来看看haproxy的global配置段常用指令;

负载均衡服务之HAProxy基础配置

提示:以上是haproxy1.5.18yum安装里默认提供的global配置段;其中log是用来指定日志的,这里要说一下haproxy的日志,它和nginx的日志不太一样;nginx的日志是我们用access_log 指令来指定日志文件和调用日志格式的名称,意思就是把日志以增量的方式往指定的日志文件中写;而haproxy的日志不是自己记录日志,而是通过把日志发送给rsyslog服务器上的一个facility上,然后通过rsyslog的配置把指定facility上的日志记录到某个文件中或者数据中;以上配置段意思就是把haproxy的日志发送给本机的rsyslog上的local2 记录所有级别类型的日志;其实我们不用配置rsyslog,默认会把日志记录到/var/log/messages这个文件中,这是因为rsyslog中明确定义了所有facility上的info级别以及info级别以上的日志都记录到/var/log/messages中;有关rsyslog的配置说明可以参考本人博客;接下来我们来配置下,让haproxy的日志记录到/var/log/haproxy.log这个文件中去;

负载均衡服务之HAProxy基础配置

提示:在rsyslog的配置文件中明确要使用local2这个facility上的任何级别的日志都交给/var/log/haproxy.log记录;这样只是把接收日志的方式定义好了;通常如果rsyslog作为日志服务器接收非本机的其他主机日志,我们还要让rsyslog监听在udp或者tcp的514端口上(当然这个端口也可以自己指定,通常不用更改),为其他主机提供服务;所以我们除了要定义把某个facility上的所有级别的日志(当然也可以指定某些级别的日志,这个要看你想要收集那一类的日志)记录到某个文件中外,我们还要把udp或tcp的514端口打开;

负载均衡服务之HAProxy基础配置

提示:以上配置就是导入imudp模块,然后让rsyslog监听在udp的514端口;这样配置后我们就可以保存rsyslog的配置文件,然后重启rsyslog,我们就可以把haproxy的日志记录到/var/log/haproxy.log中去了;

负载均衡服务之HAProxy基础配置

提示:可以看到我们访问haproxy,其中的访问日志就记录到我们定义的/var/log/haproxy.log中去了;

chroot:该指令主要作用同vsftpd里面的chroot类似,禁锢运行目录的;一般这个参数主要是防止haproxy被恶意程序攻击后对操作系统上的其他路径资源的破环;也就是说即便haproxy被恶意程序攻破,最多只能破环我们指定的chroot目录,而非整个系统目录结构;通常情况下haproxy不会出现这种情况,为了安全我们还是配置上这个参数;如果haproxy是我们手动编译安装的,通常我们会把这个参数的值设置成很haproxy的程序编译安装时指定的目录;yum安装的基本上都是/var/lib/haproxy;一般都不会去更改它;

pidfile:该指令是指定pid文件的,通常情况下需要和unit file里指定的pid文件是同一个文件;不是同一个文件的话可能会遇到无法reload的情况;

maxconn:该指令指定haproxy的单个进程最大并发连接数;

user/group:前者用来指定运行haproxy进程的用户(属主),后者是用来指定运行进程的用户属组

uid/gid:前者用来指定运行haproxy工作进程的用户id,后者是指定组id;以上两种方式都是来指定运行haproxy进程的用户身份;默认情况是用的id为99的用户(nobody用户)

deamon:此指令表示haproxy以守护进程运行;

stats socket:指定unix socket文件路径;主要用于本机交互的方式管理haproxy;

以上是haproxy1.5.18配置文件中global段配置选项的说明;在haproxy1.8.0以后的版本中,haproxy支持多进程多线程的方式,而1.5不支持多线程,支持多进程,但是在1.5上启用多进程的方式是串行的,意思就是它不是一个主进程下生成多个子进程,而是一个进程下生成一个进程,然后子进程下在生成子进程的方式;所以如果要使用多进程的方式,建议还是使用1.8以后的版本;

haproxy配置多进程

nbproc:该指令是用于指定haproxy的进程数 ,通常情况下建议同cup核心数一样即可;

cpu-map:该指令用于绑定haproxy对应cup核心;有点类似nginx里的worker_cpu_affinity参数的意义;

负载均衡服务之HAProxy基础配置

提示:以上配置表示指定haproxy的进程数为4个,第一个进程绑定到0号核心上,第二个进程绑定到1号核心上,依次类推;如下

负载均衡服务之HAProxy基础配置

提示:以上是haproxy1.8.20上配置使用多进程,启动进程情况,我们可以看到haproxy进程的父进程都是5945;

在1.5.18上使用多进程

负载均衡服务之HAProxy基础配置

提示:以同样的配置在haproxy1.5.18上,启动的多进程就不一样,在1.5.18上多了一个haproxy-systemd这个进程,并且haproxy进程都是它的子进程,而我们用nbproc指定的进程数是指定haproxy-systemd下的haproxy的子进程数;而1.8.20nbproc指定的是haproxy的子进程数量,没有haproxy-systemd,又或者我们可以理解为1.8.20把1.5.18上的haproxy-systemd和haproxy进程合并成一个进程haproxy;通常情况下haproxy单进程也是足够用了,如果是在要开多进程,建议还是使用1.8以上的版本吧;

haproxy使用多线程

haproxy的多线程是在1.7以后的版本才支持的,所以1.5上面不支持多线程的方式,所以我们这里的演示就用haproxy1.8.20来演示

nbthread:指定每个haproxy进程开启的线程数;

负载均衡服务之HAProxy基础配置

提示:以上配置表示启动4个进程,每个进程里启动4个线程,默认每个进程一个线程

负载均衡服务之HAProxy基础配置

maxsslconn:该指令指定每个haproxy进程ssl最大连接数,通常情况下证书都不放在haproxy上,nginx上放证书更加合适;

maxconnrate:该指令指定每个进程每秒最大连接数;

spread-checks:该指令指定后端server状态check随机提前或延迟百分比时间;通常情况下在后端主机较多的情况下使用;官方建议2-5(20%-50%)之间;如果在后端主机较多的情况下,不使用该指令来延迟对后端主机健康状态检查,那么很有可能降低haproxy的性能,因此该指令在后端主机较多的情况下(比如1000台甚至更多)能够避免同时并发对后端主机check时对haproxy的性能影响;

 以上是haproxy global配置段比较常用的配置指令说明,更多配置指令请参考https://cbonte.github.io/haproxy-dconv;

作者:qiuhom
出处:https://www.cnblogs.com/qiuhom-1874/