#############################################################
Nginx
优点:
1、Web服务器功能广泛
2、7层 location可以设置负载 的http负载均衡
3、性能强大,网络依赖小。
4、安装配置简单

缺点:
1、无法基于url的健康检查
2、负载均衡算法少只有轮训和ip_hash
3、不能动态管理
4、没有集群upstream的状态界面

haproxy
优点:
1、专门做反向代理
2、负载均衡算法>=8种
3、支持动态管理 通过和haproxy的sock进行通信进行管理
4、性能>=Nginx
5、有状态的界面
6、有强大的7层功能

#############################################################
修改rsyslog的配置文件记录日志,去掉以下的#
vim /etc/rsyslog.conf
$ModLoad imudp
$UDPServerRun 514

.# Save boot messages also to boot.log
local7. /var/log/boot.log
local2.
/var/log/haproxy.log

重启
systemctl restart rsyslog

#############################################################
安装
yum install haproxy

查看配置文件
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 http_front #前端网页配置
mode http #默认mode是http
bind *:80
stats uri /haproxy?stats
default_backend http_back

backend http_back
balance roundrobin #默认算法轮询,也可以是source相当于nginx的ip_hash,cookie
option httpchk GET /index.html #默认检查端口,基于url的健康检查,ngingx不支持
option forwardfor header X-REAL-IP #客户端真实ip,后端程序通过X-REAL-IP获取
server linux-node1 192.168.56.100:8080 check inter 2s rise 3 fall 4 weight 2 #inter 2s 两秒检查 rise 3 3次ok才正常4次ng才失败
server linux-node2 192.168.56.20:80 check inter 2s rise 3 fall 4 weight 1

启动haproxy
systemctl start haproxy

查看dashbord
http://192.168.56.100/haproxy?stats

查看日志
more /var/log/haproxy.log
Jan 10 22:12:33 localhost haproxy[92684]: Proxy http_front started.
Jan 10 22:12:33 localhost haproxy[92684]: Proxy http_back started.

配置文件vim /etc/haproxy/haproxy.conf
根据不同域名的代理
frontend http_front
bind *:80
stats uri /haproxy?stats
default_backend http_back
acl domian_panduan hdr_end(host) docker1.lmk.com
use_backend http_back1 if domian_panduan

backend http_back
balance roundrobin
server linux-node1 192.168.56.100:8080 check

backend http_back1
balance roundrobin
server linux-node2 192.168.56.20:80 check

根据不同后缀的代理
frontend http_front
bind :80
stats uri /haproxy?stats
default_backend http_back
acl url_panduan url_reg /
.(css|jpg|png|js|jpeg|gif)$
use_backend http_back1 if url_panduan

backend http_back
balance roundrobin
server linux-node1 192.168.56.100:8080 check

backend http_back1
balance roundrobin
server linux-node2 192.168.56.20:80 check

根据不同url的代理
frontend http_front
bind *:80
stats uri /haproxy?stats
default_backend http_back
acl url_panduan url_reg /xxx.do
use_backend http_back1 if url_panduan

backend http_back
balance roundrobin
server linux-node1 192.168.56.100:8080 check

backend http_back1
balance roundrobin
server linux-node2 192.168.56.20:80 check

根据不同ua的代理
frontend http_front
bind *:80
stats uri /haproxy?stats
default_backend http_back
acl ua_panduan hdr_reg(User-Agent) -i android
use_backend http_back1 if url_panduan

backend http_back
balance roundrobin
server linux-node1 192.168.56.100:8080 check

backend http_back1
balance roundrobin
server linux-node2 192.168.56.20:80 check

#############################################################
动态管理
yum install socat
vim /etc/haproxy/haproxy.conf 配置权限
stats socket /var/lib/haproxy/stats mode 600 level admin
stats timeout 2m

查看帮助
echo "help" | socat stdio /var/lib/haproxy/stats
查看信息
echo "show info" | socat stdio /var/lib/haproxy/stats
关闭主机
echo "disable server http_back/linux-node1" | socat stdio /var/lib/haproxy/stats
开启主机配置nginx可以动态管理主机
echo "enable server http_back/linux-node1" | socat stdio /var/lib/haproxy/stats