Haproxy-1.8.20 编译安装:

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
原文地址:https://www.cnblogs.com/zhenxing06/p/12775659.html