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

  前文咱们聊了下haproxy的基础安装,以及怎样去代理后端主机的配置;固然没有很详细的去说配置文件中各指令的意思;有关haproxy的安装和代理后端server能够参考本人博客http://www.javashuo.com/article/p-uswhukfn-co.html;今天咱们主要来讲一下haproxy global配置段经常使用配置指令的用法和说明;html

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

  提示:以上是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的配置说明能够参考本人博客http://www.javashuo.com/article/p-wobakswo-m.html;接下来咱们来配置下,让haproxy的日志记录到/var/log/haproxy.log这个文件中去;nginx

  提示:在rsyslog的配置文件中明确要使用local2这个facility上的任何级别的日志都交给/var/log/haproxy.log记录;这样只是把接收日志的方式定义好了;一般若是rsyslog做为日志服务器接收非本机的其余主机日志,咱们还要让rsyslog监听在udp或者tcp的514端口上(固然这个端口也能够本身指定,一般不用更改),为其余主机提供服务;因此咱们除了要定义把某个facility上的全部级别的日志(固然也能够指定某些级别的日志,这个要看你想要收集那一类的日志)记录到某个文件中外,咱们还要把udp或tcp的514端口打开;git

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

  提示:能够看到咱们访问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上使用多进程

  提示:以一样的配置在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进程开启的线程数;

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

  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

相关文章
相关标签/搜索