照片参考:https://blog.csdn.net/weixin_…
Haproxy 配置
永久修改名字:便于区分虚拟机!
Haproxy:hostnamectl set-hostname haproxy
Web1: hostnamectl set-hostname WEB1
Web2:hostnamectl set-hostname WEB2
Test:hostnamectl set-hostname test
1、haproxy 安装并将过程截图
yum list |grep haproxy:查看 haproxyl 列表,查询可能会花费较长时间!
yum -y install haproxy:安装:
[点击并拖拽以移动]
2、填写 IP 分配表:
服务器角色 IP 地址
Haproxy
192.168.1*8.128
Web1
192.168.1*8.137
Web2
192.168.1*8.138
test 192.168.1*8.135
3、简答:说明 haproxy 配置文件中 global、defaults、frontend、backend 参数的作用?
Global:
用于设置全局配置参数,属于进程级的配置,通常用操作系统配置相关
defaults:
默认参数的配置部分。在些部分设置的参数,默认会自动引用到下面的 frontend, backend 和 listen 部分
frontend:
用于设置接收用户请求的前端虚拟节点。frontend 可以根据 ACL 规则直接指定要使用的后端 backend
backend:
用于设置集群后端服务集群的配置,也就是用来添加一组真实服务器,以处理前端用户的请求
4、Haproxy 配置并截图
编辑 /etc/haproxy/haproxy.cfg 配置文件,配置内容如下:
位置:/etc/haproxy/haproxy.cfg
vim /etc/haproxy/haproxy.cfg
global
log 127.0.0.1 local2
chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid
maxconn 4000
user haproxy
group haproxy
daemon
stats socket /var/lib/haproxy/stats
defaults
mode http
log global
option httplog
option dontlognull
option http-server-close
option forwardfor except 127.0.0.0/8
option redispatch
retries 3
timeout http-request 10s
timeout queue 1m
timeout connect 10s
timeout client 1m
timeout server 1m
timeout http-keep-alive 10s
timeout check 10s
maxconn 3000
frontend main *:80
acl url_static path_beg -i /static /images /javascript /stylesheets
acl url_static path_end -i .jpg .gif .png .css .js
use_backend static if url_static
default_backend web
backend static
balance roundrobin
server static 127.0.0.1:4331 check
backend web
balance roundrobin
server web1 192.168.158.137:80 check
server web2 192.168.158.138:80 check
保存退出
3、启动 haproxy
启动之前检查语法是否有问题,命令如下
haproxy -f /etc/haproxy/haproxy.cfg -c
-f filename 如果 filename 为常规文件,则为真
linux 命令中的 - c 一般是指:当执行某个可执行文件时,后面加 -c 然后再加配置 (或参数) 文件,
来达到指定以某种配置参数来启动脚本的目的。
例如:nginx 的启动命令:/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
Configuration file is valid!就 OK 啦!
启动 haproxy:
关闭防火墙:systemctl start haproxy (service haproxy start 命令不行!)
第一次:
第二次:
感觉不放心还可以用另外一台虚拟机来试一下!
代码:for i in {1..40};do curl 192.168.158.128;done
通过这种方式的安装所有文件路径:
便于查找,查看。给出路径!
HAProxy 配置文件详解
根据功能、用途不同,其配置文件主要由 5 部分组成,分别为 global 部分,defautls 部分,frontend 部分、backend 部分、listen 部分
1)global 部分:用于设置全局配置参数,属于进程级的配置,通常用操作系统配置相关
2) defaults 部分:默认参数的配置部分。在些部分设置的参数,默认会自动引用到下面的 frontend, backend 和 listen 部分
3) frontend 部分:用于设置接收用户请求的前端虚拟节点。frontend 可以根据 ACL 规则直接指定要使用的后端 backend
4) backend 部分:用于设置集群后端服务集群的配置,也就是用来添加一组真实服务器,以处理前端用户的请求
5) listen 部分:此部分是 frontend 和 backend 部分的结合体
配置项说明:
1) global 部分
global
log 127.0.0.1 local1 info #全局的日志配置,local0 是日志设备,info 表示日志级别。其中日志级别有 err, warning, info, debug 4 种。这个配置表示使用 127.0.0.1 上的 rsyslog 服务中的 local0 日志设备,记录日志等级为 info
maxconn 4096 #设置每个 HAProxy 进程可接受的最大并发连接数
user nobody #设置启动 HAProxy 进程的用户和组
group nobody
daemon #设置 HAProxy 进程进入后台运行,这是推荐的运行模式
nbproc 1 #设置 HAProxy 启动时可创建的进程数,此参数要求将 HAProxy 运行模式设置为 daemon,默认只启动一个进程;建议该值设置时小于 CPU 核数
pidfile /usr/local/haproxy/logs/haproxy.pid #指定 HAProxy 进程 ID 的存放位置
2) defaults 部分
defaults
mode http #设置 HAProxy 实例默认的运行模式,有 tcp, http, health 三个可选值。tcp 模式:在此模式下,客户端和服务器端间将建立一个全双工的连接,不会对七层报文做任何检查,为默认的模式;经常用于 SSL, SSH, SMTP 等应用;http 模式:在此模式下,客户端请求在转发至后端服务器前将会被深度分析,所有不与 RFC 格式兼容的请求都会被拒绝;
retires 3 #设置连接后端服务器的失败重试次数,如果连接失败的次数超过该数值,HAProxy 会将对应的后端服务器标记为不可用
timeout connect 10s #设置成功连接到一台服务器的最长等待时间,默认单位是毫秒,但也可以使用其他时间单位作后缀
timeout client 20s #设置连接客户端发送数据时最长等待时间,默认单位是毫秒,但也可以使用其他时间单位作后缀
timeout server 30s #设置服务器端回应客户端数据发送的最长等待时间,默认单位是毫秒,但也可以使用其他时间单位作后缀
timeout check 5s #设置对后端服务器的检测超时时间,默认单位是毫秒,但也可以使用其他时间单位作后缀
3) frontend 部分
frontend www #通过 frontend 关键字定义了一个名为 ”www” 的前端虚拟节点
bind *:80 #此选项用于定义一个或者几个监听的套接字,只能在 frontend 和 listen 中定义,格式如下:bind [<address>:[port_range]] [interface]
mode http
option httplog #默认情况下,HAProxy 日志是不记录 HTTP 请求的,此选项的作用是启用日志记录 HTTP 请求
option forwardfor #此选项的作用是保证后端服务器可记录客户端真实的 IP
option httpclose #此选项表示客户端和服务端完成一次连接请求后,HAProxy 将主动关闭此 TCP 连接。这是对性能非常有帮助的一个参数
log global #表示使用 global 段中定义的日志格式
default_backend htmpool #此选项用于指定后端默认的服务器池
4) backend 部分
backend htmpool
mode http
option redispatch #此参数用于 cookie 保持的环境中。在默认情况下,HAProxy 会将其请求的后端服务器的 serverID 插入 cookie 中,以保证会话的 session 持久性。而如果后端服务器出现故障,客户端的 cookie 是不会刷新的,这就会造成无法访问。此时,如果设置了此参数,就会将客户的请求强制定向到另外一台健康的后端服务器上,以保证服务正常
option abortonclose #此参数可以在服务器负载很高的情况下,自动结束当前队列中处理时间比较长的连接
balance roundrobin #负载均衡算法
cookie SERVERID #表示允许向 cookie 插入 SERVERID,每台服务器的 SERVERID 可在下面的 server 关键字中使用 cookie 关键字定义
option httpchk GET /index.php #此选项表示启用 HTTP 的服务状态检测功能
server web1 10.1.1.1:80 cookie server1 weight 6 check inter 2000 rise 2 fall 3
server web2 10.1.1.2:80 cookie server2 weight 6 check inter 2000 rise 2 fall 3#server 用于定义多台后端真实服务器,不能用于 frontend 和 listen 段
5) listen 部分
listen admin_status #listen 部分用于配置 HAProxy 监控页面相关的参数
bind 0.0.0.0:9188
mode http
log 127.0.0.1 local0 err
stats refresh 30s #设置 HAProxy 监控统计页面自动刷新的时间
stats uri /haproxy-status #设置 HAProxy 监控页面访问的 URI 路径
stats realm Welcome login #设置登录监控页面时,密码框上的提示信息
stats auth admin:admin #设置登录监控页面的用户名,密码。用户密码用冒号隔开,可以设置多个,每行一个
stats hide-version #设置在监控页面上隐藏 HAProxy 的版本号
stats admin if TRUE #设置此选项,可在监控页面上启用、禁用后端服务器,仅在 1.4.9 版本以后生效
6、HAProxy 支持的负载均衡算法:
roundrobin:基于权重进行轮叫调度的算法
static-rr:基于权重进行轮叫调度的算法,不过此算法为静态算法,在运行时调整其服务器权重不会生效
source:基于请求源 IP 的算法。此算法先对请求的源 IP 进行 HASH 运算,然后将结果与后端服务器的权重总数相除后转发至某台匹配的后端服务器。这种方式可以使同一个客户端 IP 的请求始终转发到某特定的后端服务器
leastconn:此算法会将新的连接请求转发到具有最少连接数目的后端服务器。在会话时间较长的场景中推荐使用此算法,例如数据库负载均衡
uri:此算法会对部分或整个 URI 进行 HASH 运算,再经过与服务器的总权重相除,最后转发到某台匹配的后端服务器上
uri_param:此算法会根据 URL 路径中的参数进行转发,这样可保证在后端真实服务器数据不变时,同一个用户的请求始终分发到同一台机器上
hdr:此算法根据 HTTP 头进行转发,如果指定的 HTTP 头名称不存在,则使用 roundrobin 算法 进行策略转发