就性能来说LVS性能最好(基于性能实现的负载均衡,但是搭建相对复杂),Nginx的upstream模块支持群集功能,但是对群集节点健康检查功能不强,并发性能没有HAproxy好。
●可靠性和稳定性非常好,可以与硬件级的F5负载均衡设备相媲美; ●最高可以同时维护40000-50000个并发连接,单位时间内处理的最大请求数为20000个,最大处理能力可达10Git/s; ●支持多达8种负载均衡算法 ●支持Session会话保持,Cookie的引导; ●支持通过获取指定的url来检测后端服务器的状态; ●支持虚机主机功能,从而实现web负载均衡更加灵活; ●支持连接拒绝、全透明代理等独特的功能; ●拥有强大的ACL支持,用于访问控制; ●支持TCP和HTTP协议的负载均衡转发; ●支持客户端的keepalive功能,减少客户端与haproxy的多次三次握手导致资源浪费,让多个请求在一个tcp连接中完成
●LVS基于Linux操作系统内核实现软负载均衡,而HAProxy和Nginx是基于第三方应用实现的软负载均衡; ●LVS是可实现4层的IP负载均衡技术,无法实现基于目录、URL的转发。而HAProxy和Nginx都可以实现4层和7层技术,HAProxy可提供TCP和HTTP应用的负载均衡综合解决方案; ●LVS因为工作在ISO模型的第四层,其状态监测功能单一,而HAProxy在状态监测方面功能更丰富、强大,可支持端口、URL、脚本等多种状态检测方式; ●HAProxy功能强大,单纯从效率上来讲HAProxy会比Nginx有更出色的负载均衡速度,在并发处理上也是优于Nginx的。但整体性能低于4层模式的LVS负载均衡; ●Nginx主要用于Web服务器或缓存服务器。Nginx的upstream模块虽然也支持群集功能,但是性能没有LVS和Haproxy好,对群集节点健康检查功能不强,只支持通过端口来检测,不支持通过URL来检测。
#haproxy支持基于lua实现功能扩展(需要安装比较新的lua语言,方便进行haproxy编译) yum install -y gcc gcc-c++ make ? curl -R -O http://www.lua.org/ftp/lua-5.4.4.tar.gz tar zxf lua-5.4.4.tar.gz -C /usr/local/ cd /usr/local/lua-5.4.4 make linux test ? ? #安装haproxy yum install -y zlib-devel openssl-devel pcre-devel systemd-devel useradd -M -s /sbin/nologin haproxy ? cd /opt tar xf haproxy-2.8.3.tar.gz cd /opt/haproxy-2.8.3/ ? make ARCH=x86_64 TARGET=linux-glibc USE_PCRE=1 USE_OPENSSL=1 USE_ZLIB=1 USE_SYSTEMD=1 USE_LUA=1 LUA_INC=/usr/local/lua-5.4.4/src/ LUA_LIB=/usr/local/src/lua-5.4.4/src/ make install PREFIX=/usr/local/haproxy ? mkdir /etc/haproxy cp /opt/haproxy-2.8.3/examples/quick-test.cfg /etc/haproxy/haproxy.cfg vim /etc/haproxy/haproxy.cfg ? cp /opt/haproxy-2.8.3/examples/haproxy.init /etc/init.d/haproxy vim /etc/init.d/haproxy 26 [ "${NETWORKING}" = "no" ] && exit 0 ? ln -s /usr/local/haproxy/sbin/haproxy /usr/sbin/ haproxy -v ? chmod +x /etc/init.d/haproxy chkconfig --add /etc/init.d/haproxy chkconfig --level 35 haproxy on chkconfig --list haproxy ? service haproxy start netstat -lntp | grep haproxy
make && make install ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/ #让系统识别nginx的操作命令 vim /lib/systemd/system/nginx.service
vim /usr/local/nginx/html/index.html
tar zxvf apache-tomcat-9.0.16.tar.gz mv apache-tomcat-9.0.16 /usr/local/tomcat1 cp -a /usr/local/tomcat1 /usr/local/tomcat2
make ARCH=x86_64 TARGET=linux-glibc USE_PCRE=1 USE_OPENSSL=1 USE_ZLIB=1 USE_SYSTEMD=1 USE_LUA=1 LUA_INC=/usr/local/lua-5.4.4/src/ LUA_LIB=/usr/local/src/lua-5.4.4/src/ make install PREFIX=/usr/local/haproxy
vim /etc/haproxy/haproxy.cfg global log /dev/log local0 info log /dev/log local0 notice ? ...... defaults ? ...... ? log global ? ...... #需要修改rsyslog配置,为了便于管理。将haproxy相关的配置独立定义到haproxy.conf,并放到/etc/rsyslog.d/下,rsyslog启动时会自动加载此目录下的所有配置文件。 vim /etc/rsyslog.d/haproxy.conf if ($programname == 'haproxy' and $syslogseverity-text == 'info') then -/var/log/haproxy/haproxy-info.log &~ if ($programname == 'haproxy' and $syslogseverity-text == 'notice') then -/var/log/haproxy/haproxy-notice.log &~ #这部分配置是将haproxy的info日志记录到/var/log/haproxy/haproxy-info.log下,将notice日志记录到/var/log/haproxy/haproxy-notice.log下。“&~”表示当日志写入到日志文件后,rsyslog停止处理这个信息。
#修改haproxy.cfg,将info及以上级别的日志发送到rsyslog的local0接口,将warning及以上级别的日志发送到rsyslog的local1接口 vim /etc/haproxy/haproxy.cfg global ? ...... ? log 127.0.0.1 local0 info ? log 127.0.0.1 local1 warning ? ...... ? defaults ? ...... ? log global ? ...... ? #注:信息级日志会打印HAProxy 的每一条请求处理,会占用大量的磁盘空间,在生产环境中,将日志级别调整为notice ? ? #为 rsyslog 添加 haproxy 日志的配置 mkdir /var/log/haproxy ? vim /etc/rsyslog.d/haproxy.conf $ModLoad imudp $UDPServerRun 514 $FileCreateMode 0644 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #日志文件的权限 $FileOwner haproxy ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #日志文件的owner local0.* ? ? /var/log/haproxy/haproxy.log ? ? ? ? #local0接口对应的日志输出文件 local1.* ? ? /var/log/haproxy/haproxy_warn.log ? ? #local1接口对应的日志输出文件 ? #修改 rsyslog 的启动参数 vim /etc/sysconfig/rsyslog ...... SYSLOGD_OPTIONS="-c 2 -r -m 0"