1 ) haproxy-1.8.20 :
# 1.1 ) 安装Haproxy的依赖关系:
yum install gcc gcc-c++ glibc glibc-devel pcre pcre-devel openssl openssl-devel systemd-devel net-tools vim iotop bc zip unzip zlib-devel lrzsz tree screen lsof tcpdump wget ntpdate systemd-devel -y
# 1.2 ) 安装Haproxy-1.8.20 (注意编译参数) :
tar xvf haproxy-1.8.20.tar.gz && cd haproxy-1.8.20
make ARCH=x86_64 TARGET=linux2628 USE_PCRE=1 USE_OPENSSL=1 USE_ZLIB=1 USE_SYSTEMD=1 USE_CPU_AFFINITY=1 PREFIX=/data/soft/haproxy
# USE_CPU_AFFINITY=1 为开启haproxy进程与CPU核心绑定,
# USE_SYSTEMD=1 为支持使用 -Ws参数(systemd-aware master-worker 模式)启动Haproxy,从而实现单主进程多子进程运行模式。
make install PREFIX=/data/soft/haproxy
cp haproxy /usr/sbin/
# 1.3 ) 添加用户配置目录创建:
mkdir /etc/haproxy
useradd haproxy -s /sbin/nologin
mkdir /var/lib/haproxy
chown haproxy.haproxy /var/lib/haproxy/ -R
systemctl restart haproxy
# 1.4 ) 启动文件:
vim /usr/lib/systemd/system/haproxy.service
[Unit]
Description=HAProxyLoad Balancer
After=syslog.targetnetwork.target
[Service]
ExecStartPre=/usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -c -q
ExecStart=/usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg
ExecReload=/bin/kill -USR2 $MAINPID
[Install]
WantedBy=multi-user.target
# 1.5 ) 开机启动:
systemctl enable haproxy
systemctl restart haproxy
# 1.6 ) 配置路径:
程序环境:
主程序: /usr/sbin/haproxy
配置文件: /etc/haproxy/haproxy.cfg
Unit file: /usr/lib/systemd/system/haproxy.service
2 ) haproxy 配置:
global
maxconn 100000
chroot /data/soft/haproxy
stats socket /var/lib/haproxy/haproxy.sock mode 600 level admin
uid 1000
gid 1000
daemon
nbproc 2
cpu-map 1 0
cpu-map 2 1
pidfile /usr/local/haproxy/run/haproxy.pid
log 127.0.0.1 local3 info
defaults
option http-keep-alive
option forwardfor # ip地址透传 针对http 协议有效
maxconn 100000
mode http
timeout connect 300000ms
timeout client 300000ms
timeout server 300000ms
##=======网站80入口=======================
listen server_hosts_group
bind 10.10.50.119:80
mode http
server server1 10.10.29.207:80 weight 1 check inter 3s fall 2 rise 5
server server2 10.10.4.209:80 weight 1 check inter 3s fall 2 rise 5
#=======网站443入口=======================
listen server_ssl_group
bind 10.10.50.119:443
mode tcp
server server1 10.10.29.207:443 weight 1 check inter 3s fall 2 rise 5
server server2 10.10.4.209:443 weight 1 check inter 3s fall 2 rise 5
listen stats
mode http
bind 0.0.0.0:9800
stats enable
log global
bind-process 2
stats hide-version
stats uri /sta
stats auth admin:q135235
3 ) 使用 Haproxy 的epool模型方式1.8.x 新加入方式:
# 3.1 ) 一个主进程,衍生出许多子进程,子进程的父PID就是主进程的PID. 启动的时候要用 -Ws 参数.
[root@promi examples]# ps -ef | grep haproxy
root 30869 1 0 18:52 ? 00:00:00 /usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg
nobody 30871 30869 0 18:52 ? 00:00:00 /usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg
nobody 30872 30869 0 18:52 ? 00:00:00 /usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg
nobody 30873 30869 0 18:52 ? 00:00:00 /usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg
nobody 30874 30869 0 18:52 ? 00:00:00 /usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg
root 30878 29216 0 18:54 pts/0 00:00:00 grep --color=auto haproxy
4 ) 各种配置:
haproxy 主机组两种配置方法(listen,frontend):
proxies:代理配置段
defaults:为frontend, backend, listen提供默认配置
frontend:前端,相当于nginx中的server {}
backend:后端,相当于nginx中的upstream {}
listen:同时拥有前端和后端配置
defaults [<name>] #默认配置项,针对以下的frontend、backend和lsiten生效,可以多个name
•frontend <name> #前端servername,类似于Nginx的一个虚拟主机server。
•backend <name> #后端服务器组,等于nginx的upstream
•listen <name> #将frontend和backend合并在一起配置
•注:name字段只能使用”-”、”_”、”.”、和”:”,并且严格区分大小写,例如:Web和web是完全不同的两组服务器。
# 第一种 Listen:
#=======网站status入口=======================
listen stats
mode http
bind 0.0.0.0:9800
stats enable
log global
stats hide-version # 隐藏版本号
stats uri /sta
stats auth admin:q312312
##=======网站80入口=======================
listen server_hosts_group
bind 10.10.50.119:80
mode http
server server1 10.10.29.207:80 weight 1 check inter 3s fall 2 rise 5
server server2 10.10.4.209:80 weight 1 check inter 3s fall 2 rise 5
#=======网站443入口=======================
listen server_ssl_group
bind 10.10.50.119:443
mode tcp
server server1 10.10.29.207:443 weight 1 check inter 3s fall 2 rise 5
server server2 10.10.4.209:443 weight 1 check inter 3s fall 2 rise 5
# 第二种frontend :
#=======网站80入口=======================
frontend web_prot_80
bind 0.0.0.0:80
mode http
use_backend web_port_http_nodes
backend web_port_http_nodes
mode http
server server1 10.10.29.207:80 weight 1 check port 80 inter 3s fall 2 rise 5
server server2 10.10.4.209:80 weight 1 check port 80 inter 3s fall 2 rise 5
#=======网站443入口=======================
frontend web_prot_443
bind 0.0.0.0:443
mode tcp
use_backend web_port_https_nodes
backend web_port_https_nodes
mode tcp
server server1 10.10.29.207:80 weight 1 check port 80 inter 3s fall 2 rise 5
server server2 10.10.4.209:80 weight 1 check port 80 inter 3s fall 2 rise 5
# 4.2 ) 后端服务器检测参数类型:
check #对指定real进行健康状态检查,默认不开启
addr IP#可指定的健康状态监测IP
port num#指定的健康状态监测端口
inter num#健康状态检查间隔时间,默认2000 ms
fall num#后端服务器失效检查次数,默认为3
rise num#后端服务器从下线恢复检查次数,默认为2
weight #默认为1,最大值为256,0表示不参与负载均衡
backup #将后端服务器标记为备份状态
disabled #将后端服务器标记为不可用状态
redirect prefix http://www.188faka.com/#将请求临时重定向至其它URL,只适用于http模式
mbacklog axconn <maxconn>:当前后端server的最大并发连接数
<backlog>:当server的连接数达到上限后的后援队列长度
排错:
问题:
-DBUILD_OPTIONS='"USE_ZLIB=1 USE_CPU_AFFINITY=1 USE_OPENSSL=1 USE_SYSTEMD=1 USE_PCRE=1"' \
-c -o src/haproxy.o src/haproxy.c
src/haproxy.c:66:31: fatal error: systemd/sd-daemon.h: No such file or directory
#include <systemd/sd-daemon.h>
^
compilation terminated.
make: *** [src/haproxy.o] Error 1
解决:
yum install -y systemd-devel