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

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

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

负载均衡服务之HAProxy基础配置(一)_第1张图片

  提示:以上是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的配置说明可以参考本人博客https://www.cnblogs.com/qiuhom-1874/p/12091118.html;接下来我们来配置下,让haproxy的日志记录到/var/log/haproxy.log这个文件中去;

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

负载均衡服务之HAProxy基础配置(一)_第2张图片

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

  提示:可以看到我们访问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的进程数为4个,第一个进程绑定到0号核心上,第二个进程绑定到1号核心上,依次类推;如下

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

  在1.5.18上使用多进程

负载均衡服务之HAProxy基础配置(一)_第3张图片

  提示:以同样的配置在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个进程,每个进程里启动4个线程,默认每个进程一个线程

负载均衡服务之HAProxy基础配置(一)_第5张图片

  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;

你可能感兴趣的:(负载均衡服务之HAProxy基础配置(一))