HAProxy高并发

HAProxy提供高可用性负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。HAProxy特别适用于那些负载特大的web站点, 这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上。

1、安装lua5.3版本

curl -R -O http://www.lua.org/ftp/lua-5.3.5.tar.gz 
yum install readline-devel gcc -y
tar zxvf lua-5.3.5.tar.gz
cd lua-5.3.5
make linux
make INSTALL_TOP=/usr/local/lua install
yum install systemd-devel wget openssl openssl-devel -y

 2、部署haproxy。可以看到安装PREFIX指定的安装目录为/usr/local/haproxy 。

wget https://www.haproxy.org/download/2.0/src/haproxy-2.0.1.tar.gz
tar zxvf haproxy-2.0.1.tar.gz 
cd haproxy-2.0.1
make -j $(nproc) TARGET=linux-glibc USE_OPENSSL=1 USE_ZLIB=1 USE_LUA=1 LUA_LIB=/usr/local/lua/lib/ LUA_INC=/usr/local/lua/include/ USE_PCRE=1 USE_SYSTEMD=1 
make install PREFIX=/usr/local/haproxy

 3、创建运行用户(应该也可忽略,只是使用该用户运行,加强安全而已。我一般是直接使用root用户运行)

创建运行用户(应该也可忽略,只是使用该用户运行,加强安全而已。我一般是直接使用root用户运行)

 4、创建配置文件haproxy.cfg。在安装目录/usr/local/hadproxy下新建haproxy.cfg

[root@kube-node1 ~]# cat /etc/haproxy/haproxy.cfg
global
    log /dev/log    local0
    log /dev/log    local1 notice
    chroot /var/lib/haproxy
    stats socket /var/run/haproxy-admin.sock mode 660 level admin
    stats timeout 30s
    user haproxy
    group haproxy
    daemon
    nbproc 1

defaults
    mode tcp
    log     global
    timeout connect 5000
    timeout client  10m
    timeout server  10m

listen  admin_stats
    bind 0.0.0.0:10080
    mode http
    log 127.0.0.1 local0 err
    stats refresh 30s
    stats uri /status
    stats realm welcome login\ Haproxy
    stats auth admin:123456
    stats hide-version
    stats admin if TRUE

frontend tcp-in #前端服务tcp-in
    mode tcp
    bind 0.0.0.0:8443  #监听1884端口
    log global
    default_backend kube-master

backend kube-master
    bind 0.0.0.0:8443
    mode tcp
    option tcplog
    balance source
    server 192.168.0.72 192.168.0.72:6443 check inter 2000 fall 2 rise 2 weight 1
    server 192.168.0.73 192.168.0.73:6443 check inter 2000 fall 2 rise 2 weight 1
    server 192.168.0.74 192.168.0.74:6443 check inter 2000 fall 2 rise 2 weight 1
View Code
[root@node2 haproxy]# cat haproxy.cfg
global  #全局设置
   daemon  #以后台进程运行
   maxconn 256  #每个进程的最大连接数
   nbproc 1  #进程数,该值可以设置小于或等于cpu核心数

  balance roundrobin #默认的负载均衡的方式,轮询方式 
  #balance source #默认的负载均衡的方式,类似nginx的ip_hash 
  #balance leastconn #默认的负载均衡的方式,最小连接 

defaults  #默认设置
  mode http  #设置http(七层模式),也可设置为tcp(四层模式),另外还有一个Health健康监测模式。对mysql进行负载均衡的话,这里记得修改为tcp
  timeout connect 5000ms
  timeout client 50000ms
  timeout server 50000ms
  
listen admin_stats #配置haproxy管理页面
  bind *:9999  #访问端口为9999
  mode http
  option httplog
  stats refresh 30s  #自动刷新时间
  stats uri /stats  #项目名为status,ip+端口+项目名即可访问
  stats auth admin:admin  #配置管理用户账号密码
  stats admin if TRUE
  stats hide-version

frontend http-in  #配置前端访问端口
  bind *:1080  #通过该端口进行负载均衡
  default_backend servers  #指定后端服务器

backend servers
  server server1 172.16.1.230:80 check inter 2000 rise 3 fall 3 weight 1 maxconn 32  

  #建议加上check,否则后台服务器A宕机了,负载均衡还会把请求发送到该宕机服务器上,inter 2000指check检测时间为2000毫秒,rise 3检测3次均正常则表示后天服务器正常,fall 3检测3次失败,则会把该后天服务器标志宕机,不再玩该后台服务器发送请求,weight 1指权重,取消weight改为backup,则是所有后台服务器宕机后才会启用该backup后台服务器
  server server2 172.16.1.227:80 check inter 2000 rise 3 fall 3 weight 1 maxconn 32

 5、使用指定配置文件运行haproxy。建议都haproxy和hadproxy.cfg都使用绝对路径

/usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/haproxy.cfg

6、haproxy 配置中分成五部分内容,分别如下:
    global:  设置全局配置参数,属于进程的配置,通常是和操作系统相关。
    defaults:配置默认参数,这些参数可以被用到frontend,backend,Listen组件;
    frontend:接收请求的前端虚拟节点,Frontend可以更加规则直接指定具体使用后端的backend;
    backend:后端服务集群的配置,是真实服务器,一个Backend对应一个或者多个实体服务器;
    Listen :frontend和backend的组合体。
7、logrotate切割haproxy的日志

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

 测试配置文件
logrotate -d /etc/logrotate.d/haproxy
该服务由anacron调用
anacron默认配置如下
修改该服务的调用时间

cat /etc/anacrontab 
# /etc/anacrontab: configuration file for anacron

# See anacron(8) and anacrontab(5) for details.

SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# the maximal random delay added to the base delay of the jobs
RANDOM_DELAY=45
# the jobs will be started during the following hours only
#默认为3点到22点随机延迟45分钟执行,修改为3点到5点
START_HOURS_RANGE=3-5

#period in days   delay in minutes   job-identifier   command
1	5	cron.daily		nice run-parts /etc/cron.daily
7	25	cron.weekly		nice run-parts /etc/cron.weekly
@monthly 45	cron.monthly		nice run-parts /etc/cron.monthly

 ogrotate中其他可配置参数,具体如下:

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

 https://my.oschina.net/u/4012972/blog/3077452

 8、加入systemd管理

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

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

 

参考   https://blog.51cto.com/lanlian/1305228

posted @ 2020-05-14 16:02  凡人半睁眼  阅读(725)  评论(0编辑  收藏  举报