haproxy2.8.10安装

网上查了很多关于haproxy热加载(reload)的文章,大体都有问题,在此记录下,我的安装配置记录。

采用tar包编译安装,下载haproxy2.8.10(tls:长期支持稳定版本)

下载地址:

 
摘自官方

规划:

Tar包安装,编译支持SSL证书

Tar包目录: /opt/

安装目录: /usr/local/haproxy/

配置文件目录: /etc/haproxy/haproxy.cfg

启停方式: systemctl start|stop|restart|status haproxy

Keepalived 安装在两台服务器上做主备(忽略。)

 

1. 首先安装依赖

yum install gcc gcc-c++ openssl openssl-devel systemd-devel pcre-devel zlib-devel  -y

2. 解压,编译

tar xf haproxy-2.8.10.tar.gz
cd haproxy-2.8.10
# 开启支持SSL(centos6, TARGET=linux2628, centos7,TARGET=linux310,当然7也可以指定为linux2628)
make TARGET=linux310 PREFIX=/usr/local/haproxy USE_OPENSSL=1 USE_SYSTEMD=1 USE_PCRE=1 USE_ZLIB=1 USE_CRYPT_H=1 USE_LIBCRYPT=1 USE_CPU_AFFINITY=1 USE_THREAD=1
# 安装位置一定要带上,其他编译属性可以不带
make install PREFIX=/usr/local/haproxy
# 对于升级过的openssl,指定下两个目录(我的是这俩目录),没升级过,可以忽略
make TARGET=linux310 PREFIX=/usr/local/haproxy USE_OPENSSL=1 USE_SYSTEMD=1 USE_PCRE=1 USE_ZLIB=1 USE_CRYPT_H=1 USE_LIBCRYPT=1 USE_CPU_AFFINITY=1 USE_THREAD=1 
SSL_INC=/usr/local/ssl/include  SSL_LIB=/usr/local/ssl/lib

3. #完成安装,验证编译属性

  /usr/local/haproxy/sbin/haproxy  -vv
  3.1 #动态链接库文件,
  查看执行程序依赖的so动态链接库文件
  ldd  /usr/local/haproxy/sbin/haproxy | grep ssl

    验证没有问题

 4. # 软链:ln -s target symbol, 注意这个位置最好选择在(/usr/local/bin目录下),/usr/local/bin{sbin}, 对于链接在/usr/{bin|sbin}/目录下的,也可以,主要考虑/usr/local目录不会随系统升级而影响

ln -s /usr/local/haproxy/sbin/haproxy  /usr/local/bin/haproxy

5. # 服务管理脚本(haproxy.service)

 

有的文章说,热加载,要配合stats 什么sock,其实不需要,直接把这个haproxy.service配置好就可以

 

题外话:service默认位置

  centos:  /usr/lib/systemd/system/

       ubuntu:  /etc/systemd/system/

在该/usr/lib/systemd/system目录下,创建haproxy.service服务,主要是复制源解压包目录下的 /opt/haproxy-2.8.10/admin/systemd/haproxy.service.in文件到system目录下,修改下相关配置为自己的目录

cp /opt/haproxy-2.8.10/admin/systemd/haproxy.service.in  /usr/lib/systemd/system/haproxy.service

#编辑haproxy.service文件

   vi /usr/lib/systemd/system/haproxy.service

[Unit]
Description=HAProxy Load Balancer
After=network-online.target
Wants=network-online.target

[Service]
EnvironmentFile=-/etc/default/haproxy
EnvironmentFile=-/etc/sysconfig/haproxy
Environment="CONFIG=/etc/haproxy/haproxy.cfg" "PIDFILE=/var/run/haproxy.pid" "EXTRAOPTS=-S /etc/haproxy/haproxy-master.sock"
ExecStart=/usr/local/bin/haproxy -Ws -f $CONFIG -p $PIDFILE $EXTRAOPTS
ExecReload=/usr/local/bin/haproxy -Ws -f $CONFIG -c -q $EXTRAOPTS
ExecReload=/bin/kill -USR2 $MAINPID
KillMode=mixed
Restart=always
SuccessExitStatus=143
Type=notify

[Install]
WantedBy=multi-user.target

注意几个配置意思:

1. SuccessExitStatus=143是为了告诉Systemd,如果服务在接收到停止信号后以状态码143退出,这应该被视为服务成功地完成了它的清理工作并终止,而不是一个错误或异常情况
2. 源service.in有个参数@SBINDIR@,这个一般是自定义的,我这里直接写的我的haproxy的执行目录
3. -Ws 开启master-worker模式,并启用了systemd通知支持
4. $EXTRAOPTS: 这个变量用于传递额外的启动选项。它可以为空,也可以包含一系列用空格分隔的选项,这些选项可以根据需要动态设置,例如,从环境变量中读取或在服务配置文件中定义。
5. -p $PIDFILE: 这个选项指定了PID文件的路径,HAProxy将在该文件中记录其主进程的PID。$PIDFILE 变量应当在服务配置文件中定义,例如 /var/run/haproxy.pid
6. -f $CONFIG: 这个选项告诉HAProxy使用哪个配置文件。$CONFIG 是一个变量,它在服务配置文件中应当被定义为实际的配置文件路径,例如 /etc/haproxy/haproxy.cfg
7. 注意EnvironmentFile=- 这个 - 符号,是错误抑制的意思,就是算后面的文件找不到,也不会报错的意思。
8. $MAINPID 是一个由 systemd 提供的环境变量,应该指向服务的主进程ID,没有单独定义这个,直接在这里这么就可以
9. Type=notify 在 Systemd 中,Type=notify 是其中一个选项,它表示服务会在启动完成后通过 Unix 域套接字向 Systemd 发送通知,表明服务已经准备好或处于某个特定状态
10. journalctl -u haproxy.service 可以查看[xxx].server服务启动日志,eg: journalctl -u httpd.service  , -u代表unit

 

6. # 创建配置文件目录

  mkdir  /etc/haproxy/

7. # 配置haproxy.cfg

  常规按自己要求配置即可。

8. 日志配置(默认不带日志记录)

  1. 先检测rsyslog是否安装

    [root@localhost ~]# rpm -q rsyslog

    rsyslog-7.4.7-12.el7.x86_64

  2.然后在/etc/rsyslog.d/下创建haproxy.conf(/etc/rsyslog.conf)内容如下: 

 $ModLOad imudp
 $UDPServerRun 514
 local3.* /var/log/haproxy/logs/haproxy.log

说明下:

      imup是模块名,支持UDP协议

      第二行准许514端口接收使用UDP和TCP协议转发过来的日志,rsyslog默认514端口监听UDP,也可以将上面的内容写入/etc/rsyslog文件中

  3.然后修改下/etc/sysconfig/rsyslog文件,修改为:

     SYSLOGD_OPTIONS='-c 2 -r -m 0' 

       4. 重启即可

            systemctl restart rsyslog

 

9. 相关启停

systemctl enable haproxy.service
systemctl start haproxy.service
systemctl status haproxy.service
systemctl reload haproxy.service

10. 卸载重新编译

如果make编译安装的,需要重新安装步骤:
(1) 卸载已有的haproxy,清理所有的二进制文件
rm -f /usr/local/haproxy/
rm -f /usr/local/bin/haproxy
确保删除所有与haproxy相关的二进制文件和手册页
(2)清理编译目录
进入 HAProxy 的源代码目录,执行 make clean 来清除之前的编译产物:
cd /opt/haproxy/
make clean
重新编译haproxy
make.....
make install...

11. 注意下haproxy2.8版本几个特别的地方:

1. nbproc (这个要去掉)-去除了多进程支持
2. 编译时,USE_THREAD,配置提高性能,采用多线程 nbthread 32
3. Tls 改变,2.8版本默认支持tls1.2 
4. Haproxy2.8版本对于tls更严格,如果只是配置了ssl 443,没有配置证书,将无法访问,证书过期仍然可以访问,只是提示不安全(不算版本特性)
5. # stats admin if TRUE  #监控页,这个建议要注释掉,不能编辑状态

配置完tls套件,可以通过下面这个命令来检测,套件的支持:
  nmap -sV -p 443 --script ssl-enum-ciphers www.xxx.com(ip也行)(这个换成你自己的IP地址或域名)

Tls配置参考:(我们可以选择old,支持的tls兼容性更多点)
https://ssl-config.mozilla.org/#server=haproxy&version=2.8&config=old&openssl=1.0.2k&guideline=5.7

 

    

 

posted @ 2024-07-17 17:24  Macoffee  阅读(152)  评论(0编辑  收藏  举报