HAProxy的简单使用

学习HAproxy的记录。逻辑比较混乱。

HAProxy 概念

Haproxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。Haproxy特别适用于那些负载特大的web站点,这些站点通常又需要会保持或七层处理。Haproxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中,同时可以保护你的web服务器不被暴露到网络上。
HAProxy实现了一种事件驱动, 单一进程模型,此模型支持非常大的并发连接数。多进程或多线程模型受内存限制 、系统调度器限制以及无处不在的锁限制,很少能处理数千并发连接。事件驱动模型因为在有更好的资源和时间管理的用户空间(User-Space) 实现所有这些任务,所以没有这些问题。此模型的弊端是,在多核系统上,这些程序通常扩展性较差。这就是为什么他们必须进行优化以 使每个CPU时间片(Cycle)做更多的工作。

emmmm 这个看一眼就好了。感觉很多都是都是要先学会使用,再看概念,理论才会更加清楚。

安装

由于CentOS7 自带安装包。也就不再使用源码安装。如果一定要源码安装,网上教程挺多的。
安装前可产看一下 haproxy信息

yum info haproxy
Name        : haproxy
Arch        : x86_64
Version     : 1.5.18
Release     : 9.el7
Size        : 834 k
Repo        : base/7/x86_64
Summary     : TCP/HTTP proxy and load balancer for high availability environments
URL         : http://www.haproxy.org/
License     : GPLv2+
Description : HAProxy is a TCP/HTTP reverse proxy which is particularly suited for high
            : availability environments. Indeed, it can:
            :  - route HTTP requests depending on statically assigned cookies
            :  - spread load among several servers while assuring server persistence
            :    through the use of HTTP cookies
            :  - switch to backup servers in the event a main server fails
            :  - accept connections to special ports dedicated to service monitoring
            :  - stop accepting connections without breaking existing ones
            :  - add, modify, and delete HTTP headers in both directions
            :  - block requests matching particular patterns
            :  - report detailed status to authenticated users from a URI
            :    intercepted by the application

安装

yum -y install haproxy

建立简单地web服务。用于haproxy代理。

使用nginx搭建简单地 web服务。绑定端口

yum -y install nginx

关于nginx也可以作为负载均衡之类的设置。。。无视掉,现在只用nginx作为一个小的web服务器。
编辑nginx 配置文件。。。设置几个端口对应不同web页面当作一个个服务器吧。

编辑nginx 配置文件

vi /etc/nginx/nginx.conf

在http 模块中 默认80 端口后添加

    server {
        listen 8001;
        server_name www.test_server1.com;
        root /webtest/server1;

        location / {
            index index.html;
        }
    }

    server {
        listen 8002;
        server_name test_server2;
        root /webtest/server2;

        location / {
            index index.html;
        }
    }   

监听8001 和 8002 端口。
然后创建目录和所需文件

mkdir -p /webtest/server1
mkdir -p /webtest/server2

在两个目录下分别创建一个index.html 文件

vi /webtest/server1/index.html 
test_server1--8001
vi /webtest/server2/index.html 
test_server2--8002

然后启动nginx 分别访问 192.168.199.81:8001 192.168.199.81:8002
192.168.199.81-8001
192.168.199.81-8002
一个超级简单的web服务就搭建好了。
192.168.199.81:8001对应test_server1–8001
192.168.199.81:8002对应test_server2–8002

最简单的使用,代理本机其它端口。

最基本的使用,使用一个端口代理其它端口。

代理相关的配置可以如下配置段中。

  • “defaults” 为frontendbackend, listen提供默认配置,这配置默认配置参数可由下一个“defaults”所重新设定。

  • “frontend” 用于定义一系列监听的套接字,这些套接字可接受客户端请求并与之建立连接。前端,指定接收客户端连接侦听套接字设置

  • “backend” 用于定义一系列“后端”服务器,代理将会将对应客户端的请求转发至这些服务器。 后端,指定将连接请求转发至后端服务器的相关设置

  • “listen”段通过关联“frontend”和“backend”定义了一个完整的代理,通常只对TCP流量有用。同时设置前端和后端,适用于一对一环境

所有代理的名称只能使用大写字母、小写字母、数字、-(中线)、_(下划线)、.(点号)和:(冒号)。此外,ACL名称会区分字母大小写)

查看 haproxy配置文件。

cat /etc/haproxy/haproxy.cfg 

去除掉注释 大约是

global
    log         127.0.0.1 local2

    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid
    maxconn     4000
    user        haproxy
    group       haproxy
    daemon

    stats socket /var/lib/haproxy/stats

defaults
    mode                    http
    log                     global
    option                  httplog
    option                  dontlognull
    option http-server-close
    option forwardfor       except 127.0.0.0/8
    option                  redispatch
    retries                 3
    timeout http-request    10s
    timeout queue           1m
    timeout connect         10s
    timeout client          1m
    timeout server          1m
    timeout http-keep-alive 10s
    timeout check           10s
    maxconn                 3000

frontend  main *:5000
    acl url_static       path_beg       -i /static /images /javascript /stylesheets
    acl url_static       path_end       -i .jpg .gif .png .css .js

    use_backend static          if url_static
    default_backend             app

backend static
    balance     roundrobin
    server      static 127.0.0.1:4331 check

backend app
    balance     roundrobin
    server  app1 127.0.0.1:5001 check
    server  app2 127.0.0.1:5002 check
    server  app3 127.0.0.1:5003 check
    server  app4 127.0.0.1:5004 check

各个参数具体意义 先不管。看frontend backend两块
实例中设置 监听本系统的5000 端口。然后将访问该端口的请求转发到backend这些服务器。好像还设置的是负载均衡(模式是roundrobin,也是默认的模式)。。。当然,这只是个实例,实际上这四个端口对应的服务应该是不存在的。

启动haproxy

systemctl start haproxy

然后访问该主机的5000端口
无活跃服务
具体代码执行我也不清楚。应该是haproxy 收到客户端访问192.168.199.81:5000 的请求,然后检查 四个服务器的健康性,选择其中健康的服务器,使用roundrobin 负载均衡的算法,将请求转发到其中一个。但是现在这四个服务器根本不存在,所以4个都是不健康状态。于是就返回了503。这也是haproxy 自带的一个错误模板。

[root@haproxy1 haproxy]# cd /usr/share/haproxy/
[root@haproxy1 haproxy]# ls
400.http  403.http  408.http  500.http  502.http  503.http  504.http  README

如果希望使用这些错误模板,可以在配置文件中defaults设置如

errorfile 503 /usr/share/haproxy/503.http

也可以在 backend 或者 listen 中设置。不过这不是现在的重点。

基本测试1 设置5001端口代理8001 5002端口代理8002

删除修改原配置文件的 frontend backend

vi /etc/haproxy/haproxy.cfg

设置成如下

frontend  test1 
    bind *:5001
    default_backend test_server1

backend test_server1
    server test_server1 127.0.0.1:8001 check

frontend  test2 
    bind *:5002
    default_backend test_server2

backend test_server2
    server test_server2 127.0.0.1:8002 check

重启haproxy

systemctl restart haproxy

测试端口代理是否成功
192.168.199.81:5001
192.168.199.81-5002
可以看到 基本端口 代理是可以的。haproxy安装使用初步 成功。

基本设置2 5000端口代理8001 8002 两个端口,不设balance

修改配置文件。

vi /etc/haproxy/haproxy.cfg
frontend  test
    bind *:5000
    default_backend test_server

backend test_server
    server test_server1 127.0.0.1:8001 check
    server test_server2 127.0.0.1:8002 check

重启haproxy

systemctl restart haproxy

未设置balance 但是默认有balance 方式roundrobin 加权轮询。基本上每重新访问 5000 就会使用另一个服务器响应。
192.168.199.81:5000 的不同结果
192.168.199.81:5000 1
192.168.199.82:5000 2
一般来说 backend 下的服务应该运行的是相同的。毕竟对一个客户来说,同一个网站访问出不同结果。是影响用户体验的。但这只是一个测试。。。不用太执着

基本设置3 listen 代替 frontend backend

vi /etc/haproxy/haproxy.cfg
listen test2
    bind :8000
    server test_server1 127.0.0.1:8001 check
    server test_server2 127.0.0.1:8002 check

重启haproxy

systemctl restart haproxy

多次访问192.168.199.81:8000 也可以看到不同结果
192.168.199.81-8000 1
192.168.199.81-8000 2

日志文件配置及状态监听接口

首先是日志文件

基础测试完成。查看日志文件发现,好像当前没有日志文件可以查看。
需要做一下配置才能记录日志,通过rsyslog来记录

查看 haproxy的配置文件 可以发现

    # to have these messages end up in /var/log/haproxy.log you will
    # need to:
    #
    # 1) configure syslog to accept network log events.  This is done
    #    by adding the '-r' option to the SYSLOGD_OPTIONS in
    #    /etc/sysconfig/syslog
    #
    # 2) configure local2 events to go to the /var/log/haproxy.log
    #   file. A line like the following can be added to
    #   /etc/sysconfig/syslog
    #
    #    local2.*                       /var/log/haproxy.log
    #
    log         127.0.0.1 local2

看到 要 记录日志信息需要两步。一修改/etc/sysconfig/syslog 的SYSLOGD_OPTIONS加上 -r 二是在 /etc/sysconfig/syslog 加上 local2.* /var/log/haproxy.log 一句。。。不过CentOS7消息日志使用的是rsyslog可以看做 syslog的升级版。配置文件不是同一个了。。。

编辑文件/etc/sysconfig/rsyslog

vi /etc/sysconfig/rsyslog 

添加 -r 不加似乎也没什么影响。

SYSLOGD_OPTIONS="-r"

编辑rsyslog 配置文件

vi /etc/rsyslog.conf

取消这两行的注释 表示接受UDP方式的消息。TCP的要不要也取消注释,应该是不用的。

$ModLoad imudp
$UDPServerRun 514

末尾加上

local2.*                       /var/log/haproxy.log

为什么是local2.* 主要看/etc/haproxy/haproxy.cfg 配置文件中global中设置

log         127.0.0.1 local2

重启 haproxy和rsyslog

systemctl restart haproxy
systemctl restart rsyslog

然后再访问 haproxy监视的端口后。就可以看到 /var/log/haproxy.log 内容了。

[root@haproxy1 ~]# cat /var/log/haproxy.log 
Jun 30 14:00:45 localhost haproxy[9545]: 192.168.199.153:56829 [30/Jun/2020:14:00:45.762] test2 test2/test_server1 6/0/2/0/8 200 250 - - ---- 2/2/0/0/0 0/0 "GET / HTTP/1.1"
Jun 30 14:00:54 localhost haproxy[9545]: 192.168.199.153:56829 [30/Jun/2020:14:00:45.770] test2 test2/test_server2 8678/0/1/0/8679 200 250 - - ---- 2/2/0/0/0 0/0 "GET / HTTP/1.1"

haproxy状态监听 通过网页查看

看网上设置状态监控有两种方式
一、global 中设置如下

stats refresh 30s #统计页面自动刷新时间
stats uri /stats #统计页面url
stats realm baison-test-Haproxy #统计页面密码框上提示文本
stats auth admin:admin123 #统计页面用户名和密码设置
stats hide-version #隐藏统计页面上HAProxy的版本信息

重启后状态页即可通过默认端口进行访问。但是我也不知道默认端口是个啥。。。这种方式未能实现。

二、新增监听段配置 listen
这个测试是可以的的。。。先设置一个最简单的

listen stats
    bind :32700
    stats enable
    stats uri /

设置后重启 即可访问 192.168.199.81:32700/ 查看haproxy 状态
状态监听
进行如此简单的设置即可。其它的都是默认的,真正使用是建议设置其它参数。如

① stats refresh 设定自动刷新时间间隔
  若服务器出现故障,默认手动刷新才能才能看到状态的变化,可设置自动刷新
   例:添加stats refresh 2s
② stats uri 自定义stats page uri
  默认为/haproxy?stats 可自定义uri
   例:stats uri /hastas
  重启后访问http://172.18.43.62/hastas即可
③ stats hide-version
  如上图所示界面会显示haproxy版本信息,若想隐藏版本加上此参数即可
④ stats auth : 认证时的账号和密码,可使用多次。如多个用户定义多行即可,例:
   stats auth ha1:centos1
   stats auth ha2:centos2
⑤ stats realm 认证时浏览器弹出对话框的提示信息
   例:stats realm “haproxy info”
⑥ stats admin { if | unless } 启用stats page中的管理功能
   例:stats admin if TRUE

测试加上参数设置监听

listen stats
    bind :32700
    stats enable
    stats refresh 10s
    stats uri /
    stats hide-version
    stats realm "hhhh"
    stats auth admin:adminfeng
    stats admin if TRUE

三、监听haproxy好像并不能使用 frontend + backend来代替listen

转发其它主机服务 和 负载均衡

一直测试使用的都是将访问本机一个端口的请求转发到本机其它端口。未测试转发到其它主机。
准备4个主机,测试用4个虚拟机就好。
haporxy1 192.168.199.81
haporxy2 192.168.199.82
haporxy3 192.168.199.83
haporxy4 192.168.199.84

四个节点都安装nginx 进行基本相同的设置
使用nginx设置一个小的Web服务器

yum -y install nginx

编辑nginx配置文件。

vi /etc/nginx/nginx.conf
    server {
        listen 8000;
        server_name app_test;
        root /webtest/app_test;

        location / {
            index index.html;
        }
    }

创建/webtest/app_test 目录

mkdir -p /webtest/app_test

在该目录创建 index.html 文件并添加内容。
四个不同的nginx服务器中如果希望测试可以添加不同的内容
如 app1 app2 app3 app4

touch /webtest/app_test/index.html
echo "app-192.168.199.81" >> /webtest/app_test/index.html 

启动nginx

systemctl start nginx

四个nginx 服务器如下
192.168.199.81-8000
192.168.199.82-8000
192.168.199.83-8000
192.168.199.84-8000
在haproxy1上安装haproxy设置代理转发

yum -y install haproxy

配置日志环境。。。不再详述

haproxy1 的haproxy 配置文件设置

vi /etc/haproxy/haproxy.cfg 
frontend  test_balance
    bind *:5000
    default_backend test_server

backend test_server
    server app1 192.168.199.81:8000 check
    server app2 192.168.199.82:8000 check
    server app3 192.168.199.83:8000 check
    server app4 192.168.199.84:8000 check

listen stats
    bind :32700
    stats enable
    stats refresh 10s
    stats uri /
    stats hide-version

重启haproxy

systemctl restart haproxy

如果四个主机的8000端口都未绑定服务,可能会有提示

 Message from syslogd@localhost at Jun 30 15:38:59 ...
 haproxy[9972]: backend test_server has no server available!

没有就是一切正常。。。
多访问几次 192.168.199.81:5000
5000-81
5000-82
5000-83
5000-84
实现了将访问192.168.199.81:5000端口的请求转发到其他的主机端口上。这也使用了haproxy的负载均衡。

backend test_server
    server app1 192.168.199.81:8000 check
    server app2 192.168.199.82:8000 check
    server app3 192.168.199.83:8000 check
    server app4 192.168.199.84:8000 check

相当于

backend test_server
	balance roundrobin
    server app1 192.168.199.81:8000 check
    server app2 192.168.199.82:8000 check
    server app3 192.168.199.83:8000 check
    server app4 192.168.199.84:8000 check

默认的均衡策略是轮询。

一、roundrobin,表示简单的轮询
二、static-rr,表示根据权重
三、leastconn,表示最少连接者先处理
四、source,表示根据请求源IP
五、uri,表示根据请求的URI,做cdn需使用;
六、url_param,表示根据请求的URl参数'balance url_param' 
七、hdr(name),表示根据HTTP请求头来锁定每一次HTTP请求;
八、rdp-cookie(name),表示根据据cookie(name)来锁定并哈希每一次TCP请求。

HAProxy配置文件 参数等

之前都是最简单的方式启动,未对配置文件修改过多。这里详细解释一下配置文件的各个参数。。。(个人并未测试,属于网上摘抄)
根据功能用途不同,其配置文件主要由五个部分组成,分别为global部分,defaults部分,frontend部分,backend部分,listen部分

  1. global部分

用于设置全局配置参数,属于进程级的配置,通常与操作系统配置相关

  1. defaults部分

默认参数的配置部分。在些部分设置的参数,默认会自动引用到下面的frontend, backend和listen部分

  1. frontend部分

用于设置接收用户请求的前端虚拟节点。frontend可以根据ACL规则直接指定要使用的后端backend

  1. backend部分

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

  1. listen部分

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

global是全局配置段设置,主要用作

  • 进程及安全配置相关的参数
  • 性能调整相关参数
  • Debug参数

global
haproxy的global自带配置

global

    log         127.0.0.1 local2

    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid
    maxconn     4000
    user        haproxy
    group       haproxy
    daemon
    
    # turn on stats unix socket
    stats socket /var/lib/haproxy/stats
  • log 全局的日志配置,127.0.0.1表示本机 local0是日志设备,通过rsyslog记录该日志设备内容到haproxy日志文件。 未设置日志级别。可设置err, warning, info, debug 4种
  • chroot 修改haproxy的工作目录至指定的目录并在放弃权限之前执行chroot()操作,可以提升haproxy的安全级别,不过需要注意的是要确保指定的目录为空目录且任何用户均不能有写权限
  • pidfile 指定HAProxy进程ID的存放位置
  • maxconn 设置每个HAProxy进程可接受的最大并发连接数
  • user 用户名 运行HAProxy进程的用户。作用同uid 用户id
  • group 用户组运行HAProxy进程的组。作用同 gid 组id
  • daemon 设置haproxy进程运行为后台,默认是后台。

其它设置

进程及安全配置相关的参数

  • nbproc 1 # haproxy的进程数量,默认为1,无特殊需求最好修改,修改数量也不要超过内核数
  • cpu-map 1 0 # 第一个工作进程绑定在第0核CPU上只有设置nbproc后才有可能进行设置
  • ulimit-n #每个haproxy进程可打开的最大文件数;会自动计算一个最佳的数字,建议不修改。
  • stats #用户访问统计数据的接口
  • node #定义当前节点的名称,用于HA场景中多haproxy进程共享同一个IP地址时
  • description #当前实例的描述信息;

性能调整参数
虽然说是调整性能的参数,但是一般情况下没有特殊需求,不建议修改

  • maxconn :设定每个haproxy进程所能接受的最大并发连接数
  • maxconnrate :设置每个进程每秒种所能建立的最大连接数量
  • maxse***ate :设置每个进程每秒种所能建立的最大会话数量
  • maxsslconn : 每进程支持SSL的最大连接数量
  • spread-checks 健康检测延迟时长比建议2-5之间
    还有许多,但是没测试过具体适用表现。就不搬运了。。。

proxies
2,3,4,5都可看做代理配置段的设置。

defaults
默认参数的配置部分。该部分设置的参数,默认会自动引用到下面的frontend, backend和listen部分

    mode                    http
    log                     global
    option                  httplog
    option                  dontlognull
    option http-server-close
    option forwardfor       except 127.0.0.0/8
    option                  redispatch
    retries                 3
    timeout http-request    10s
    timeout queue           1m
    timeout connect         10s
    timeout client          1m
    timeout server          1m
    timeout http-keep-alive 10s
    timeout check           10s
    maxconn                 3000
  • mode 设置HAProxy实例默认的运行模式,有tcp, http, health三个可选值
    – tcp 在此模式下,客户端和服务器端间将建立一个全双工的连接,不会对七层报文做任何检查,为默认的模式;经常用于SSL, SSH, SMTP等应用
    – http 在此模式下,客户端请求在转发至后端服务器前将会被深度分析,所有不与RFC格式兼容的请求都会被拒绝
    – health 目前已经被废除
  • log global 表示使用global段中定义的日志格式
  • option httplog 默认情况下,HAProxy日志是不记录HTTP请求的,此选项的作用是启用日志记录HTTP请求
  • option dontlognull 不确定,应该还是日志相关
  • option http-server-close 在使用长连接时,为了避免客户端超时没有关闭长连接,此功能可以使服务器端关闭长连接
  • option forwardfor 保证后端服务器可记录客户端真实的IP 在发往服务器的请求首部中插入“X-Forwarded-For”首部,值为真实客户端IP。except 表示将。。。排除之外,就是当客户端为127.0.0.1 时,不插入X-Forwarded-For。
  • option redispatch 当server Id(real server)对应的服务器挂掉后,强制定向到其他健康的服务器
  • retries 设置连接后端服务器的失败重试次数,如果连接失败的次数超过该数值,HAProxy会将对应的后端服务器标记为不可用
  • timeout http-request 请求报文的超时时长,如果客户端一侧非常慢的发送,则服务器要维持这个连接就很浪费资源,这个就是请求报文的超时时长
  • timeout queue 等待最大时长
  • timeout connect 客户端请求到后端server的最长连接等待时间(haproxy与后端服务器TCP三次握手之前)
  • timeout client 与客户端的最长非活动时间;1分钟内客户端没有向haproxy请求资源,则haproxy将会主动切断与客户端的连接
  • timeout server 客户端请求到后端服务端的超时超时时长(TCP之后)
  • timeout http-keep-alive session 会话保持超时时间,范围内会转发到相同的后端服务器
  • timeout check 对后端服务器的检测超时时间

frontend backend listen如果未进行另外设置。就会使用defaults 中设置。

frontend
用于设置接收用户请求的前端虚拟节点。frontend可以根据ACL规则直接指定要使用的后端backend

frontend  main
	bind  *:5000
    acl url_static       path_beg       -i /static /images /javascript /stylesheets
    acl url_static       path_end       -i .jpg .gif .png .css .js

    use_backend static          if url_static
    default_backend             app

定义了一个名为main 的虚拟前端节点

  • bind 指定haproxy监听的IP及端口,可以是多个IP;也可以写成,IP:80-89,或者是sock文件
  • use_backend 使用名为 static 规则匹配的后端服务器来响应请求。
  • default_backend 在没有匹配的”use_backend”规则时为实例指定使用的默认后端,因此,其不可应用于backend区段。在”frontend”和”backend”之间进行内容交换时,通常使用”use-backend”定义其匹配规则;而没有被规则匹配到的请求将由此参数指定的后端接收。
  • acl 访问控制列表。这个就是规则匹配。

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

backend static
    balance     roundrobin
    server      static 127.0.0.1:4331 check

backend app
    balance     roundrobin
    server  app1 127.0.0.1:5001 check
    server  app2 127.0.0.1:5002 check
    server  app3 127.0.0.1:5003 check
    server  app4 127.0.0.1:5004 check

backend用于定义名称为 XXXX 的后端服务器组,根据需要可以定义多个

  • balcnce 设置负载均衡策略,策略包括
  ① roundrobin:基于权重轮询,动态算法, 支持权重的运行时调整,支持慢启动;每个后端backend中最多支持4095个server
      server options: weight #
  ② static-rr:基于权重轮询,静态算法,不支持权重的运行时调整及慢启动;后端主机数量无上限
  ③ leastconn:加权最少连接,动态算法,最少连接的后端服务器优先分配接收新连接,相同连接时轮询,推荐在较长会话的场景使用,例如MySQL、 LDAP等,不适合http。
  ④ first:根据服务器在列表中的位置,自上而下进行调度;前面服务器的连接数达到上限,新请求才会分配给下一台服务器。
  ⑤ hdr():对于每个http请求,此处由指定的http首部将会被取出做hash计算; 并由服务器总权重相除以后派发至某挑出的服务器; 无有效值的会被轮询调度
  例:hdr(host)     hdr(Cookie)
  ⑤ rdp-cookie 远程桌面相关
  hash类算法:
  需配合参数:hash-type   
  method:
      map-based:除权取余法,哈希数据结构是静态数组
      consistent:一致性哈希,哈希数据结构是一棵树
  ⑥ source:源地址hash,新连接先按权重分配,后续连接按source分配请求
  ⑦ uri:对URI的左半部分或整个uri做hash计算,并除以服务器总权重取模,以后派发至某挑出的服务器,适用于后端缓存服务器
  ://:@:/;?#
  左半部分: /;
  整个uri: /;?#
  ⑧ url_param:对用户请求的uri听部分中的参数的值(通常为用户ID)作hash计算,并由服务器总权重相除以后派发至某挑出的服务器;通常用于追踪用户,以确保来自同一个用户的请求始终发往同一个Backend Server。
  • server:定义后端主机相关选项
server <name> <address>:[port] [param*]
  name:服务器在haproxy上的自定义名称;出现在日志及警告信息
  address:服务器地址,支持使用主机名
  [:[port]]:端口映射;省略时,表示同bind中绑定的端口
  [param*]:server后可加的参数

param*参数
常用的参数:

check 表示启用对此后端服务器执行健康状态检查
inter 设置健康状态检查的时间间隔,单位是毫秒
rise 检查多少次认为服务器可用
fall 检查多少次认为服务器不可用
weight 设置服务器的权重,默认为1, 最大为256。 设置为0表示不参与负载均衡
backup 设置备份服务器,用于所有后端服务器全部不可用时
cookie 为指定的后端服务器设置cookie值,此处指定的值将在请求入站时被检查,第一次为此值挑选的后端服务器将在后续的请求中一直被选中,其目的在于实现持久连接的功能

listen
可以看做是frontend和backend部分的结合体。一般haproxy监视节点设置也是通过listen设置。
listen 设置监听

listen admin_status
    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 
    stats auth admin:admin 
    stats hide-version 
    stats admin if TRUE

stats 相关。。。

stats refresh 30s

设置HAProxy监控统计页面自动刷新的时间

stats uri /haproxy-status
设置HAProxy监控页面访问的URI路径

stats realm Welcome login
设置登录监控页面时,密码框上的提示信息。似乎无用

stats auth admin:admin
设置登录监控页面的用户名,密码。用户密码用冒号隔开,可以设置多个,每行一个

stats hide-version
设置在监控页面上隐藏HAProxy的版本号

status admin if TRUE
设置此选项,可在监控页面上启用、禁用后端服务器,仅在1.4.9版本以后生效

ACL 对我来说有点复杂且暂时用不上。。。

访问控制列表,基于包过滤的访问控制技术。
HAProxy基础用法应该是将访问 frontend 虚拟节点的请求根据ACL转发到不同的backend处理。。。
具体实现,未操作。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章