q456123 发表于 2019-1-2 08:06:56

haproxy 1.8.X版本编译安装教程

1.7和1.8版本的haproxy 略有不同,从1.8.3版本开始,haproxy支持单主进程多子进程模式,类似于的Nginx的单master process进程多worker process结构,haproxy 1.8.3之前的版本是多个主进程,haproxy 1.8.3安装的时候需要安装systemd-devel提供底层编译支持,否则编译安装haproxy 的时候会报错,并且使用Ws参数启动haproxy主进程,之前的版本没有此参数,具体过程参考如下:

1.1:下载并编译安装haproxy-1.8.3:
# cd /usr/local/src/#安装基础依赖包,必须安装system-devel,如果不安装会报错
# yum install gcc gcc-c++ glibc glibc-devel pcre pcre-devel opensslopenssl-devel systemd-devel net-tools vim iotop bczip unzip zlib-devel lrzsz tree screen lsof tcpdump wget ntpdate
# tar xvf haproxy-1.8.3.tar.gz
# cd haproxy-1.8.3/#USE_CPU_AFFINITY=1 为开启haproxy进程与CPU核心绑定,USE_SYSTEMD=1为支持使用 -Ws参数(systemd-aware master-worker 模式)启动Haproxy,从而实现单主进程多子进程运行模式。
# makeARCH=x86_64 TARGET=linux2628 USE_PCRE=1 USE_OPENSSL=1 USE_ZLIB=1 USE_SYSTEMD=1USE_CPU_AFFINITY=1PREFIX=/usr/local/haproxy
# make install PREFIX=/usr/local/haproxy
# cp haproxy/usr/sbin/1.2:准备启动脚本文件:
# vim /usr/lib/systemd/system/haproxy.service

Description=HAProxy Load BalancerAfter=syslog.target network.target

#支持多配置文件读取,类似于从侧面是实现配置文件的include功能。
ExecStartPre=/usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -f /etc/haproxy/conf -c -q
ExecStart=/usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -f /etc/haproxy/conf -p /run/haproxy.pid
ExecReload=/bin/kill -USR2 $MAINPID
WantedBy=multi-user.target1.3:验证haproxy版本:
# haproxy -v
HA-Proxy version 1.8.3-205f675 2017/12/30
Copyright 2000-2017 Willy Tarreau 1.4:定义简单haproxy配置文件:
# mkdir/etc/haproxy
# mkdir/etc/haprox/conf
# cat/etc/haproxy/haproxy.cfg
global
maxconn 100000
chroot /usr/local/haproxy
#stats socket /var/lib/haproxy/haproxy.sock
mode 600 level admin
uid 99
gid 99
daemon
nbproc 4
cpu-map 1 0
cpu-map 2 1
cpu-map 3 2
cpu-map 4 3
pidfile /usr/local/haproxy/run/haproxy.pid
log 127.0.0.1 local3 info
defaults
option http-keep-alive
optionforwardfor
maxconn 100000mode http
timeout connect 300000ms
timeout client300000ms
timeout server300000ms
listen stats
mode http
bind 0.0.0.0:9999 stats enable
log global
stats uri   /haproxy-status
stats auth    admin:admin   #状态页登录用户名:密码 # cat/etc/haproxy/conf/tomcat-web.cfg#注意此处配置文件必须以.cfg结尾
listenweb_port
bind 0.0.0.0:80 mode http
log global
server web1127.0.0.1:8080check inter 3000 fall 2 rise 5  
1.5:启动验证haproxy状态:
1.5.1:以下是1.8.3版本的单主进程多子进程模式:
# systemctl daemon-reload
# systemctlrestart haproxy
# cat /run/haproxy.pid 41998
# ps -ef | grep haproxy
root      41998      10 16:27 ?      00:00:00 /usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid
nobody    41999419980 16:27 ?      00:00:00 /usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid
nobody    42000419980 16:27 ?      00:00:00 /usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid
nobody    42001419980 16:27 ?      00:00:00 /usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid
nobody    42002419980 16:27 ?      00:00:00 /usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid
root      42186105800 16:28 pts/14   00:00:00 grep --color=auto haproxy1.5.2:以下是1.7版本的传统多进程的haproxy模式:
# ps -ef | grep haproxy
root   118786      10 17:10 ?      00:00:00 /usr/sbin/haproxy-systemd-wrapper -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid
root   118787 1187860 17:10 ?      00:00:00
nobody   118788      16 17:10 ?      00:00:00 /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid -Ds
nobody   118789      16 17:10 ?      00:00:00 /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid -Ds
nobody   118790      13 17:10 ?      00:00:00 /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid -Ds
nobody   118791      15 17:10 ?      00:00:00 /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid -Ds
root   118814996360 17:10 pts/0    00:00:00 grep --color=auto haproxy1.5.3:以下是Nginx的单主进程多子进程模式,此模式和1.8.3版本的haproxy工作模式是类似的:
# ps -ef | grep nginx
root   13399   10 Jan06 ?      00:00:01 nginx: master process /apps/tengine/sbin/nginx -s start
devops   22165 221220 16:20 pts/0    00:00:00 grep --color=auto nginx
zceo   22915 133990 Jan13 ?      00:41:41 nginx: worker process
zceo   22916 133990 Jan13 ?      00:41:59 nginx: worker process
zceo   22917 133990 Jan13 ?      00:41:38 nginx: worker process
zceo   22918 133990 Jan13 ?      00:41:32 nginx: worker process
zceo   22919 133990 Jan13 ?      00:41:22 nginx: worker process
zceo   22920 133990 Jan13 ?      00:41:40 nginx: worker process
zceo   22921 133990 Jan13 ?      00:42:07 nginx: worker process
zceo   22922 133990 Jan13 ?      00:41:40 nginx: worker process1.5.4:以下是apache的单主进程多子进程模式,也和1.8.3版本的haproxy工作模式类似:
# ps -ef | grep apache
root      6758   10 11:01 ?      00:00:00 /usr/local/apache2.2.17/bin/httpd -k start
webshop   676067580 11:01 ?      00:00:00 /usr/local/apache2.2.17/bin/httpd -k start
webshop   676167580 11:01 ?      00:00:02 /usr/local/apache2.2.17/bin/httpd -k start
webshop   676267580 11:01 ?      00:00:03 /usr/local/apache2.2.17/bin/httpd -k start
webshop   676467580 11:01 ?      00:00:03 /usr/local/apache2.2.17/bin/httpd -k start
webshop   677067580 11:01 ?      00:00:03 /usr/local/apache2.2.17/bin/httpd -k start
webshop   677167580 11:01 ?      00:00:03 /usr/local/apache2.2.17/bin/httpd -k start
webshop   678067580 11:01 ?      00:00:02 /usr/local/apache2.2.17/bin/httpd -k start
root      807680380 11:50 pts/2    00:00:00 grep apache
注意:Haproxy结合keepalived做高可用时,keepalived的主从节点监听同一VIP地址,会导致从节点的Haproxy启动失败
解决方法:
    修改内核参数:
      echo "net.ipv4.ip_nonlocal_bind = 1" >> /etc/sysctl.conf
      sysctl -p


页: [1]
查看完整版本: haproxy 1.8.X版本编译安装教程