源代码编译安装haproxy

2,257 阅读3分钟

可以去 mirrors.huaweicloud.com/home 查找相应的国内源 也可以使用其他源

1 下载haproxy

wget https://mirrors.huaweicloud.com/haproxy/2.4/src/haproxy-2.4.2.tar.gz

2 下载lua

 wget https://www.lua.org/ftp/lua-5.4.3.tar.gz

3 安装依赖库

yum -y 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 libevent-devel.x86_64  ncurses-devel.x86_64  readline-devel.x86_64    libtermcap-devel ntpdate

注意如果是centos 8 ntpdata被chrony替换了

4 安装lua

tar -xvf lua-5.4.3.tar.gz

cd lua-5.4.3/
make linux test
make install
lua -v #确认lua版本号

5 安装haproxy

tar -xvf haproxy-2.4.2.tar.gz
mkdir /usr/local/haproxy
cd haproxy-2.4.2/
make ARCH=x86_64 TARGET=linux-glibc  USE_PCRE=1  USE_OPENSSL=1  USE_ZLIB=1  USE_SYSTEMD=1  USE_CPU_AFFINITY=1  USE_LUA=1  LUA_INC=/root/lua-5.4.3/src/  LUA_LIB=/root/lua-5.4.3/src/ PREFIX=/usr/local/haproxy LUA_LIB_NAME=lua
make install PREFIX=/usr/local/haproxy
ln -sv /usr/local/haproxy/sbin/haproxy /usr/sbin/
haproxy -v # 确认haproxy的版本号
mkdir -p /var/lib/haproxy  #用于存储 haproxy.pid文件

6 haproxy配置文件

cat /etc/haproxy/haproxy.cfg

文件内容

global
    #日志文件的输出定向
    log  127.0.0.1  local3 info
    #运行目录
    chroot      /usr/local/haproxy
    #将所有进程写入pid文件
    pidfile     /var/lib/haproxy/haproxy.pid
    #最大连接
    maxconn    4000
    #用户名
    user        haproxy
    #用户组
    group       haproxy
    #以后台形式运行haproxy
    daemon
    #开启多进程工作模式,默认单进程多线程方式 2.5版本将移除不建议使用
    #nbproc 2  
    
    # turn on stats unix socket
    stats socket /var/lib/haproxy/haproxy.sock
defaults
    #工作模式,所处理的类别,默认采用http模式,可配置成tcp作4层消息转发
    mode    http
    log                     global
    #日志类别,记载http日志
    option                  httplog
    #不记录健康检查日志信息
    option                  dontlognull
    #每次请求完毕后主动关闭http通道,ha-proxy不支持keep-alive,只能模拟这种模式的实现
    option http-server-close
    #如果后端服务器需要获得客户端真实ip需要配置的参数,可以从Http Header中获得客户端ip
    #option forwardfor       except 127.0.0.0/8
    #是否允许重新分配在session 失败后
    option                  redispatch
    #3次连接失败就认为服务器不可用,主要通过后面的check检查
    retries    3
    #当服务器负载很高的时候,自动结束掉当前队列处理比较久的连接
    option abortonclose
    #默认http请求超时时间
    timeout http-request    10s
    #默认队列超时时间
    timeout queue    1m
    #连接超时时间
    timeout connect    10s
    #客户端连接超时时间
    timeout client    5m
    #服务器端连接超时时间
    timeout server    5m
    #默认持久连接超时时间
    timeout http-keep-alive    10s
    #设置心跳检查超时时间
    timeout check    10s
    #最大连接数
    maxconn                 3000
    #健康检测#注意实际工作中测试时,应该下载某一个页面来进行测试,因此这个页面应该是个小页面,而不要用首页面。这里是每隔一秒检查一次页面。
    #option  httpchk GET /index.html

listen admin_stats
  #开关
  mode http
  bind 0.0.0.0:10086
  stats enable
  stats uri /haproxy-stats
  stats realm HAProxy\ Statistics
  #认证账号密码
  stats auth admin:admin123
  #启用管理功能
  stats admin if TRUE
  #统计页面自动刷新时间
  stats refresh 30s
  #管理界面,如果认证成功了,可通过webui管理节点
  stats   admin if TRUE
  
#http-request set-header X-Forwarded-For req.hdr(X-Forwarded-For)
    
frontend myweb 
    bind 0.0.0.0:80
    mode http
    log global
    option httplog
    option httpclose
    default_backend myweb
    

backend myweb
    balance leastconn
    server web3 10.0.2.3:80 check  
    server web4 10.0.2.4:80 check  
    server web6 10.0.2.6:80 check  
    server web8 10.0.2.8:80 check  
    server web10 10.0.2.10:80 check  
    server web11 10.0.2.11:80 check  
    server web7 10.0.2.7:80 check  

7 安装 rsyslog

yum install rsyslog -y

配置haproxy的日志通道

cd /etc/rsyslog.d/
vi haproxy.conf

文件内容

$ModLoad imudp
$UDPServerRun 514
local3.*     /var/log/haproxy.log

重启rsyslog

systemctl restart rsyslog

8 创建systemd启动服务 [弃用]

vi /etc/systemd/system/haproxy.service

文件内容

 [Unit]
 Description=HAProxy Load Balancer
 After=syslog.target network.target
 
 [Service]
 ExecStartPre=/usr/local/haproxy/sbin/haproxy -f /etc/haproxy/haproxy.cfg
 ExecStart=/usr/local/haproxy/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /var/lib/haproxy/haproxy.pid
 ExecReload=/bin/kill -USR2 $MAINPID
 
 [Install]
 WantedBy=multi-user.target

9 启动服务 [弃用]

 systemctl  deamon-reload
 systemctl start  haproxy

8 安装 supervisor

采用简便方式 直接安装宝塔面板 在应用功能商店搜索 supervisor 建议通过链接注册 可以获取礼包

9 设置任务

在supervisor的管理界面新增守护进程。注意 在我安装中发现必须使用root进程启动 然后才能创建haproxy用户的进程。 【猜测】上面的 systemd 重启机器后无法自动开始 也很有可能是这个原因,本着能够通过其他方式处理,就不深究的原则。

image.png

image.png

image.png