阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

CentOS 7.2 部署Haproxy 1.7.2

167次阅读
没有评论

共计 14179 个字符,预计需要花费 36 分钟才能阅读完成。

参考文档:

  1. haproxy:http://www.haproxy.org/

本文涉及 haproxy 的安装,并做简单配置。

一.环境准备

1. 操作系统

CentOS-7-x86_64-Everything-1511

2. Haproxy 版本

截至 2017-02-23,haproxy 稳定版本是 1.7.2: http://www.haproxy.org/download/1.7/src/haproxy-1.7.2.tar.gz

3. 拓扑图

CentOS 7.2 部署 Haproxy 1.7.2

  1. haproxy 服务器采用 VMware ESXi 虚拟出的 1 台服务器,前端访问地址 10.11.4.152,后端地址 192.168.4.152;1
  2. Web1 服务器为采用 docker 技术生成的 1 台服务器,已安装并启动 nginx 服务,ip 地址 192.168.4.171;
  3. Web2 同 Web1 服务器,ip 地址 192.168.4.172;
  4. 设置 web1/ 2 测试页面(路径参考 nginx 安装步骤),以方便后续查看验证结果。

    CentOS 7.2 部署 Haproxy 1.7.2

    CentOS 7.2 部署 Haproxy 1.7.2

二.Haproxy 安装

1. 下载

[root@elk-node2 ~]# cd /usr/local/src/
[root@elk-node2 src]# wget http://www.haproxy.org/download/1.7/src/haproxy-1.7.2.tar.gz

2. 编译安装

#”TARGET”指定编译对应的 os 对应的内核版本,通过”uname -r”查询内核版本呢,README 文件可查询对应关系
[root@elk-node2 src]# tar -zxvf haproxy-1.7.2.tar.gz
[root@elk-node2 src]# cd haproxy-1.7.2
[root@elk-node2 haproxy-1.7.2]# make TARGET=linux2628 PREFIX=/usr/local/haproxy
[root@elk-node2 haproxy-1.7.2]# make install PREFIX=/usr/local/haproxy

三.Haproxy 配置

1. 配置用户

[root@elk-node2 ~]# groupadd haproxy
[root@elk-node2 ~]# useradd -g haproxy haproxy -s /sbin/nologin

2. 配置文件

1)配置文件详解

#默认安装目录下没有配置文件,只有”doc”,“sbin”,“share”三个目录,可手工创建目录及配置文件;
#haproxy 的配置文件主要是以下 5 部分:global 全局配置、defaults 默认配置、监控页面配置、frontend 配置、backend 配置
[root@elk-node2 ~]# mkdir -p /usr/local/haproxy/etc
[root@elk-node2 ~]# cd /usr/local/haproxy/etc/
[root@elk-node2 etc]# vim haproxy.cfg

#全局配置, 用于设定义全局参数, 属于进程级的配置, 通常与操作系统配置有关.
global
    #定义全局日志, 配置在本地, 通过 local0 输出, 默认是 info 级别,可配置两条
    log         127.0.0.1 local0 warning
    #定义日志级别【error warning info debug】
    #log         127.0.0.1 local1 info
    
    #运行路径
    chroot      /usr/local/haproxy
    #PID 文件存放路径
    pidfile     /var/run/haproxy.pid
    
    #设置每 haproxy 进程的最大并发连接数, 其等同于命令行选项“-n”;“ulimit -n”自动计算的结果参照此参数设定.
    maxconn     4096
    
    #运行 haproxy 用户, 或者使用关键字 uid
    user        haproxy
    #运行 haproxy 用户组, 或者使用关键字 gid
    group       haproxy
    
    #后台运行 haproxy
    daemon

    #设置启动的 haproxy 进程数量, 只能用于守护进程模式的 haproxy;
    #默认只启动一个进程, 鉴于调试困难等多方面的原因, 一般只在单进程仅能打开少数文件描述符的场景中才使用多进程模式.
    nbproc      1
    #设置每进程所能够打开的最大文件描述符数目, 默认情况其会自动进行计算, 因此不推荐修改此选项.
    #ulimit-n 819200 
    
    #调试级别, 一般只在开启单进程时调试, 且生产环境禁用.
    #debug
    #haproxy 启动后不会显示任何相关信息, 这与在命令行启动 haproxy 时加上参数“-q”相同
    #quiet
    
    #定义统计信息保存位置
    stats socket /usr/local/haproxy/stats

#默认配置    
defaults
    #默认的模式【tcp:4 层;http:7 层;health: 只返回 OK】
    mode        http
    
    #继承全局的日志定义输出
    log         global
    
    #日志类别, httplog
    #option      httplog 

    #如果后端服务器需要记录客户端真实 ip, 需要在 HTTP 请求中添加”X-Forwarded-For”字段;
    #但 haproxy 自身的健康检测机制访问后端服务器时, 不应将记录访问日志,可用 except 来排除 127.0.0.0,即 haproxy 本身.
    #option      forwardfor except 127.0.0.0/8
    option      forwardfor 

    #开启 http 协议中服务器端关闭功能, 每个请求完毕后主动关闭 http 通道, 使得支持长连接,使得会话可以被重用,使得每一个日志记录都会被记录.
    option      httpclose 

    #如果产生了一个空连接,那这个空连接的日志将不会记录.
    option      dontlognull

    #当与后端服务器的会话失败 (服务器故障或其他原因) 时, 把会话重新分发到其他健康的服务器上; 当故障服务器恢复时, 会话又被定向到已恢复的服务器上;
    #还可以用”retries”关键字来设定在判定会话失败时的尝试连接的次数
    option      redispatch
    retries     3
    
    #当 haproxy 负载很高时, 自动结束掉当前队列处理比较久的链接.
    option      abortonclose

    #默认 http 请求超时��间
    timeout http-request    10s
    #默认队列超时时间, 后端服务器在高负载时, 会将 haproxy 发来的请求放进一个队列中. 
    timeout queue           1m
    #haproxy 与后端服务器连接超时时间.
    timeout connect         5s
    #客户端与 haproxy 连接后, 数据传输完毕, 不再有数据传输, 即非活动连接的超时时间.
    timeout client          1m
    #haproxy 与后端服务器非活动连接的超时时间.
    timeout server          1m
    #默认新的 http 请求连接建立的超时时间,时间较短时可以尽快释放出资源,节约资源.
    timeout http-keep-alive 10s
    #心跳检测超时时间
    timeout check           10s
    
    #最大并发连接数
    maxconn                 2000
    
    #设置默认的负载均衡方式
    #balance source 
    #balnace leastconn

#统计页面配置, frontend 和 backend 的组合体, 监控组的名称可按需自定义
listen admin_status
    #配置监控运行模式
    mode http
    
    #配置统计页面访问端口
    bind 0.0.0.0:1080
    
    #统计页面默认最大连接数
    maxconn 10
    
    #http 日志格式
    option httplog 
    
    #开启统计
    stats enable
    
    #隐藏统计页面上的 haproxy 版本信息
    stats hide-version
    
    #监控页面自动刷新时间
    stats refresh 30s
    
    #统计页面访问 url
    stats uri /stats
    
    #统计页面密码框提示文本
    stats realm mCloud\ Haproxy
    
    #监控页面的用户和密码:admin, 可设置多个用户名
    stats auth admin:admin
    
    #手工启动 / 禁用后端服务器, 可通过 web 管理节点
    stats admin if TRUE

    #设置 haproxy 错误页面
    errorfile 400 /usr/local/haproxy/errorfiles/400.http
    errorfile 403 /usr/local/haproxy/errorfiles/403.http
    errorfile 408 /usr/local/haproxy/errorfiles/408.http
    errorfile 500 /usr/local/haproxy/errorfiles/500.http
    errorfile 502 /usr/local/haproxy/errorfiles/502.http
    errorfile 503 /usr/local/haproxy/errorfiles/503.http
    errorfile 504 /usr/local/haproxy/errorfiles/504.http

#监控 haproxy 后端服务器的监控状态
listen site_status 
       bind 0.0.0.0:1081                       #监听端口
       mode http                               #http 的 7 层模式
       log 127.0.0.1 local2 err                #[err warning info debug] 
       monitor-uri /site_status                #网站健康检测 URL,用来检测 HAProxy 管理的网站是否可以用,正常返回 200,不正常返回 503 
       acl site_dead nbsrv(php_server) lt 1    #定义网站 down 时的策略当挂在负载均衡上的指定 backend 的中有效机器数小于 1 台时返回 true 
       acl site_dead nbsrv(html_server) lt 1 
       acl site_dead nbsrv(backend_default)  lt 1  
       monitor fail if site_dead               #当满足策略的时候返回 503,网上文档说的是 500,实际测试为 503 
       monitor-net 192.168.4.171/32            #来自 192.168.4.152 的日志信息不会被记录和转发
       monitor-net 192.168.4.172/32
    
#frontend, 名字自定义
frontend HAproxy_Cluster
    #定义前端监听端口, 建议采用 bind *:80 的形式,否则做集群高可用的时候有问题,vip 切换到其余机器就不能访问.
    bind 0.0.0.0:80

    #acl 后面是规则名称,当请求的 url 末尾是以.php 结尾时, 匹配触发 php_web 规则,以下两种写法均可.
    acl php_web url_reg /*.php

    #当请求的 url 末尾是以.css、.jpg、.png、.jpeg、.js、.gif 结尾时,匹配并触发 static_web 规则.
    #acl static_web path_end .gif .png .jpg .css .js .jpeg
    #acl static_web url_reg /*.(css|jpg|png|jpeg|js|gif)$

    #- i 为忽略大小写,当被请求的是以 www.test.com 开头的主机时,匹配并触发 dns_name 规则.
    acl html_web hdr_beg(host) -i www.haproxytest.com
    #acl html_web hdr_beg(host) 10.11.4.152

    #当客户端的 IP 是 x.x.x.x 时,匹配并触发 src_ip 规则.
    #acl src_ip src x.x.x.x

    #如果匹配 acl 规则 php_web,将请求转交到 php_server 组处理;如果匹配 acl 规则 html_web,将请求转交到 html_server 组处理.
    use_backend php_server if php_web
    use_backend html_server if html_web

    #如果以上规则都不匹配时,将请求转交到 default_backend 组处理.
    default_backend backend_default

#backend 后端配置, 配置 php_server 组与 html_server 组
backend php_server

    #定义负载均衡方式为 roundrobin 方式, 即基于权重进行轮询调度的算法, 在服务器性能分布较均匀情况下推荐.
    #另有如下几种负载均衡方式:
    #-- static-rr: 也是基于权重进行轮转调度, 但属于静态方法, 运行时调整后端机组权重不会使用新的权重;
    #-- source: 基于请求源 IP 进行 hash 运算匹配后端服务器组;
    #-- leastconn: 不适合会话较短的环境, 如基于 http 的应用;
    #-- uri: 对整个 URI 进行 hash 运算;
    #-- uri_param: 对 URI 中的参数进行转发;
    #-- hdr(<name>): 根据 http 头进行转发, 无该头部则转为使用 roundrobin.
    balance roundrobin

    mode http

    #允许插入 serverid 到 cookie 中,serverid 后面可定义
    cookie SERVERID

    #心跳检测方式为检测后端服务器 index.html 文件,还有其他方式
    option httpchk GET /index.html

    #后端服务器定义, maxconn 1024 表示该服务器的最大连接数, cookie 1 表示 serverid 为 1, weight 代表权重(默认 1,最大为 265,0 则表示不参与负载均衡), 
    #check inter 1500 是检测心跳频率, rise 2 是 2 次正确认为服务器可用, fall 3 是 3 次失败认为服务器不可用.
    server php1 192.168.4.171:80 maxconn 1024 cookie 1 weight 3 check inter 1500 rise 2 fall 3

backend html_server
    balance source
    mode http
    server html1 192.168.4.172:80 maxconn 1024 cookie 1 weight 3 check inter 1500 rise 2 fall 3

backend backend_default
    balance source
    mode http
    server default1 192.168.4.171:80 maxconn 1024 cookie 1 weight 3 check inter 1500 rise 2 fall 3

2)error 文件

#配置文件中统计监控页面部分定义了 error 文件,将安装包中的文件复制到安装目录使用
[root@elk-node2 ~]# cp -r /usr/local/src/haproxy-1.7.2/examples/errorfiles/ /usr/local/haproxy/

更多详情见请继续阅读下一页的精彩内容:http://www.linuxidc.com/Linux/2017-10/147553p2.htm

3)日志文件

创建文件

[root@elk-node2 ~]# mkdir -p /usr/local/haproxy/log
[root@elk-node2 ~]# touch /usr/local/haproxy/log/haproxy.log
[root@elk-node2 ~]# ln -s /usr/local/haproxy/log/haproxy.log /var/log/
[root@elk-node2 ~]# chown haproxy:haproxy /var/log/haproxy.log

rsyslog 主配置文件

#修改”SYSLOGD_OPTIONS”参数,-c 2 使用兼容模式,默认是 -c 5;-r 开启远程日志;-m 0 标记时间戳,单位是分钟,0 表示禁用该功能
[root@elk-node2 ~]# vim /etc/sysconfig/rsyslog
SYSLOGD_OPTIONS="-c 2 -r -m 0"

rsyslog 文件

#haproxy 默认没有日志,依靠 rsyslog 收集日志;
#文件最末尾的“&~”,如果没有此配置,日志除写入指定文件外,会同步写入 messages 文件
[root@elk-node2 ~]# cd /etc/rsyslog.d/
[root@elk-node2 rsyslog.d]# touch haproxy.conf
[root@elk-node2 rsyslog.d]# chown haproxy:haproxy haproxy.conf
[root@elk-node2 rsyslog.d]# vim haproxy.conf
# Provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514

# haproxy.log
#  
local0.*   /usr/local/haproxy/log/haproxy.log
#local1.*   /usr/local/haproxy/log/haproxy.log
local2.*   /usr/local/haproxy/log/haproxy.log
&~

[root@elk-node2 rsyslog.d]# systemctl restart rsyslog.service

#关闭 selinux,本文因没有关闭 selinux 导致排查问题用了比较长的时间
[root@elk-node2 rsyslog.d]# setenforce 0

4)配置文件权限及软链接

[root@elk-node2 ~]# chown -R haproxy:haproxy /usr/local/haproxy/
[root@elk-node2 ~]# mkdir -p /etc/haproxy
[root@elk-node2 ~]# ln -s /usr/local/haproxy/etc/haproxy.cfg /etc/haproxy/
[root@elk-node2 ~]# chown -R haproxy:haproxy /etc/haproxy

3. 配置开机启动

[root@elk-node2 ~]# cp /usr/local/src/haproxy-1.7.2/examples/haproxy.init /etc/rc.d/init.d/haproxy
[root@elk-node2 ~]# chown haproxy:haproxy /etc/rc.d/init.d/haproxy
[root@elk-node2 ~]# chmod +x /etc/rc.d/init.d/haproxy
[root@elk-node2 ~]# chkconfig --add haproxy
[root@elk-node2 ~]# chkconfig --level 35 haproxy on

4. 配置全局启动文件

#采用软链接方式
[root@elk-node2 ~]# ln -s /usr/local/haproxy/sbin/haproxy /usr/sbin/
[root@elk-node2 ~]# chown haproxy:haproxy /usr/sbin/haproxy

5. 配置防火墙

#开放如上端口,均在配置文件中有定义,日志端口在 rsyslog.d/haproxy.conf 文件中定义
[root@elk-node2 ~]# vim /etc/sysconfig/iptables
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 1080 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 1081 -j ACCEPT
-A INPUT -p udp -m state --state NEW -m tcp --dport 514 -j ACCEPT

[root@elk-node2 ~]# service iptables restart

6. 启动并验证

[root@elk-node2 ~]# service haproxy start

1)端口验证

[root@elk-node2 ~]# netstat –tunlp

CentOS 7.2 部署 Haproxy 1.7.2

2)监控页面

监控页面展示信息与账户 / 密码在配置文件中已定义。

CentOS 7.2 部署 Haproxy 1.7.2

CentOS 7.2 部署 Haproxy 1.7.2

CentOS 7.2 部署 Haproxy 1.7.2

3)访问页面

触发配置文件中定义的 php_server 组,如下:

CentOS 7.2 部署 Haproxy 1.7.2

触发配置文件中定义的 html_server 组(在本地修改 hosts 文件),如下:

CentOS 7.2 部署 Haproxy 1.7.2

触发配置文件中定义的 backend_default 组,如下:

CentOS 7.2 部署 Haproxy 1.7.2

本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-10/147553.htm

参考文档:

  1. haproxy:http://www.haproxy.org/

本文涉及 haproxy 的安装,并做简单配置。

一.环境准备

1. 操作系统

CentOS-7-x86_64-Everything-1511

2. Haproxy 版本

截至 2017-02-23,haproxy 稳定版本是 1.7.2: http://www.haproxy.org/download/1.7/src/haproxy-1.7.2.tar.gz

3. 拓扑图

CentOS 7.2 部署 Haproxy 1.7.2

  1. haproxy 服务器采用 VMware ESXi 虚拟出的 1 台服务器,前端访问地址 10.11.4.152,后端地址 192.168.4.152;1
  2. Web1 服务器为采用 docker 技术生成的 1 台服务器,已安装并启动 nginx 服务,ip 地址 192.168.4.171;
  3. Web2 同 Web1 服务器,ip 地址 192.168.4.172;
  4. 设置 web1/ 2 测试页面(路径参考 nginx 安装步骤),以方便后续查看验证结果。

    CentOS 7.2 部署 Haproxy 1.7.2

    CentOS 7.2 部署 Haproxy 1.7.2

二.Haproxy 安装

1. 下载

[root@elk-node2 ~]# cd /usr/local/src/
[root@elk-node2 src]# wget http://www.haproxy.org/download/1.7/src/haproxy-1.7.2.tar.gz

2. 编译安装

#”TARGET”指定编译对应的 os 对应的内核版本,通过”uname -r”查询内核版本呢,README 文件可查询对应关系
[root@elk-node2 src]# tar -zxvf haproxy-1.7.2.tar.gz
[root@elk-node2 src]# cd haproxy-1.7.2
[root@elk-node2 haproxy-1.7.2]# make TARGET=linux2628 PREFIX=/usr/local/haproxy
[root@elk-node2 haproxy-1.7.2]# make install PREFIX=/usr/local/haproxy

三.Haproxy 配置

1. 配置用户

[root@elk-node2 ~]# groupadd haproxy
[root@elk-node2 ~]# useradd -g haproxy haproxy -s /sbin/nologin

2. 配置文件

1)配置文件详解

#默认安装目录下没有配置文件,只有”doc”,“sbin”,“share”三个目录,可手工创建目录及配置文件;
#haproxy 的配置文件主要是以下 5 部分:global 全局配置、defaults 默认配置、监控页面配置、frontend 配置、backend 配置
[root@elk-node2 ~]# mkdir -p /usr/local/haproxy/etc
[root@elk-node2 ~]# cd /usr/local/haproxy/etc/
[root@elk-node2 etc]# vim haproxy.cfg

#全局配置, 用于设定义全局参数, 属于进程级的配置, 通常与操作系统配置有关.
global
    #定义全局日志, 配置在本地, 通过 local0 输出, 默认是 info 级别,可配置两条
    log         127.0.0.1 local0 warning
    #定义日志级别【error warning info debug】
    #log         127.0.0.1 local1 info
    
    #运行路径
    chroot      /usr/local/haproxy
    #PID 文件存放路径
    pidfile     /var/run/haproxy.pid
    
    #设置每 haproxy 进程的最大并发连接数, 其等同于命令行选项“-n”;“ulimit -n”自动计算的结果参照此参数设定.
    maxconn     4096
    
    #运行 haproxy 用户, 或者使用关键字 uid
    user        haproxy
    #运行 haproxy 用户组, 或者使用关键字 gid
    group       haproxy
    
    #后台运行 haproxy
    daemon

    #设置启动的 haproxy 进程数量, 只能用于守护进程模式的 haproxy;
    #默认只启动一个进程, 鉴于调试困难等多方面的原因, 一般只在单进程仅能打开少数文件描述符的场景中才使用多进程模式.
    nbproc      1
    #设置每进程所能够打开的最大文件描述符数目, 默认情况其会自动进行计算, 因此不推荐修改此选项.
    #ulimit-n 819200 
    
    #调试级别, 一般只在开启单进程时调试, 且生产环境禁用.
    #debug
    #haproxy 启动后不会显示任何相关信息, 这与在命令行启动 haproxy 时加上参数“-q”相同
    #quiet
    
    #定义统计信息保存位置
    stats socket /usr/local/haproxy/stats

#默认配置    
defaults
    #默认的模式【tcp:4 层;http:7 层;health: 只返回 OK】
    mode        http
    
    #继承全局的日志定义输出
    log         global
    
    #日志类别, httplog
    #option      httplog 

    #如果后端服务器需要记录客户端真实 ip, 需要在 HTTP 请求中添加”X-Forwarded-For”字段;
    #但 haproxy 自身的健康检测机制访问后端服务器时, 不应将记录访问日志,可用 except 来排除 127.0.0.0,即 haproxy 本身.
    #option      forwardfor except 127.0.0.0/8
    option      forwardfor 

    #开启 http 协议中服务器端关闭功能, 每个请求完毕后主动关闭 http 通道, 使得支持长连接,使得会话可以被重用,使得每一个日志记录都会被记录.
    option      httpclose 

    #如果产生了一个空连接,那这个空连接的日志将不会记录.
    option      dontlognull

    #当与后端服务器的会话失败 (服务器故障或其他原因) 时, 把会话重新分发到其他健康的服务器上; 当故障服务器恢复时, 会话又被定向到已恢复的服务器上;
    #还可以用”retries”关键字来设定在判定会话失败时的尝试连接的次数
    option      redispatch
    retries     3
    
    #当 haproxy 负载很高时, 自动结束掉当前队列处理比较久的链接.
    option      abortonclose

    #默认 http 请求超时��间
    timeout http-request    10s
    #默认队列超时时间, 后端服务器在高负载时, 会将 haproxy 发来的请求放进一个队列中. 
    timeout queue           1m
    #haproxy 与后端服务器连接超时时间.
    timeout connect         5s
    #客户端与 haproxy 连接后, 数据传输完毕, 不再有数据传输, 即非活动连接的超时时间.
    timeout client          1m
    #haproxy 与后端服务器非活动连接的超时时间.
    timeout server          1m
    #默认新的 http 请求连接建立的超时时间,时间较短时可以尽快释放出资源,节约资源.
    timeout http-keep-alive 10s
    #心跳检测超时时间
    timeout check           10s
    
    #最大并发连接数
    maxconn                 2000
    
    #设置默认的负载均衡方式
    #balance source 
    #balnace leastconn

#统计页面配置, frontend 和 backend 的组合体, 监控组的名称可按需自定义
listen admin_status
    #配置监控运行模式
    mode http
    
    #配置统计页面访问端口
    bind 0.0.0.0:1080
    
    #统计页面默认最大连接数
    maxconn 10
    
    #http 日志格式
    option httplog 
    
    #开启统计
    stats enable
    
    #隐藏统计页面上的 haproxy 版本信息
    stats hide-version
    
    #监控页面自动刷新时间
    stats refresh 30s
    
    #统计页面访问 url
    stats uri /stats
    
    #统计页面密码框提示文本
    stats realm mCloud\ Haproxy
    
    #监控页面的用户和密码:admin, 可设置多个用户名
    stats auth admin:admin
    
    #手工启动 / 禁用后端服务器, 可通过 web 管理节点
    stats admin if TRUE

    #设置 haproxy 错误页面
    errorfile 400 /usr/local/haproxy/errorfiles/400.http
    errorfile 403 /usr/local/haproxy/errorfiles/403.http
    errorfile 408 /usr/local/haproxy/errorfiles/408.http
    errorfile 500 /usr/local/haproxy/errorfiles/500.http
    errorfile 502 /usr/local/haproxy/errorfiles/502.http
    errorfile 503 /usr/local/haproxy/errorfiles/503.http
    errorfile 504 /usr/local/haproxy/errorfiles/504.http

#监控 haproxy 后端服务器的监控状态
listen site_status 
       bind 0.0.0.0:1081                       #监听端口
       mode http                               #http 的 7 层模式
       log 127.0.0.1 local2 err                #[err warning info debug] 
       monitor-uri /site_status                #网站健康检测 URL,用来检测 HAProxy 管理的网站是否可以用,正常返回 200,不正常返回 503 
       acl site_dead nbsrv(php_server) lt 1    #定义网站 down 时的策略当挂在负载均衡上的指定 backend 的中有效机器数小于 1 台时返回 true 
       acl site_dead nbsrv(html_server) lt 1 
       acl site_dead nbsrv(backend_default)  lt 1  
       monitor fail if site_dead               #当满足策略的时候返回 503,网上文档说的是 500,实际测试为 503 
       monitor-net 192.168.4.171/32            #来自 192.168.4.152 的日志信息不会被记录和转发
       monitor-net 192.168.4.172/32
    
#frontend, 名字自定义
frontend HAproxy_Cluster
    #定义前端监听端口, 建议采用 bind *:80 的形式,否则做集群高可用的时候有问题,vip 切换到其余机器就不能访问.
    bind 0.0.0.0:80

    #acl 后面是规则名称,当请求的 url 末尾是以.php 结尾时, 匹配触发 php_web 规则,以下两种写法均可.
    acl php_web url_reg /*.php

    #当请求的 url 末尾是以.css、.jpg、.png、.jpeg、.js、.gif 结尾时,匹配并触发 static_web 规则.
    #acl static_web path_end .gif .png .jpg .css .js .jpeg
    #acl static_web url_reg /*.(css|jpg|png|jpeg|js|gif)$

    #- i 为忽略大小写,当被请求的是以 www.test.com 开头的主机时,匹配并触发 dns_name 规则.
    acl html_web hdr_beg(host) -i www.haproxytest.com
    #acl html_web hdr_beg(host) 10.11.4.152

    #当客户端的 IP 是 x.x.x.x 时,匹配并触发 src_ip 规则.
    #acl src_ip src x.x.x.x

    #如果匹配 acl 规则 php_web,将请求转交到 php_server 组处理;如果匹配 acl 规则 html_web,将请求转交到 html_server 组处理.
    use_backend php_server if php_web
    use_backend html_server if html_web

    #如果以上规则都不匹配时,将请求转交到 default_backend 组处理.
    default_backend backend_default

#backend 后端配置, 配置 php_server 组与 html_server 组
backend php_server

    #定义负载均衡方式为 roundrobin 方式, 即基于权重进行轮询调度的算法, 在服务器性能分布较均匀情况下推荐.
    #另有如下几种负载均衡方式:
    #-- static-rr: 也是基于权重进行轮转调度, 但属于静态方法, 运行时调整后端机组权重不会使用新的权重;
    #-- source: 基于请求源 IP 进行 hash 运算匹配后端服务器组;
    #-- leastconn: 不适合会话较短的环境, 如基于 http 的应用;
    #-- uri: 对整个 URI 进行 hash 运算;
    #-- uri_param: 对 URI 中的参数进行转发;
    #-- hdr(<name>): 根据 http 头进行转发, 无该头部则转为使用 roundrobin.
    balance roundrobin

    mode http

    #允许插入 serverid 到 cookie 中,serverid 后面可定义
    cookie SERVERID

    #心跳检测方式为检测后端服务器 index.html 文件,还有其他方式
    option httpchk GET /index.html

    #后端服务器定义, maxconn 1024 表示该服务器的最大连接数, cookie 1 表示 serverid 为 1, weight 代表权重(默认 1,最大为 265,0 则表示不参与负载均衡), 
    #check inter 1500 是检测心跳频率, rise 2 是 2 次正确认为服务器可用, fall 3 是 3 次失败认为服务器不可用.
    server php1 192.168.4.171:80 maxconn 1024 cookie 1 weight 3 check inter 1500 rise 2 fall 3

backend html_server
    balance source
    mode http
    server html1 192.168.4.172:80 maxconn 1024 cookie 1 weight 3 check inter 1500 rise 2 fall 3

backend backend_default
    balance source
    mode http
    server default1 192.168.4.171:80 maxconn 1024 cookie 1 weight 3 check inter 1500 rise 2 fall 3

2)error 文件

#配置文件中统计监控页面部分定义了 error 文件,将安装包中的文件复制到安装目录使用
[root@elk-node2 ~]# cp -r /usr/local/src/haproxy-1.7.2/examples/errorfiles/ /usr/local/haproxy/

更多详情见请继续阅读下一页的精彩内容:http://www.linuxidc.com/Linux/2017-10/147553p2.htm

正文完
星哥说事-微信公众号
post-qrcode
 
星锅
版权声明:本站原创文章,由 星锅 2022-01-21发表,共计14179字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中