反向代理负载均衡系列之Haproxy
Posted 王佐的运维笔记
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了反向代理负载均衡系列之Haproxy相关的知识,希望对你有一定的参考价值。
目录:
1.反向代理概述
2.Node节点部署
3.反向代理部署
3.1Haproxy动态维护
3.2Haproxy生产使用建议
3.3Haproxy与nginx
1.反向代理概述
反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。
环境准备:
web-node2.com
主机名 |
IP地址 |
角色 |
系统 |
web-node1.com |
172.16.8.100 | web-node1节点 | Centos 7.6 |
web-node2.com |
172.16.8.101 | web-node2节点 | Centos 7.6 |
lb-node1.com | 172.16.8.102 | Nginx反向代理 |
Centos 7.6 |
2.Node节点部署
在两台web-node节点中均使用Yum安装一个Apache用于做真实机,监听9090端口
web-node1.com部署
[ ]
warning: /var/tmp/rpm-tmp.BgjDaw: Header V3 RSA/SHA256 Signature, key ID 352c64e5: NOKEY
Preparing...
Updating / installing...
1:epel-release-7-12 warning: /etc/yum.repos.d/epel.repo created as /etc/yum.repos.d/epel.repo.rpmnew
[ ]
[ ]
[ ]
[ ]
[ ]
[ ]
web-node1.com
web-node2.com部署
[ ]
http://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpm
[ ]
[ ]
[ ]
[ ]
[ ]
[ ]
web-node2.com
3.反向代理部署
1.Haproxy 源码编译安装,并监听80端口
[root@lb-node1 ~]# cd /usr/local/src/
[root@lb-node1 src]# wget http://www.haproxy.org/download/1.6/src/haproxy-1.6.9.tar.gz
[root@lb-node1 src]# tar xf haproxy-1.6.9.tar.gz
[root@lb-node1 src]# cd haproxy-1.6.9
[root@lb-node1 haproxy-1.6.9]# make TARGET=linux2628 PREFIX=/usr/local/haproxy-1.6.9
[root@lb-node1 haproxy-1.6.9]# make install
[root@lb-node1 ~]# cp /usr/local/sbin/haproxy /usr/sbin/
[root@lb-node1 ~]# haproxy -v
HA-Proxy version 1.6.9 2016/08/30
Copyright 2000-2016 Willy Tarreau <willy@haproxy.org>
## Haproxy启动脚本
[root@lb-node1 ~]# cp /usr/local/src/haproxy-1.6.9/examples/haproxy.init /etc/init.d/haproxy
[root@lb-node1 ~]# chmod 755 /etc/init.d/haproxy
## Haproxy配置文件
[root@lb-node1 ~]# useradd -r haproxy
[root@lb-node1 ~]# mkdir /etc/haproxy
[root@lb-node1 ~]# mkdir /var/lib/haproxy
[root@lb-node1 ~]# mkdir /var/run/haproxy
2.编辑Haproxy配置文件,并启动
~]# cat /etc/haproxy/haproxy.cfg
global
log 127.0.0.1 local3 info
chroot /var/lib/haproxy
user haproxy
group haproxy
daemon
defaults
log global
mode http
option httplog
option dontlognull
timeout connect 5000
timeout client 50000
timeout server 50000
frontend ha_laujian_com
mode http
bind *:80
stats uri /haproxy?stats
default_backend ha_laujian_com_backend
##acl配置
acl proxy_laujian_com hdr_end(host) proxy.laujian.com
use_backend proxy_laujian_com_backend if proxy_laujian_com
backend ha_laujian_com_backend
#source cookie SERVERID
option forwardfor header X-REAL-IP
option httpchk GET /index.html
balance roundrobin
server web-node1 172.16.8.100:9090 check inter 2000 rise 3 fall 3 weight 1
9090 check inter 2000 rise 3 fall 3 weight 1 :
backend proxy_laujian_com_backend
option forwardfor header X-REAL-IP
option httpchk GET /index.html
balance roundrobin
9090 check inter 2000 rise 3 fall 3 weight 1 :
##配置Haproxy日志
~]# sed -i 's@\#\$ModLoad imudp@\$ModLoad imudp@g' /etc/rsyslog.conf
~]# sed -i 's@\#\$UDPServerRun 514@\$UDPServerRun 514@g' /etc/rsyslog.conf
~]# echo "local3.* /var/log/haproxy.log" >> /etc/rsyslog.conf
##启动Haproxy服务
~]# /etc/init.d/haproxy start
3.测试Haproxy
[ ]
web-node2.com
[ ]
web-node1.com
[ ]
web-node2.com
[ ]
web-node1.com
proxy.laujian.com调度至web-node2(解析hosts) 更多acl配置
[root@lb-node1 ~]# curl proxy.laujian.com
web-node2.com
[root@lb-node1 ~]# curl proxy.laujian.com
web-node2.com
4.Haproxy状态管理页面
访问:http://172.16.8.102/haproxy?stats
3.1Haproxy动态维护
1.在global下添加socket文件
stats socket /var/lib/haproxy/haproxy.sock mode 600 level admin
stats timeout 2m
2.安装socat
[ ]
[ ]
3.查看info状态信息,可以通过zabbix来监控相关状态值
[root@lb-node1 ~]# echo "show info" |socat stdio /var/lib/haproxy/haproxy.sock
Name: HAProxy
Version: 1.6.9
Release_date: 2016/08/30
Nbproc: 1
Process_num: 1
Pid: 6108
Uptime: 0d 0h01m24s
Uptime_sec: 84
Memmax_MB: 0
Ulimit-n: 4034
Maxsock: 4034
Maxconn: 2000
Hard_maxconn: 2000
CurrConns: 0
CumConns: 2
CumReq: 2
Maxpipes: 0
PipesUsed: 0
PipesFree: 0
ConnRate: 0
ConnRateLimit: 0
MaxConnRate: 0
SessRate: 0
SessRateLimit: 0
MaxSessRate: 0
CompressBpsIn: 0
CompressBpsOut: 0
CompressBpsRateLim: 0
Tasks: 9
Run_queue: 1
Idle_pct: 100
node: lb-node1.com
description:
4.Haproxy维护模式
关闭proxy_laujian_com下web-node2
root"disable server proxy_laujian_com_backend/web-node2" |socat stdio /var/lib/haproxy/haproxy.sock -node1 ~]# echo
Message from syslogd at Oct 19 17:16:56 ...
haproxy[6180]: backend proxy_laujian_com_backend has no server available!
重启启动web-node2(此操作对现有Server生效,不支持新增加节点)
[root"enable server proxy_laujian_com_backend/web-node2" |socat stdio /var/lib/haproxy/haproxy.sock -node1 ~]# echo
3.2Haproxy生产使用建议
haproxy的本地端口会出现用尽情况,解决方案如下4条
1.更改local的端口范围,调整内核参数
[ ]
32768 61000
2.调整timewait的端口复用,设置为1
[ ]
1
3.调整tcp_wait的时间,不建议修改
[ ]
60
4.最佳方案:增加多个ip,端口数量就足够
3.3Haproxy与nginx
nginx
服务 | 优点 | 缺点 |
Nginx |
web服务器,应用广泛,安装配置简单 |
健康检查单一 |
7层负载均衡,并且支持4层负载均衡 | 负载均衡算法少 | |
性能强大,网络依赖小 | 动态管理较弱 | |
location灵活匹配 | 没有集群管理状态页面 |
Haproxy
Haproxy | 优点 | 缺点 |
高性能负载均衡、负载均衡算法比较多 | 1.配置稍有麻烦 | |
强大7层代理,性能优于Nginx | 2.应用没有nginx广泛 | |
与socket通信进行动态管理 | ||
丰富的集群管理状态页面 |
以上是关于反向代理负载均衡系列之Haproxy的主要内容,如果未能解决你的问题,请参考以下文章