基础配置详解

HAProxy 的配置文件haproxy.cfg由两大部分组成,分别是global和proxies部分

global:全局配置段

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

proxies:代理配置段

defaults:为frontend, backend, listen提供默认配置
frontend:前端,相当于nginx中的server {} 调度到指定方服务器
backend:后端,相当于nginx中的upstream {}
listen:同时拥有前端和后端配置 前端和后端一一对应,在一个语句块内,简化代码

global配置参数

chroot     #锁定运行目录 只能看到特定目中
deamon     #以守护进程运行
#stats socket /var/lib/haproxy/haproxy.sock mode 600 level admin process 1
#socket文件
user, group, uid, gid   #运行haproxy的用户身份
nbproc n        #开启的haproxy work 进程数,默认进程数是一个,一般和CPU个数匹配
#nbthread 1      #指定每个haproxy进程开启的线程数,默认为每个进程一个线程,和nbproc互斥(版
本有关)

#如果同时启用nbproc和nbthread 会出现以下日志的错误,无法启动服务
Apr 7 14:46:23 haproxy haproxy: [ALERT] 097/144623 (1454) : config : cannot
enable multiple processes if multiple threads are configured. Please use either
nbproc or nbthread but not both.

cpu-map 1 0     #绑定haproxy 进程至指定CPU,将第一个work进程绑定至0号CPU

maxconn n      #每个haproxy进程的最大并发连接数 建议设置大点 100000

maxsslconn n     #每个haproxy进程ssl最大连接数,用于haproxy配置了证书的场景下

maxconnrate n    #每个进程每秒创建的最大连接数量 建议设置大点 100000

spread-checks n   #后端server状态check随机提前或延迟百分比时间,建议2-5(20%-50%)之间,默认
值0 错峰检查,减轻服务器的压力

pidfile        #指定主进程pid文件路径
log 127.0.0.1 local2 info #定义全局的syslog服务器;日志服务器需要开启UDP协议,最多可以定
义两个

日志设置

#在global配置项定义:
log 127.0.0.1 local{1-7} info #基于syslog记录日志到指定设备,级别有(err、warning、info、debug)

listen web_port
bind 127.0.0.1:80
mode http
log global    #开启当前web_port的日志功能,默认不记录日

server web1 127.0.0.1:8080 check inter 3000 fall 2 rise 5
# systemctl restart haproxy

2 需要开启主机的日志记录功能
vim /etc/rsyslong.conf # 日志服务配置
# Provides UDP syslog reception UDP 协议
$ModLoad imudp
$UDPServerRun 514 取消这两行的注释

# Save boot messages also to boot.log #添加日志类型和存放位置

local7.*       /var/log/boot.log

local2.*      /var/log/haproxy.log

# 远程日志存放
1 在本机设置内添加远程主机的IP信息
global 模块内
log 127.0.0.1 local2 info 本机
log 10.0.0.8 local2 info 远程存放

2 在其他主机上开启日志功能514 协议,
1#centos8 取消这两行的注释
# for parameters see http://www.rsyslog.com/doc/imudp.html
#module(load="imudp") # needs to be done just once
#input(type="imudp" port="514")

2 # 添加日志类型及存放位置
# Save boot messages also to boot.log
local7.* /var/log/boot.log
local2.* /var/log/haproxy.log
3 启动
systemctl reload haproxy.service # 本机重新加载配置文件
systemctl restart rsyslog.service # 远程主机重新启动日志服务 rsyslog

算法配置

# 算法定义的位置
isten web_host
bind 10.0.0.7:80,:8801-8810,10.0.0.7:9001-9010
mode http
log global
balance 算法name #定义算法
server web1 10.0.0.17:80 weight 1 check inter 3000 fall 2 rise 5
server web2 10.0.0.27:80 weight 1 check inter 3000 fall 2 rise 5

代理服务器Proxies配置

实际工作的配置

defaults [<name>] #默认配置项,针对以下的frontend、backend和listen生效,可以多个name也
可以没有name
frontend <name> #前端servername,类似于Nginx的一个虚拟主机 server和LVS服务集群;用哪个端口接受用户的请求
backend <name> #后端服务器组,等于nginx的upstream和LVS中的RS服务器;后端服务器的集合
listen <name> #将frontend和backend合并在一起配置,相对于frontend和backend配置更简
洁,生产常用

注意:name字段只能使用大小写字母,数字,‘-’(dash),'_‘(underscore),'.' (dot)和 ':'(colon),并且严
格区分大小写

Proxies配置-defaults

option redispatch #当server Id对应的服务器挂掉后,强制定向到其他健康的服务器,重新
派发
option abortonclose #当服务器负载很高时,自动结束掉当前队列处理比较久的链接,针对业务情
况选择开启
option http-keep-alive #开启与客户端的会话保持
option forwardfor #透传客户端真实IP至后端web服务器
mode http|tcp #设置默认工作类型,使用TCP服务器性能更好,减少压力;不要在全局设置内修改,在其他模块内单独设置;tcp四层、http七层;四个模块内都可以设置
timeout http-keep-alive 120s #session 会话保持超时时间,此时间段内会转发到相同的后端服务

timeout connect 120s #客户端请求从haproxy到后端server最长连接等待时间(TCP连接之前),
默认单位ms
timeout server 600s #客户端请求从haproxy到后端服务端的请求处理超时时长(TCP连接之后),
默认单位ms,如果超时,会出现502错误,此值建议设置较大些,访止502错误
timeout client 600s #设置haproxy与客户端的最长非活动时间,默认单位ms,建议和timeout
server相同
timeout check 5s #对后端服务器的默认检测超时时间
default-server inter 1000 weight 3 #指定后端服务器的默认设置 权重3 默认单位毫秒ms,1秒

Proxies配置-listen替代frontend+backend

使用listen替换上面的frontend和backend的配置方式,可以简化设置,通常只用于TCP协议的应用

#官网业务访问入口
listen WEB_PORT_80 #名称:业务名_服务名_端口
bind 10.0.0.7:80 # 指定可以被互联网看到、访问的vip地址和端口 ;不能用在backend模块中
mode http
option forwardfor
server web1 10.0.0.17:8080 check inter 3000 fall 3 rise 5
server web2 10.0.0.27:8080 check inter 3000 fall 3 rise 5

# 实验配置
listen web_port
bind 172.16.0.100:80
mode http
log global
#server web1 127.0.0.1:8080 check inter 3000 fall 2 rise 5i
server RS1 10.0.0.17
server RS2 10.0.0.27

2 在服务器上安装 httpd 服务,并启动
[root@rs1 ~]#yum -y install httpd;echo RS1 10.0.0.17 > /var/www/html/index.html;systemctl start httpd
[root@rs2 ~]#yum -y install httpd;echo RS2 10.0.0.27 > /var/www/html/index.html;systemctl start httpd

3 在客户端访问服务器对外提供的IP地址
[root@Cilent ~]#curl 172.16.0.100:80
RS2 10.0.0.27
[root@Cilent ~]#curl 172.16.0.100:80
RS1 10.0.0.17
[root@Cilent ~]#curl 172.16.0.100:80
RS2 10.0.0.27
[root@Cilent ~]#curl 172.16.0.100:80
RS1 10.0.0.17

4 访问后端服务器时是haproxy代替用户访问服务器,
服务器看到是haproxy的IP地址,看不到客户端的IP地址

bind

# 指定可以被互联网看到、访问的vip地址和端口 ;不能用在backend模块中
bind: #指定HAProxy的监听地址,可以是IPV4或IPV6,可以同时监听多个IP或端口,可同时用于listen字段中
#格式:
bind [<address>]:<port_range> [, ...] [param*]
#注意:如果需要绑定在非本机的IP,需要开启内核参数:net.ipv4.ip_nonlocal_bind=1

vim /etc/sysctl.conf
添加 net.ipv4.ip_nonlocal_bind=1
[root@haproxy ~]#sysctl -p
net.ipv4.ip_nonlocal_bind = 1

server

mode http|tcp #指定负载协议类型,和对应的frontend必须一致
option #配置选项
server #定义后端real server 后端服务器
注意:option后面加 httpchk,smtpchk,mysql-check,pgsql-check,ssl-hello-chk方法,可用于实现更
多应用层检测功能。

listen web_port
bind 172.16.0.100:80
mode http
log global
#server web1 127.0.0.1:8080 check inter 3000 fall 2 rise 5i
server RS1 10.0.0.17
server RS2 10.0.0.27

option 配置

后端服务器健康性检查

注意:option后面加 httpchk,smtpchk,mysql-check,pgsql-check,ssl-hello-chk方法,可用于实现更
多应用层检测功能。

check #对指定real进行健康状态检查,如果不加此设置,默认不开启检查
addr <IP> #可指定的健康状态监测IP,可以是专门的数据网段,减少业务网络的流量
port <num> #指定的健康状态监测端口
inter <num> #健康状态检查间隔时间,默认2000 ms
fall <num> #后端服务器从线上转为线下的检查的连续失效次数,默认为3
rise <num> #后端服务器从下线恢复上线的检查的连续有效次数,默认为2
weight <weight> #默认为1,最大值为256,0表示不参与负载均衡,但仍接受持久连接;0 可安全下线服务,等几分钟老用户断开连接之后实现平滑升级服务
backup #将后端服务器标记为备份状态,只在所有非备份主机down机时提供服务,类似
Sorry Server;实现容错
disabled #将后端服务器标记为不可用状态,即维护状态,除了持久模式,将不再接受连接
redirect prefix http://www.baidu.com/ #将请求临时(302)重定向至其它URL,只适用于
http模式
redir http://www.baidu.com #将请求临时(302)重定向至其它URL,只适用于
http模式
maxconn <maxconn> #当前后端server的最大并发连接数
backlog <backlog> #当前端服务器的连接数达到上限后的排队个数,注意:不支持backend;在一个配置模块内添加,不要再单一主机上添加

# 案列:健康检查
server web1 127.0.0.1:8080 check inter 3000 fall 2 rise 5
对这个服务器进行健康性检查,每3秒检查一次,连续两次失败就停止调度访问到这个服务器,连续检查5次成功就把服务器重新上线

# 302 重定向 curl 直接看不到
#查看报文头观察是否连接
[root@Cilent ~]#curl -I 172.16.0.100:80
HTTP/1.1 200 OK
date: Thu, 09 Apr 2020 08:22:30 GMT
server: Apache/2.4.6 (CentOS) mod_wsgi/3.4 Python/2.7.5
last-modified: Thu, 09 Apr 2020 06:11:23 GMT
etag: "e-5a2d57c717eb5"
accept-ranges: bytes
content-length: 14
content-type: text/html; charset=UTF-8

这样就不通过haproxy 访问了,IP地址不在一个网段,所以显示无法连接网络,需要添加网关
[root@Cilent ~]#curl -L 172.16.0.100:80
curl: (7) Failed to connect to 10.0.0.8: Network is unreachable

backup 备用服务器

listen web_port
bind 172.16.0.100:80
mode http
log global
#server web1 127.0.0.1:8080 check inter 3000 fall 2 rise 5
server RS1 10.0.0.17:80 check inter 3000 fall 2 rise 5
server RS2 10.0.0.27:80 check inter 3000 fall 2 rise 5 weight 3
server sorryServer 127.0.0.1:8080 backup
# 以上服务器停止后将由 127.0.0.1:8080 提供服务
1 需要做这台服务器上提前设置http的
安装
修改端口

frontend+backend配置实例

前端+后端的服务

实现前后端分离定义

frontend magedu-test-http #前端服务器名称
bind :80,:8080 # 监控端口
mode tcp
use_backend magedu-test-http-nodes #调度到后端服务器的名称magedu-test-http-nodes

backend magedu-test-http-nodes # 后端服务器名称
mode tcp
default-server inter 1000 weight 6
server web1 10.0.0.17:80 check weight 2 addr 10.0.0.117 port 8080
server web1 10.0.0.27:80 check

1 服务器可以属于多个组

# 案例
frontend mage_test_http
bind 172.16.0.100:80
log global
use_backend mage_test_http

forntend mage_tomc_http
bind 172.16.0.100:8080
log global
use_backend mage_tom_http

backend mage_test_http
server RS2 10.0.0.27:80 check inter 3000 fall 2 rise 5

backend mage_tomc_http
server RS1 10.0.0.17:80 check inter 3000 fall 2 rise 5

子配置文件

#
mkdir /etc/haproxy/conf.d #创建子配置文件夹
touch /etc/haproxy/conf.d/test.cfg # 在子配置文件夹内创建文件

vim /etc/haproxy/conf.d/test.cfg # 添加配置
[root@haproxy ~]#cat /etc/haproxy/conf.d/test.cfg
listen mage_test_http
bind 172.16.0.100:80
log global
server RS2 10.0.0.27:80 check inter 3000 fall 2 rise 5
server RS1 10.0.0.17:80 check inter 3000 fall 2 rise 5

# 在启动service中添加子配置文件夹
vim /usr/lib/systemd/system/haproxy.service 修改haproxy.service
1 在service 模块内添加子配置文件夹 -f /etc/haproxy/conf.d 指定文件夹
两行都需要添加 第一行为检查 第二行为启动时使用的配置文件
[Service]
ExecStartPre=/usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -f /etc/haproxy/conf.d/ -c -q
ExecStart=/usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -f /etc/haproxy/conf.d/ -p /var/lib/haproxy/haproxy.pid
ExecReload=/bin/kill -USR2 $MAINPID

2 #
[root@haproxy ~]#systemctl daemon-reload # services生效
[root@haproxy ~]#systemctl restart haproxy.service

HAproxy 基础配置的更多相关文章

  1. HAProxy详解(二):HAProxy基础配置与应用实例

    一.HAProxy基础配置与应用实例: 1.快速安装HAProxy集群软件: HAProxy的官网: https://www.haproxy.org/#down下载HAProxy的源码包. 安装: [ ...

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

    前文我们聊了下haproxy的基础安装,以及怎样去代理后端主机的配置:当然没有很详细的去说配置文件中各指令的意思:有关haproxy的安装和代理后端server可以参考本人博客https://www. ...

  3. 负载均衡服务之HAProxy基础配置(二)

    前文我们聊了下haproxy的global配置段中的常用参数的说明以及使用,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/12763245.html:今天我们来 ...

  4. 负载均衡服务之HAProxy基础配置(三)

    前文我们聊到了haproxy的代理配置段中比较常用的配置指令的用法以及说明,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/12770930.html:今天我们来 ...

  5. 负载均衡服务之HAProxy基础配置(四)

    前文我们聊了haproxy的状态页配置,状态页中显示各参数的含义,以及基于cookie做会话保持的配置,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/12776 ...

  6. 负载均衡服务之HAProxy基础配置(五)

    前文我们聊了下haproxy的修改报文首部的配置.压缩功能以及haproxy基于http协议自定义健康状态检测机制:回顾请参考https://www.cnblogs.com/qiuhom-1874/p ...

  7. linux中级之HAProxy基础配置

    一.haproxy简介 HAProxy是一款提供高可用性.负载均衡以及基于TCP(第四层)和HTTP(第七层)应用的代理软件,HAProxy是完全免费的.借助HAProxy可以快速并且可靠的提供基于T ...

  8. HAProxy(三):Keeplived+HAProxy搭建高可用负载均衡动静分离架构基础配置示例

    一.安装环境 1.软件版本 HAProxy:1.5.18 Keepalived:1.3.5 Nginx:1.12.2 PHP:7.2 系统版本:CentOS 7.4 2.IP分配与架构图 3.安装软件 ...

  9. 1、代理服务器及haproxy基础

    1.web站点架构 前端一台主机提供app server,当用户请求到达时,如果要存储结构化数据,就需要找一台主机做database server.当业务达到一定程度时,要把web server.存储 ...

随机推荐

  1. Android网络开发

    1. WebView用法 ①布局文件新建一个WebView,特别注意线性布局和控件的宽高都要匹配父控件 <LinearLayout xmlns:android="http://sche ...

  2. 【Weiss】【第03章】栈例程

    写栈比队列更简单一些,毕竟只有一个数据出入口. 之前用C在程序里模拟栈代替递归的时候,直接搞个数组来实现都是非常轻松愉快的事情. 不多说,放代码. 测试代码 #include <iostream ...

  3. 最详细的 Spring Boot 多模块开发与排坑指南

    创建项目 创建一个 SpringBoot 项目非常的简单,简单到这里根本不用再提.你可以在使用 IDEA 新建项目时直接选择 Spring Initlalize 创建一个 Spring Boot 项目 ...

  4. iOS开发技术 - 二维码扫描、生成

    QRecLevel:QR_ECLEVEL_H // 二维码容错率,最高为30%(即QR_ECLEVEL_H),即LOGO有大                                       ...

  5. canvas绘制折线图

    效果图: 重难点: 1.画布左上角的顶点的坐标为(0 ,0),右下角的坐标最大,与平常思维相反 2.数据的处理 html代码: <!DOCTYPE html><html lang=& ...

  6. python3爬虫爬取金庸小说所有角色

    # -*- coding:utf-8 -*- import requests from bs4 import BeautifulSoup url = 'http://www.jinyongwang.c ...

  7. no parameterless constructor define for type 解决一例

    在生成根据模型和上下文生成带增删查改操作的视图的控制器时,提示上述信息,网上查找了资料也没有解决,突然想起该项目是连接MSSQL数据库和Redis数据库的,并且已经依赖注入了,而Redis数据库的服务 ...

  8. SpringFramework之IoC容器初始化

    分析例子 启动类 Application,使用的是ClassPathXmlApplicationContext来加载xml文件 /** * @author jianw.li * @date 2020/ ...

  9. PAT 乙级 1007. 素数对猜想 (20) c++ 筛选法求素数

    PAT 乙级 1007. 素数对猜想 (20) c++ 筛选法求素数 让我们定义 dn 为:dn = pn+1 - pn,其中 pi 是第i个素数.显然有 d1=1 且对于n>1有 dn 是偶数 ...

  10. Spring----注释----开启Annotation <context:annotation-config> 和 <context:component-scan>诠释及区别

    来源:http://www.cnblogs.com/leiOOlei/p/3713989.html <context:annotation-config> 和 <context:co ...