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
[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