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.存储 ...
随机推荐
- ERP系统功能及部署方式
ERP是对企业经营过程中的一些事项进行系统化管理的一种软件,所以ERP软件包含企业经营过程中需要用到的多种功能管理模块,并且ERP软件有两种部署方式.下面一起来了解一下相关的知识吧! ERP系统的功能 ...
- Mol. Cell. Proteomics | 癌细胞衍生的小细胞外囊体通过促进HGF-Met途径促进受体细胞转移
题目:Cancer cell derived small extracellular vesicles contribute to recipient cell metastasis through ...
- [剑指offer]14-1.剪绳子
14-1.剪绳子 方法一 动态规划 思路:递归式为f(n)=max(f(i), f(n-i)),i=1,2,...,n-1 虽然我现在也没有彻底明白这个递归式是怎么来的,但用的时候还是要注意一下.f( ...
- 关于PS切图
现在前端项目中碰到越来越多的图片处理问题,虽然找自己公司UI小哥哥小姐姐可以解决,但是每次都找不仅要看别人有没有时间,更得看人家脸色 唉,自己摸索着来吧(多图,流量党请注意切换WiFi): 通常切图的 ...
- Selenium系列(三) - 针对元素常见的简单操作
如果你还想从头学起Selenium,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1680176.html 其次,如果你不懂前端基础知识, ...
- hdu1224SPFA求最长路加上打印路径
题目链接:http://icpc.njust.edu.cn/Problem/Hdu/1224/ 无负环. 代码如下: #include<bits/stdc++.h> using names ...
- 洛谷1063 +区间dp(经典问题)
题目网址:https://www.luogu.com.cn/problem/P1063 题意大致是:给定一个序列An,第i个元组表示为(Ai,Ai+1),序列位置不变,当合并一个区间[l,l+1]时开 ...
- [模板] dfs序
B.树之呼吸-贰之型-dfs序 Time Limit: 1000 MS Memory Limit: 32768 K Total Submit: 42 (16 users) Total Accepted ...
- sql-lib闯关61-65
第六十一关 和六十关基本一样,就是变成了单引号和双括号,这好像是第一次遇见双括号 爆数据库名 ?id=1'))and extractvalue(1, concat(0x5c, (select da ...
- 一文带你入门Java Stream流,太强了
两个星期以前,就有读者强烈要求我写一篇 Java Stream 流的文章,我说市面上不是已经有很多了吗,结果你猜他怎么说:"就想看你写的啊!"你看你看,多么苍白的喜欢啊.那就&qu ...