Haproxy实现负载均衡
·
1. 环境规划:
| 主机名 | 主机地址 | 角色 |
| node1 | 192.168.188.11 | 复杂均衡调度器 |
| node2 | 192.168.188.12 | 后端服务器1 |
| node3 | 192.168.188.13 | 后端服务器2 |
| node4 | 192.168.188.14 | 测试服务器 |
2. Haproxy主配置文件:
[root@node1 ~]# vim /etc/haproxy/haproxy.cfg
global ##全局配置
log 127.0.0.1 local2
chroot /usr/local/haproxy
pidfile /var/run/haproxy.pid
maxconn 4000
user haproxy
group haproxy
daemon
stats socket /usr/local/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
listen stats ##配置haproxy状态页
mode http ##访问的协议
stats hide-version ##隐藏状态页的haproxy版本
bind 0.0.0.0:9999 ##状态页的地址和端口
stats enable ##表示开启状态页
log global ##表示使用全局的日志配置
stats uri /haproxy-status ##访问状态页的uri,不写默认是访问" /haproxy?stats "
stats auth haadmin:123456 ##访问状态页的用户的密码
stats refresh 30s ##设置状态页的刷新时间
stats admin if TRUE ##启动状态页的管理功能

3. Haproxy开启日志功能:
##第一步:
[root@node1 ~]# vim /etc/haproxy/haproxy.cfg
#在global配置项定义:默认是local2
log 127.0.0.1 local{1-7} info ##基于syslog记录日志到指定设备,级别有
(err,warning,info,debug)
##第二步:
[root@node1 ~]# vim /etc/rsyslog.conf
$ModLoad imudp
$UDPServerRun 514
# Save haproxy messages also to haproxy.log
local2.* /var/log/haproxy.log
##重启rsyslog.service和haproxy.service
[root@node1 ~]# systemctl restart rsyslog.service
[root@node1 ~]# systemctl restart haproxy.service
##查看haproxy日志是否开启
[root@node1 ~]# ll /var/log/haproxy.log
-rw------- 1 root root 115658 Oct 21 21:32 /var/log/haproxy.log
4. Haproxy配置文件的配置负载均衡:这里使用子配置文件配置。
1>. 方式一:通过前后端的方式配置:
[root@node1 ~]# cd /etc/haproxy/conf.d/
[root@node1 conf.d]# vim bftest.cfg
frontend openlab-test-http ##前端配置的名称
bind :80,:8080 ##指定HAProxy的监听地址加端口
mode http ##访问的协议
use_backend openlab-test-http-backend ##定义绑定的后端服务器池
backend openlab-test-http-backend ##定义后端服务器池,名字与前端中配置必须一致
balance roundrobin ##指定负载均衡调度算法
server web1 192.168.188.12:80 check ##后端服务器1的地址
server web2 192.168.188.13:80 check ##后端服务器2的地址
##server配置的语法:
server 服务器名 服务器地址:访问端口 [weight 权重] check
check:对指定real进行健康状态检查,如果不加此设置,默认不开启检查
2>. 方式二:通过frontend+backend方式,即前后端结合的方式配置:
[root@node1 conf.d]# vim listentest.cfg
listen web_port_80
bind 192.168.188.11:80 ##绑定的访问集群的地址和端口
mode http ##访问的协议
option forwardfor
log global ##表示日志配置使用全局的配置
balance roundrobin ##配置负载均衡的算法
server web1 192.168.188.12:80 weight 2 check ##后端服务器1
server web2 192.168.188.13:80 weight 1 check ##后端服务器2
"option forwardfor"参数的作用:在由 haproxy 发往后端主机的请求报文中添加"X-Forw
arded-For"首部,其值为前端客户端的地址,用于向后端主发送真实的客户端IP。
配置"option forwardfor"参数后,若后端服务器是Nginx则该配置会直接生效;但是若后端服务器
是Apache,则需要对httpd配置文件进行如下配置:
[root@node2 ~]# vim /etc/httpd/conf/httpd.conf
<IfModule log_config_module>
.......
#LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\""
combined
##将上行修改为:
LogFormat "%h %{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\"
\"%{User-Agent}i\"" combined
.......
</IfModule>
补充:roundrobin:基于权重的轮询动态调度算法,支持权重的运行时调整,不同于lvs中的rr轮训模式,HAProxy中的roundrobin支持慢启动(新加的服务器会逐渐增加转发数),其每个后端backend中最多支持4095个real server,支持对real server权重动态调整,roundrobin为默认调度算法
5. 重启haproxy并配置后端页面:
[root@node1 conf.d]# systemctl restart haproxy.service
##配置访问页面
[root@node2 ~]# echo "`hostname -I`" > /var/www/html/index.html
[root@node3 ~]# echo "`hostname -I`" > /var/www/html/index.html
6. 访问haproxy负载调度器:
[root@node4 ~]# for ((i=1;i<=10;i++))
> do
> curl 192.168.188.11
> done
192.168.188.12
192.168.188.12
192.168.188.13
192.168.188.12
192.168.188.12
192.168.188.13
192.168.188.12
192.168.188.12
192.168.188.13
192.168.188.12
更多推荐
所有评论(0)