zoukankan      html  css  js  c++  java
  • HAProxy高并发

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

    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
    
  • 相关阅读:
    word无法启动转换器RECOVR32.CNV
    win10致远OA显示正在转换。请稍等,不能获取office文件转换服务
    视频编辑剪辑软件
    软件质量属性——可修改性
    《架构之美》阅读笔记五
    架构漫谈一
    《架构之美》阅读笔记三
    《架构之美》阅读笔记二
    机器学习七讲——最优化
    机器学习六讲——降维
  • 原文地址:https://www.cnblogs.com/zjz20/p/12809856.html
Copyright © 2011-2022 走看看