即墨网站建设哪家好,店面设计方案,石河子做网站的公司,中山 网站关键词优化HAproxy群集 常见的集群调度器HAproxy 、nginx、LVS区别HAproxynginxlvs HAproxy介绍HAproxy特点HAproxy常见的负载均衡策略HAproxy会话保持HAproxy配置实例 常见的集群调度器
常见的web集群调度器分为软件和硬件
软件#xff1a;LVS Haproxy nginx
硬件#xff1a; F5 Ar… HAproxy群集 常见的集群调度器HAproxy 、nginx、LVS区别HAproxynginxlvs HAproxy介绍HAproxy特点HAproxy常见的负载均衡策略HAproxy会话保持HAproxy配置实例 常见的集群调度器
常见的web集群调度器分为软件和硬件
软件LVS Haproxy nginx
硬件 F5 Array 梭子鱼 绿盟
HAproxy 、nginx、LVS区别
HAproxy
HAProxy和Nginx是基于第三方应用实现的软负载均衡
HAProxy和Nginx都可以实现4层和7层技术HAProxy可提供TCP和HTTP应用的负载均衡综合解决方案
而HAProxy在状态监测方面功能更丰富、强大可支持端口、URL、脚本等多种状态检测方式
HAProxy功能强大单纯从效率上来讲HAProxy会比Nginx有更出色的负载均衡速度在并发处理上也是优于Nginx的。但整体性能低于4层模式的LVS负载均衡
nginx
基于第三方应用实现软负载均衡可以实现4层和7层技术
Nginx主要用于Web服务器或缓存服务器。Nginx的upstream模块虽然也支持群集功能但是性能没有LVS和Haproxy好对群集节点健康检查功能不强只支持通过端口来检测不支持通过URL来
lvs
LVS基于Linux操作系统内核实现软负载均衡
LVS是可实现4层的IP负载均衡技术无法实现基于目录、URL的转发
LVS因为工作在ISO模型的第四层其状态监测功能单一
HAproxy介绍
Haproxy是一款课提供高可用、负载均衡、及基于TCP和http应用的代理软件通常用于并发大1万以上的web站点。通常这些站点又需要会话保持或七层处理HAProxy的运行模式使得它可以很简单安全的整合至当前的架构中同时可以保护web服务器不被暴露到网络上
HAproxy特点
●可靠性和稳定性非常好可以与硬件级的F5负载均衡设备相媲美 ●最高可以同时维护40000-50000个并发连接单位时间内处理的最大请求数为20000个最大处理能力可达10Git/s ●支持多达8种负载均衡算法 ●支持Session会话保持Cookie的引导 ●支持通过获取指定的url来检测后端服务器的状态 ●支持虚机主机功能从而实现web负载均衡更加灵活 ●支持连接拒绝、全透明代理等独特的功能 ●拥有强大的ACL支持用于访问控制 ●支持TCP和HTTP协议的负载均衡转发 ●支持客户端的keepalive功能减少客户端与haproxy的多次三次握手导致资源浪费让多个请求在一个tcp连接中完成
HAproxy常见的负载均衡策略
1roundrobin----------表示简单的轮询 2static-rr----------------表示根据权重 3leastconn-------------表示最少连接者先处理 4source-----------------表示根据请求源IP 5uri——————----表示根据请求的URI,做cdn需使用; 6url_param————表示根据请求的URl参数’balance url_param’ requires an URL parameter name 7hdr(name)——------表示根据HTTP请求头来锁定每一次HTTP请求; 8rdp-cookie(name)–表示根据cookie(name)来锁定并哈希每一次TCP请求。
HAproxy会话保持
HAProxy 提供了3种实现会话保持的方式 1source源地址hash 2设置cookie 3会话粘性表stick-table
HAproxy配置实例
web1 192.168.65.104
web2 192.168.65.105
tomcat1 192.168.65.102:8080
tomcat2 192.168.65.102:8081
Haproxy 192.168.65.106104
[rootlocalhost ~]# yum -y install nginx (用 nginx.repo安装的)
[rootlocalhost ~]# cd /usr/share/nginx.html
[rootlocalhost html]# mkdir static
[rootlocalhost html]#echo this is web1 page! static/test.html
[rootlocalhost ~]#systemctl start nginx105
[rootlocalhost ~]# yum -y install nginx (用 nginx.repo安装的)
[rootlocalhost ~]# cd /usr/share/nginx.html
[rootlocalhost html]# mkdir static
[rootlocalhost html]#echo this is web2 page! static/test.html
[rootlocalhost ~]#systemctl start nginx102
安装jdk
[rootlocalhost ~]#systemctl stop firewalld.service
[rootlocalhost ~]#setenforce 0
[rootlocalhost ~]#cd /opt
[rootlocalhost opt]#ls
apache-tomcat-8.5.16.tar.gz jdk-8u91-linux-x64.tar.gz rh
[rootlocalhost opt]#tar xf jdk-8u91-linux-x64.tar.gz
[rootlocalhost opt]#ls
apache-tomcat-8.5.16.tar.gz jdk1.8.0_91 jdk-8u91-linux-x64.tar.gz rh
[rootlocalhost opt]#mv jdk1.8.0_91/ /usr/local/
[rootlocalhost opt]#ls /usr/local/
bin etc games include jdk1.8.0_91 lib lib64 libexec sbin share src
[rootlocalhost opt]#cd /etc/profile.d/ #环境变量子配置文件
[rootlocalhost profile.d]#ls
256term.csh colorgrep.csh flatpak.sh less.sh vte.sh
256term.sh colorgrep.sh lang.csh PackageKit.sh which2.csh
abrt-console-notification.sh colorls.csh lang.sh vim.csh which2.sh
bash_completion.sh colorls.sh less.csh vim.sh
[rootlocalhost profile.d]#vim java.sh
export JAVA_HOME/usr/local/jdk1.8.0_91
export JRE_HOME$JAVA_HOME/jre
export CLASSPATH.:$JAVA_HOME/lib:$JRE_HOME
export PATH$JAVA_HOME/bin:$JRE_HOME/bin:$PATH[rootlocalhost profile.d]#source java.sh部署Tomcat
[rootlocalhost profile.d]#cd /opt
[rootlocalhost opt]#ls
apache-tomcat-8.5.16.tar.gz jdk-8u91-linux-x64.tar.gz rh
[rootlocalhost opt]#tar xf apache-tomcat-8.5.16.tar.gz
[rootlocalhost opt]#ls
apache-tomcat-8.5.16 apache-tomcat-8.5.16.tar.gz jdk-8u91-linux-x64.tar.gz rh
[rootlocalhost opt]#cp -a apache-tomcat-8.5.16 /usr/local/tomcat1
[rootlocalhost opt]#cp -a apache-tomcat-8.5.16 /usr/local/tomcat2
[rootlocalhost opt]#ls /usr/local/
bin games jdk1.8.0_91 lib64 sbin src tomcat2
etc include lib libexec share tomcat1
[rootlocalhost opt]#vim /usr/local/tomcat2/conf/server.xml
//修改tomcat2的配置文件
Server port8006 shutdownSHUTDOWN
#22行修改Server prot默认为8005 - 修改为8006
Connector port8081 protocolHTTP/1.1
#69行修改Connector portHTTP/1.1 默认为8080 - 修改为8081
[rootlocalhost opt]#cd /usr/local/tomcat2
[rootlocalhost tomcat2]#ls
bin conf lib LICENSE logs NOTICE RELEASE-NOTES RUNNING.txt temp webapps work
[rootlocalhost tomcat2]#cd bin
[rootlocalhost bin]#ls
bootstrap.jar configtest.bat setclasspath.sh tomcat-native.tar.gz
catalina.bat configtest.sh shutdown.bat tool-wrapper.bat
catalina.sh daemon.sh shutdown.sh tool-wrapper.sh
catalina-tasks.xml digest.bat startup.bat version.bat
commons-daemon.jar digest.sh startup.sh version.sh
commons-daemon-native.tar.gz setclasspath.bat tomcat-juli.jar[rootlocalhost bin]#vim startup.sh
export CATALINA_BASE/usr/local/tomcat2 #Tomcat存放的目录位置
export CATALINA_HOME/usr/local/tomcat2
export TOMCAT_HOME/usr/local/tomcat2[rootlocalhost bin]#vim shutdown.sh
export CATALINA_BASE/usr/local/tomcat2
export CATALINA_HOME/usr/local/tomcat2
export TOMCAT_HOME/usr/local/tomcat2[rootlocalhost bin]#cd /usr/local/tomcat1
[rootlocalhost tomcat1]#ls
bin conf lib LICENSE logs NOTICE RELEASE-NOTES RUNNING.txt temp webapps work
[rootlocalhost tomcat1]#cd bin
[rootlocalhost bin]#ls
bootstrap.jar configtest.bat setclasspath.sh tomcat-native.tar.gz
catalina.bat configtest.sh shutdown.bat tool-wrapper.bat
catalina.sh daemon.sh shutdown.sh tool-wrapper.sh
catalina-tasks.xml digest.bat startup.bat version.bat
commons-daemon.jar digest.sh startup.sh version.sh
commons-daemon-native.tar.gz setclasspath.bat tomcat-juli.jar
[rootlocalhost bin]#vim startup.sh
export CATALINA_BASE/usr/local/tomcat1
export CATALINA_HOME/usr/local/tomcat1
export TOMCAT_HOME/usr/local/tomcat1
[rootlocalhost bin]#vim shutdown.sh
export CATALINA_BASE/usr/local/tomcat1
export CATALINA_HOME/usr/local/tomcat1
export TOMCAT_HOME/usr/local/tomcat1[rootlocalhost bin]#/usr/local/tomcat1/bin/startup.sh
Using CATALINA_BASE: /usr/local/tomcat1
Using CATALINA_HOME: /usr/local/tomcat1
Using CATALINA_TMPDIR: /usr/local/tomcat1/temp
Using JRE_HOME: /usr/local/jdk1.8.0_91/jre
Using CLASSPATH: /usr/local/tomcat1/bin/bootstrap.jar:/usr/local/tomcat1/bin/tomcat-juli.jar
Tomcat started.
[rootlocalhost bin]#/usr/local/tomcat2/bin/startup.sh
Using CATALINA_BASE: /usr/local/tomcat2
Using CATALINA_HOME: /usr/local/tomcat2
Using CATALINA_TMPDIR: /usr/local/tomcat2/temp
Using JRE_HOME: /usr/local/jdk1.8.0_91/jre
Using CLASSPATH: /usr/local/tomcat2/bin/bootstrap.jar:/usr/local/tomcat2/bin/tomcat-juli.jar
Tomcat started.[rootlocalhost bin]#netstat -ltnp |grep java
tcp6 0 0 :::8080 :::* LISTEN 40828/java
tcp6 0 0 :::8081 :::* LISTEN 40885/java
tcp6 0 0 127.0.0.1:8005 :::* LISTEN 40828/java
tcp6 0 0 127.0.0.1:8006 :::* LISTEN 40885/java
tcp6 0 0 :::8009 :::* LISTEN 40828/java
tcp6 0 0 :::8010 :::* LISTEN 40885/java #编译安装Haproxy
yum install -y zlib-devel openssl-devel pcre-devel systemd-devel[rootlocalhost opt]# useradd -M -s /sbin/nologin haproxy
[rootlocalhost opt]# tar xf haproxy-2.8.3.tar.gz
[rootlocalhost opt]# ls
haproxy-2.8.3 haproxy-2.8.3.tar.gz rh
[rootlocalhost opt]# cd haproxy-2.8.3/
[rootlocalhost haproxy-2.8.3]# make ARCHx86_64 TARGETlinux-glibc USE_PCRE1 USE_OPENSSL1 USE_ZLIB1 USE_SYSTEMD1[rootlocalhost haproxy-2.8.3]# make install PREFIX/usr/local/haproxy
[rootlocalhost haproxy-2.8.3]# ls
addons CHANGELOG examples LICENSE reg-tests tests
admin CONTRIBUTING haproxy MAINTAINERS scripts VERDATE
BRANCHES dev include Makefile src VERSION
BSDmakefile doc INSTALL README SUBVERS
[rootlocalhost haproxy-2.8.3]# cd examples/
[rootlocalhost examples]# ls
basic-config-edge.cfg lua transparent_proxy.cfg
content-sw-sample.cfg option-http_proxy.cfg wurfl-example.cfg
errorfiles quick-test.cfg
haproxy.init socks4.cfg
[rootlocalhost examples]# mkdir /etc/haproxy
[rootlocalhost examples]# cp quick-test.cfg /etc/haproxy/haproxy.cfg
[rootlocalhost examples]# cp haproxy.init /etc/init.d/haproxy
[rootlocalhost examples]# cd /etc/haproxy/
[rootlocalhost haproxy]# ls
haproxy.cfg
[rootlocalhost haproxy]# cd /etc/init.d/
[rootlocalhost init.d]# ls
functions haproxy netconsole network README
[rootlocalhost init.d]# vim haproxy
[rootlocalhost init.d]# cd /usr/local/haproxy/
[rootlocalhost haproxy]# ls
doc sbin share
[rootlocalhost haproxy]# ln -s /usr/local/haproxy/sbin/haproxy /usr/sbin
[rootlocalhost haproxy]# haproxy -v
HAProxy version 2.8.3-86e043a 2023/09/07 - https://haproxy.org/
Status: long-term supported branch - will stop receiving fixes around Q2 2028.
Known bugs: http://www.haproxy.org/bugs/bugs-2.8.3.html
Running on: Linux 3.10.0-693.el7.x86_64 #1 SMP Tue Aug 22 21:09:27 UTC 2017 x86_64
[rootlocalhost haproxy]# chmod x /etc/init.d/haproxy
[rootlocalhost haproxy]# chkconfig --add haproxy
[rootlocalhost haproxy]# chkconfig --list haproxy注该输出结果只显示 SysV 服务并不包含
原生 systemd 服务。SysV 配置数据
可能被原生 systemd 配置覆盖。要列出 systemd 服务请执行 systemctl list-unit-files。查看在具体 target 启用的服务请执行systemctl list-dependencies [target]。haproxy 0:关 1:关 2:关 3:关 4:关 5:关 6:关
[rootlocalhost haproxy]# chkconfig --level 35 haproxy on
[rootlocalhost haproxy]# chkconfig --list haproxy注该输出结果只显示 SysV 服务并不包含
原生 systemd 服务。SysV 配置数据
可能被原生 systemd 配置覆盖。要列出 systemd 服务请执行 systemctl list-unit-files。查看在具体 target 启用的服务请执行systemctl list-dependencies [target]。haproxy 0:关 1:关 2:关 3:开 4:关 5:开 6:关
[rootlocalhost haproxy]# service haproxy start
Starting haproxy (via systemctl): [ 确定 ]
[rootlocalhost haproxy]# netstat -lntp |grep haproxy
tcp 0 0 0.0.0.0:8000 0.0.0.0:* LISTEN 3110/haproxy
[rootlocalhost haproxy]# vim haproxy.cfg
global log 127.0.0.1 local0 infolog 127.0.0.1 local1 warning maxconn 30000 #chroot /var/lib/haproxy pidfile /var/run/haproxy.piduser haproxygroup haproxydaemon#nbproc 1spread-checks 2defaults log globalmode httpoption http-keep-alive option forwardfor option httplog option dontlognulloption redispatchoption abortonclosemaxconn 20000 retries 3 #contimeout 5000#clitimeout 50000#srvtimeout 50000timeout http-request 2stimeout queue 3stimeout connect 1stimeout client 10stimeout server 2stimeout http-keep-alive 10stimeout check 2sfrontend mm-httpbind 0.0.0.0:80acl url_static path_beg -i /staticacl url_dynamic path_end -i .jspuse_backend static_backend if url_staticuse_backend dynamic_backend if url_dynamicdefault_backend static_backendbackend static_backendbalance roundrobinoption httpchk GET /index.htmlserver static_inst01 192.168.65.104:80 check inter 2000 rise 2 fall 3server static_inst02 192.168.65.105:80 check inter 2000 rise 2 fall 3
backend dynamic_backendbalance roundrobinoption http-server-closeserver dynamic_inst01 192.168.65.102:8080 checkserver dynamic_inst02 192.168.65.102:8081 checklisten statsbind *:1080stats enablestats refresh 30sstats uri /statsstats realm HAProxy\ Statsstats auth admin:adminservice haproxy restart
Restarting haproxy (via systemctl): [ 确定 ]
[rootlocalhost haproxy]# netstat -lntp |grep haproxy
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 17869/haproxy
tcp 0 0 0.0.0.0:1080 0.0.0.0:* LISTEN 17869/haproxy
在网页输入以下网址
http://192.168.65.106/static/test.html
http://192.168.65.106/mm/test.jsp[rootlocalhost haproxy]# vim haproxy.cfg
backend dynamic_backendbalance roundrobinoption http-server-closecookie HA_STICKY_dy insert indirect nocache#实现会话保持不能刷新了server dynamic_inst01 192.168.65.102:8080 cookie appserver1 checkserver dynamic_inst02 192.168.65.102:8081 cookie appserver1 check在网页输入以下网址
http://192.168.65.106/static/test.html
http://192.168.65.106/mm/test.jsp