安装依赖软件包

  1. yum install -y 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 openssl openssl-devel systemd-devel

下载源码包

  1. mkdir -p /data/soft
  2. cd /data/soft
  3. wget http://www.haproxy.org/download/2.1/src/haproxy-2.1.3.tar.gz
  4. wget https://www.lua.org/ftp/lua-5.3.5.tar.gz
  5. useradd -g haproxy haproxy -s/sbin/nologin

编译安装lua

  1. tar zxvf lua-5.3.5.tar.gz
  2. yum install -y rakudo-Readline
  3. cd lua-5.3.5
  4. make linux test
  5. make install

HAProxy 1.8及1.9版本编译参数:

  1. shell> make ARCH=x86_64 TARGET=linux2628 USE_PCRE=1 USE_OPENSSL=1 USE_ZLIB=1 USE_SYSTEMD=1
  2. USE_CPU_AFFINITY=1 PREFIX=/usr/local/haproxy

HAProxy 2.0编译参数:

  1. shell> 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=/data/soft/lua-5.3.5/src/ LUA_LIB=/data/soft/lua-5.3.5/src/ PREFIX=/usr/local/haproxy
  2. shell> make install PREFIX=/usr/local/haproxy
  3. shell> cp haproxy /usr/sbin/

  1. #### use config
  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=/data/soft/lua-5.3.5/src/ LUA_LIB=/data/soft/lua-5.3.5/src/
  3. make install
  4. 开启https
  5. USE_OPENSSL=1
  6. 指定为systemd模式
  7. USE_SYSTEMD=1
  8. 可指定安装目录
  9. PREFIX=/usr/local/haproxy
  10. 默认为/usr/local/sbin/

  1. make TARGET=linux26 PREFIX=/usr/local/haproxy //标识64为系统
  2. make install PREFIX=/usr/local/haproxy --安装路径
  3. mkdir /etc/haproxy --创建配置文件目录
  4. useradd -s /sbin/nologin -M haproxy --创建一个不可登录系统,且没有家目录的用户

启动脚本

  1. cat <<EOF >>/usr/lib/systemd/system/haproxy.service
  2. [Unit]
  3. Description=HAProxy Load Balancer
  4. After=syslog.target network.target
  5. [Service]
  6. ExecStartPre=/usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -c -q
  7. ExecStart=/usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /var/lib/haproxy/haproxy.pid
  8. ExecReload=/bin/kill -USR2 $MAINPID
  9. [Install]
  10. WantedBy=multi-user.target
  11. EOF

开启haproxy日志

  1. vim /etc/rsyslog.conf
  2. # Provides UDP syslog reception
  3. $ModLoad imudp
  4. $UDPServerRun 514
  5. local0.* /var/log/haproxy.log
  6. vim /etc/sysconfig/rsyslog
  7. SYSLOGD_OPTIONS="-r -m 0 -c 2"
  8. 修改ha配置文件
  9. vim /etc/haproxy/haproxy.cfg
  10. global
  11. log 127.0.0.1 local0 info

配置文件语法检查命令

  1. mkdir //etc/haproxy/
  2. ln -s /Data/app_1/haproxy/etc/haproxy.cfg //etc/haproxy/haproxy.conf
  3. ln -s /Data/app_1/haproxy/haproxy.pid /var/run/
  4. ln -s /Data/app_1/haproxy/examples/haproxy-init /etc/init.d/haproxy
  5. ln -s /Data/app_1/haproxy/haproxy /usr/local/sbin/
  6. haproxy -c -f /etc/haproxy/haproxy.cfg

haproxy 日志切割

  1. cat /etc/logrotate.d/haproxy
  2. /var/log/haproxy/haproxy.log {
  3. #文件绝对路径,nginx日志亦同上
  4. daily
  5. #指定转储周期为每天
  6. rotate 20
  7. #保留20天的日志
  8. missingok
  9. #如果日志文件丢失,不进行显示错误
  10. notifempty
  11. #当日志文件为空时,不进行转储
  12. dateext
  13. #加上日志格式
  14. compress
  15. #通过gzip压缩转储后的日志
  16. sharedscripts
  17. #转储完成后运行脚本,postrotate-endscript间为脚本内容,脚本效果为重启rsyslogd服务。
  18. postrotate
  19. systemctl restart rsyslog.service
  20. endscript
  21. }

测试日志切割配置文件

  1. logrotate -d /etc/logrotate.d/haproxy

anacron默认配置如下,修改该服务的调用时间
  1. cat /etc/anacrontab
  2. # /etc/anacrontab: configuration file for anacron
  3. # See anacron(8) and anacrontab(5) for details.
  4. SHELL=/bin/sh
  5. PATH=/sbin:/bin:/usr/sbin:/usr/bin
  6. MAILTO=root
  7. # the maximal random delay added to the base delay of the jobs
  8. RANDOM_DELAY=45
  9. # the jobs will be started during the following hours only
  10. #默认为3点到22点随机延迟45分钟执行,修改为3点到5点
  11. START_HOURS_RANGE=3-5
  12. #period in days delay in minutes job-identifier command
  13. 1 5 cron.daily nice run-parts /etc/cron.daily
  14. 7 25 cron.weekly nice run-parts /etc/cron.weekly
  15. @monthly 45 cron.monthly nice run-parts /etc/cron.monthly

Logrotate中其他可配置参数,具体如下:
  1. compress //通过gzip 压缩转储以后的日志
  2. nocompress //不做gzip压缩处理
  3. copytruncate //用于还在打开中的日志文件,把当前日志备份并截断;是先拷贝再清空的方式,拷贝和清空之间有一个时间差,可能会丢失部分日志数据。
  4. nocopytruncate //备份日志文件不过不截断
  5. create mode owner group //轮转时指定创建新文件的属性,如create 0777 nobody nobody
  6. nocreate //不建立新的日志文件
  7. delaycompress //和compress 一起使用时,转储的日志文件到下一次转储时才压缩
  8. nodelaycompress //覆盖 delaycompress 选项,转储同时压缩。
  9. missingok //如果日志丢失,不报错继续滚动下一个日志
  10. errors address //专储时的错误信息发送到指定的Email 地址
  11. ifempty //即使日志文件为空文件也做轮转,这个是logrotate的缺省选项。
  12. notifempty //当日志文件为空时,不进行轮转
  13. mail address //把转储的日志文件发送到指定的E-mail 地址
  14. nomail //转储时不发送日志文件
  15. olddir directory //转储后的日志文件放入指定的目录,必须和当前日志文件在同一个文件系统
  16. noolddir //转储后的日志文件和当前日志文件放在同一个目录下
  17. sharedscripts //运行postrotate脚本,作用是在所有日志都轮转后统一执行一次脚本。如果没有配置这个,那么每个日志轮转后都会执行一次脚本
  18. prerotate //在logrotate转储之前需要执行的指令,例如修改文件的属性等动作;必须独立成行
  19. postrotate //在logrotate转储之后需要执行的指令,例如重新启动 (kill -HUP) 某个服务!必须独立成行
  20. daily //指定转储周期为每天
  21. weekly //指定转储周期为每周
  22. monthly //指定转储周期为每月
  23. rotate count //指定日志文件删除之前转储的次数,0 指没有备份,5 指保留5 个备份
  24. dateext //使用当期日期作为命名格式
  25. dateformat .%s //配合dateext使用,紧跟在下一行出现,定义文件切割后的文件名,必须配合dateext使用,只支持 %Y %m %d %s 这四个参数
  26. size(或minsize) log-size //当日志文件到达指定的大小时才转储,log-size能指定bytes(缺省)及KB (sizek)或MB(sizem).
  27. 当日志文件 >= log-size 的时候就转储。 以下为合法格式:(其他格式的单位大小写没有试过)
  28. size = 5 size 5 (>= 5 个字节就转储)
  29. size = 100k size 100k
  30. size = 100M size 100M

编译参数参考