HAproxy 基础配置
基础配置详解
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 基础配置的更多相关文章
- HAProxy详解(二):HAProxy基础配置与应用实例
一.HAProxy基础配置与应用实例: 1.快速安装HAProxy集群软件: HAProxy的官网: https://www.haproxy.org/#down下载HAProxy的源码包. 安装: [ ...
- 负载均衡服务之HAProxy基础配置(一)
前文我们聊了下haproxy的基础安装,以及怎样去代理后端主机的配置:当然没有很详细的去说配置文件中各指令的意思:有关haproxy的安装和代理后端server可以参考本人博客https://www. ...
- 负载均衡服务之HAProxy基础配置(二)
前文我们聊了下haproxy的global配置段中的常用参数的说明以及使用,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/12763245.html:今天我们来 ...
- 负载均衡服务之HAProxy基础配置(三)
前文我们聊到了haproxy的代理配置段中比较常用的配置指令的用法以及说明,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/12770930.html:今天我们来 ...
- 负载均衡服务之HAProxy基础配置(四)
前文我们聊了haproxy的状态页配置,状态页中显示各参数的含义,以及基于cookie做会话保持的配置,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/12776 ...
- 负载均衡服务之HAProxy基础配置(五)
前文我们聊了下haproxy的修改报文首部的配置.压缩功能以及haproxy基于http协议自定义健康状态检测机制:回顾请参考https://www.cnblogs.com/qiuhom-1874/p ...
- linux中级之HAProxy基础配置
一.haproxy简介 HAProxy是一款提供高可用性.负载均衡以及基于TCP(第四层)和HTTP(第七层)应用的代理软件,HAProxy是完全免费的.借助HAProxy可以快速并且可靠的提供基于T ...
- 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.安装软件 ...
- 1、代理服务器及haproxy基础
1.web站点架构 前端一台主机提供app server,当用户请求到达时,如果要存储结构化数据,就需要找一台主机做database server.当业务达到一定程度时,要把web server.存储 ...
随机推荐
- IntelliJ IDEA 常用快捷键(转载)
转自:http://www.open-open.com/lib/view/open1396578860887.html Ctrl+Shift + Enter,语句完成“!”,否定完成,输入表达式时按 ...
- 【Weiss】【第03章】练习3.22、3.23、3.24:无代码题,栈的思考题
[练习3.22] a.提出支持栈的Push和Pop操作以及第三种操作FindMin的数据结构,其中FindMin 返回该数据结构的最小元素,所有操作在最坏情况下的运行时间都是O(1). b.证明,如果 ...
- CVE-20117-111882漏洞复现及利用
背景 工程实践题目: 渗透方向:实验班要求 1.利用已有的漏洞,搭建内网实验环境(WEB漏洞或系统漏洞以近两年内的CVE编号为准,每人一个,先报先得,具体由学习委员负责协调),利用工具进行内网渗透攻击 ...
- iOS开发:十六进制颜色转UIColor
Objective-C UIColor * __nullable UIColorFromHexValue(NSUInteger hexValue) { CGFloat red = (hexValue ...
- 重定向 CORS 跨域请求
TL;DR 非简单请求不可重定向,包括第一个preflight请求和第二个真正的请求都不行. 简单请求可以重定向任意多次,但如需兼容多数浏览器,只可进行一次重定向. 中间服务器应当同样配置相关 COR ...
- promise的优势
通过不同的方式读取在 files 文件夹下的三个文件来引出 promise 在处理异步时与回调函数相比的优势,files 文件夹有三个文件 a.json,b.json,c.json. // a.jso ...
- 递归回溯法求N皇后问题
问题描述:在一个NN(比如44)的方格中,在每一列中放置一个皇后,要求放置的皇后不在同一行,同一列,同一斜线上,求一共有多少种放置方法,输出放置的数组. 思路解析:从(1,1)开始,一列一列的放置皇后 ...
- TensorFlow系列专题(八):七步带你实现RNN循环神经网络小示例
欢迎大家关注我们的网站和系列教程:http://panchuang.net/ ,学习更多的机器学习.深度学习的知识! [前言]:在前面的内容里,我们已经学习了循环神经网络的基本结构和运算过程,这一小节 ...
- 全屏banner及全屏轮播
一.全屏banner 1.设置网页图片全屏banner <!DOCTYPE html> <html lang="en"> <head> < ...
- Springcloud 整合Hystrix 断路器,支持Feign客户端调用
1,在这篇博文中,已经大致说过了Springcloud服务保护框架 Hystrix在服务隔离,服务降级,以及服务熔断中的使用 https://www.cnblogs.com/pickKnow/p/11 ...