CentOS 7.2 部署Haproxy 1.7.2

  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. 拓扑图

  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安装步骤),以方便后续查看验证结果。

二.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/

文章来源网络,作者:运维,如若转载,请注明出处:https://shuyeidc.com/wp/220291.html<

(0)
运维的头像运维
上一篇2025-04-14 12:20
下一篇 2025-04-14 12:21

相关推荐

  • 个人主题怎么制作?

    制作个人主题是一个将个人风格、兴趣或专业领域转化为视觉化或结构化内容的过程,无论是用于个人博客、作品集、社交媒体账号还是品牌形象,核心都是围绕“个人特色”展开,以下从定位、内容规划、视觉设计、技术实现四个维度,详细拆解制作个人主题的完整流程,明确主题定位:找到个人特色的核心主题定位是所有工作的起点,需要先回答……

    2025-11-20
    0
  • 社群营销管理关键是什么?

    社群营销的核心在于通过建立有温度、有价值、有归属感的社群,实现用户留存、转化和品牌传播,其管理需贯穿“目标定位-内容运营-用户互动-数据驱动-风险控制”全流程,以下从五个维度展开详细说明:明确社群定位与目标社群管理的首要任务是精准定位,需明确社群的核心价值(如行业交流、产品使用指导、兴趣分享等)、目标用户画像……

    2025-11-20
    0
  • 香港公司网站备案需要什么材料?

    香港公司进行网站备案是一个涉及多部门协调、流程相对严谨的过程,尤其需兼顾中国内地与香港两地的监管要求,由于香港公司注册地与中国内地不同,其网站若主要服务内地用户或使用内地服务器,需根据服务器位置、网站内容性质等,选择对应的备案路径(如工信部ICP备案或公安备案),以下从备案主体资格、流程步骤、材料准备、注意事项……

    2025-11-20
    0
  • 如何企业上云推广

    企业上云已成为数字化转型的核心战略,但推广过程中需结合行业特性、企业痛点与市场需求,构建系统性、多维度的推广体系,以下从市场定位、策略设计、执行落地及效果优化四个维度,详细拆解企业上云推广的实践路径,精准定位:明确目标企业与核心价值企业上云并非“一刀切”的方案,需先锁定目标客户群体,提炼差异化价值主张,客户分层……

    2025-11-20
    0
  • PS设计搜索框的实用技巧有哪些?

    在PS中设计一个美观且功能性的搜索框需要结合创意构思、视觉设计和用户体验考量,以下从设计思路、制作步骤、细节优化及交互预览等方面详细说明,帮助打造符合需求的搜索框,设计前的规划明确使用场景:根据网站或APP的整体风格确定搜索框的调性,例如极简风适合细线条和纯色,科技感适合渐变和发光效果,电商类则可能需要突出搜索……

    2025-11-20
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注