单理解四层和七层负蝲均衡:
① 所谓四层就是基于IP+端口的负载均衡;七层是ZURL{应用层信息的负载均衡;同理Q还有基于MAC地址的二层负载均衡和ZIP地址的三层负载均衡?换句换说Q二层负载均衡会通过一个虚拟MAC地址接收hQ然后再分配到真实的MAC地址Q三层负载均衡会通过一个虚拟IP地址接收hQ然后再分配到真实的IP地址Q四层通过虚拟IP+端口接收hQ然后再分配到真实的服务器;七层通过虚拟的URL或主机名接收hQ然后再分配到真实的服务器?/p>
② 所谓的四到七层负蝲均衡Q就是在对后台的服务器进行负载均衡时Q依据四层的信息或七层的信息来决定怎么栯{发流量?比如四层的负载均衡,是通过发布三层的IP地址QVIPQ,然后加四层的端口P来决定哪些流量需要做负蝲均衡Q对需要处理的量q行NAT处理Q{发至后台服务器,q记录下q个TCP或者UDP的流量是由哪台服务器处理的,后箋q个q接的所有流量都同样转发到同一台服务器处理。七层的负蝲均衡Q就是在四层的基上(没有四层是绝对不可能有七层的Q,再考虑应用层的特征Q比如同一个Web服务器的负蝲均衡Q除了根据VIP?0端口辨别是否需要处理的量Q还可根据七层的URL、浏览器cd、语a来决定是否要q行负蝲均衡。D个例子,如果你的Web服务器分成两l,一l是中文语言的,一l是英文语言的,那么七层负蝲均衡可以当用户来访问你的域名时Q自动L别用戯aQ然后选择对应的语a服务器组q行负蝲均衡处理?/p>
③ 负蝲均衡器通常UCؓ四层交换机或七层交换机。四层交换机主要分析IP层及TCP/UDP层,实现四层量负蝲均衡。七层交换机除了支持四层负蝲均衡以外Q还有分析应用层的信息,如HTTP协议URI或Cookie信息?/p>
1、负载均衡分为L4 switchQ四层交换)Q即在OSIW?层工作,是TCP层啦。此ULoad Balance不理解应用协议(如HTTP/FTP/MySQL{等Q。例子:LVSQF5?/p>
2、另一U叫做L7 switchQ七层交换)QOSI的最高层Q应用层。此Ӟ该Load Balancer能理解应用协议。例子: haproxyQMySQL Proxy?/p>
注意Q上面的很多Load Balancer既可以做四层交换Q也可以做七层交换?/p>
Q二Q?/p>
负蝲均衡讑֤也常被称?四到七层交换?Q那么四层和七层两者到底区别在哪里Q?/strong>
W一Q技术原理上的区别?/strong>
所谓四层负载均?/strong>Q也是主要通过报文中的目标地址和端口,再加上负载均衡设备设|的服务器选择方式Q决定最l选择的内部服务器?/p> 以常见的TCPZQ负载均衡设备在接收到第一个来自客L的SYN hӞ即通过上述方式选择一个最佳的服务器,q对报文中目标IP地址q行修改(改ؓ后端服务器IPQ,直接转发l该服务器。TCP的连接徏立,即三ơ握手是客户端和服务器直接徏立的Q负载均衡设备只是vC个类D\由器的{发动作。在某些部v情况下,Z证服务器回包可以正确q回l负载均衡设备,在{发报文的同时可能q会Ҏ文原来的源地址q行修改?/p> 所谓七层负载均?/strong>Q也UCؓ“内容交换”Q也是主要通过报文中的真正有意义的应用层内容,再加上负载均衡设备设|的服务器选择方式Q决定最l选择的内部服务器?/p> 以常见的TCPZQ负载均衡设备如果要Ҏ真正的应用层内容再选择服务器,只能先代理最l的服务器和客户端徏立连?三次握手)后,才可能接受到客户端发送的真正应用层内容的报文Q然后再Ҏ该报文中的特定字D,再加上负载均衡设备设|的服务器选择方式Q决定最l选择的内部服务器。负载均衡设备在q种情况下,更类g一个代理服务器。负载均衡和前端的客L以及后端的服务器会分别徏立TCPq接。所以从q个技术原理上来看Q七层负载均衡明昄对负载均衡设备的要求更高Q处理七层的能力也必然会低于四层模式的部|方式?/p> W二Q应用场景的需求?/strong> 七层应用负蝲的好处,是得整个网l更"?/strong>"。例如访问一个网站的用户量Q可以通过七层的方式,对囄cȝh转发到特定的囄服务器ƈ可以使用~存技术;对文字cȝh可以转发到特定的文字服务器ƈ可以使用压羃技术。当然这只是七层应用的一个小案例Q从技术原理上Q这U方式可以对客户端的h和服务器的响应进行Q意意义上的修改,极大的提升了应用pȝ在网l层的灵zL。很多在后台Q例如Nginx或者Apache上部|的功能可以前移到负载均衡设备上Q例如客戯求中的Header重写Q服务器响应中的关键字过滤或者内Ҏ入等功能?/p> 另外一个常常被提到功能?strong style="margin: 0px; padding: 0px; color: #333333;">?/strong>安全性。网l中最常见的SYN FlooddQ即黑客控制众多源客LQ用虚假IP地址对同一目标发送SYNdQ通常q种d会大量发送SYN报文Q耗尽服务器上的相兌源,以达到Denial of Service(DoS)的目的。从技术原理上也可以看出,四层模式下这些SYNd都会被{发到后端的服务器上;而七层模式下q些SYNd自然在负载均衡设备上截止,不会影响后台服务器的正常q营。另外负载均衡设备可以在七层层面讑֮多种{略Q过滤特定报文,例如SQL Injection{应用层面的特定d手段Q从应用层面q一步提高系l整体安全?/p> 现在?层负载均衡,主要q是着重于应用HTTP协议Q所以其应用范围主要是众多的|站或者内部信息^台等ZB/S开发的pȝ?4层负载均衡则对应其他TCP应用Q例如基于C/S开发的ERP{系l?/p> W三Q七层应用需要考虑的问题?a target="_blank" style="margin: 0px; padding: 0px; color: #1a64a2; text-decoration: none;"> 1Q是否真的必?/strong>Q七层应用的可以提高流量智能化Q同时必不可免的带来讑֤配置复杂Q负载均衡压力增高以及故障排查上的复杂性等问题。在设计pȝ旉要考虑四层七层同时应用的杂情c?/p> 2Q是否真的可以提高安全?/strong>。例如SYN FlooddQ七层模式的将q些量从服务器屏蔽Q但负蝲均衡讑֤本n要有强大的抗DDoS能力Q否则即使服务器正常而作Z枢调度的负蝲均衡讑֤故障也会D整个应用的崩溃?/p> 3Q是否有_的灵zd。七层应用的优势是可以让整个应用的流量智能化Q但是负载均衡设备需要提供完善的七层功能Q满_h据不同情늚Z应用的调度。最单的一个考核是能否取代后台Nginx或者Apache{服务器上的调度功能。能够提供一个七层应用开发接口的负蝲均衡讑֤Q可以让客户Ҏ需求Q意设定功能,才真正有可能提供强大的灵zL和性?/p> Q本节出?“ADC技术博?#8221; 博客Q请务必保留此出处http://virtualadc.blog.51cto.com/3027116/591396Q?/p> Q三Q?/p> 负蝲均衡四七层介l? 负蝲均衡QLoad BalanceQ徏立在现有|络l构之上Q它提供了一U廉h效透明的方法扩展网l设备和服务器的带宽、增加吞吐量、加强网l数据处理能力、提高网l的灉|性和可用性?/p> 负蝲均衡有两斚w的含义:首先Q大量的q发讉K或数据流量分担到多台节点讑֤上分别处理,减少用户{待响应的时_其次Q单个重负蝲的运分担到多台节点讑֤上做q行处理Q每个节点设备处理结束后Q将l果汇总,q回l用Ppȝ处理能力得到大幅度提高?/p> 本文所要介l的负蝲均衡技术主要是指在均衡服务器群中所有服务器和应用程序之间流量负载的应用Q目前负载均衡技术大多数是用于提高诸如在Web服务器、FTP服务器和其它关键d服务器上的Internet服务器程序的可用性和可~性?/p> 负蝲均衡技术分c?/strong> 目前有许多不同的负蝲均衡技术用以满不同的应用需求,下面从负载均衡所采用的设备对象、应用的|络层次Q指OSI参考模型)及应用的地理l构{来分类?/p> ?g负蝲均衡 软g负蝲均衡解决Ҏ是指在一台或多台服务器相应的操作pȝ上安装一个或多个附加软g来实现负载均衡,如DNS Load BalanceQCheckPoint Firewall-1 ConnectControl{,它的优点是基于特定环境,配置单,使用灉|Q成本低廉,可以满一般的负蝲均衡需求?/p> 软g解决Ҏ~点也较多,因ؓ每台服务器上安装额外的Y件运行会消耗系l不定量的资源,是功能强大的模块,消耗得多Q所以当q接h特别大的时候,软g本n会成为服务器工作成|的一个关键;软g可扩展性ƈ不是很好Q受到操作系l的限制Q由于操作系l本w的BugQ往往会引起安全问题?/p> g负蝲均衡解决Ҏ是直接在服务器和外部|络间安装负载均衡设备,q种讑֤我们通常UC载均衡器Q由于专门的讑֤完成专门的Q务,独立于操作系l,整体性能得到大量提高Q加上多样化的负载均衡策略,化的量理Q可辑ֈ最佳的负蝲均衡需求?nbsp; 负蝲均衡器有多种多样的Ş式,除了作ؓ独立意义上的负蝲均衡器外Q有些负载均衡器集成在交换设备中Q置于服务器与Internet链接之间Q有些则以两块网l适配器将q一功能集成到PC中,一块连接到Internet上,一块连接到后端服务器群的内部网l上?/p> 一般而言Q硬件负载均衡在功能、性能上优于Y件方式,不过成本昂贵?/p> 负蝲均衡从其应用的地理结构上分ؓ本地负蝲均衡(Local Load Balance)和全局负蝲均衡(Global Load BalanceQ也叫地域负载均?Q本地负载均衡是指对本地的服务器做负蝲均衡Q全局负蝲均衡是指对分别放|在不同的地理位|、有不同|络l构的服务器间作负载均衡?/p> 本地负蝲均衡能有效地解决数据量q大、网l负药重的问题Qƈ且不需p昂贵开支购|性能卓越的服务器Q充分利用现有设备,避免服务器单Ҏ障造成数据量的损失。其有灵zdL均衡{略把数据流量合理地分配l服务器内的服务器共同负担。即使是再给现有服务器扩充升U,也只是简单地增加一个新的服务器到服务群中,而不需改变现有|络l构、停止现有的服务?nbsp; 全局负蝲均衡主要用于在一个多区域拥有自己服务器的站点Qؓ了全球用户只以一个IP地址或域名就能访问到自己最q的服务器,从而获得最快的讉K速度Q也可用于子公司分散站点分布q的大公叔R过IntranetQ企业内部互联网Q来辑ֈ资源l一合理分配的目的?/p> |络层次上的负蝲均衡 针对|络上负载过重的不同瓉所在,从网l的不同层次入手Q我们可以采用相应的负蝲均衡技术来解决现有问题?nbsp; 随着带宽增加Q数据流量不断增大,|络核心部分的数据接口将面瓉问题Q原有的单一U\很难满需求,而且U\的升U又q于昂贵甚至难以实现Q这时就可以考虑采用链\聚合QTrunkingQ技术?/p>
在默认情况下QTomcat Manager是处于禁用状态的。准地_Tomcat Manager需要以用户角色q行dq授权才能用相应的功能Q不qTomcatq没有配|Q何默认的用户Q因此需要我们进行相应的用户配置之后才能使用Tomcat Manager?/p>
Tomcat Manager的用户配|是?code style="margin: 0px 3px; padding: 1px 4px; border: 1px solid #e1e1e8; outline: 0px; vertical-align: baseline; font-family: Consolas, Monaco, Menlo, 宋体; color: #dd1144; border-radius: 3px; background: #f7f7f9;">Tomcat安装目录/conf/tomcat-users.xml文g中进行管理的?/p>
Tomcat Manager的用户配|非常简单,下面我们以一个具体的配置ZQ?/p>
<tomcat-users>
<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<user username="tomcat" password="tomcat" roles="manager-gui"/>
<user username="admin" password="123456" roles="manager-script"/>
</tomcat-users>
如上所C,我们只需要在tomcat-users
节点中配|相应的role
(角色/权限)?code style="margin: 0px 3px; padding: 1px 4px; border: 1px solid #e1e1e8; outline: 0px; vertical-align: baseline; font-family: Consolas, Monaco, Menlo, 宋体; color: #dd1144; border-radius: 3px; background: #f7f7f9;">user(用户)卛_。一?code style="margin: 0px 3px; padding: 1px 4px; border: 1px solid #e1e1e8; outline: 0px; vertical-align: baseline; font-family: Consolas, Monaco, Menlo, 宋体; color: #dd1144; border-radius: 3px; background: #f7f7f9;">user节点表示单个用户Q属?code style="margin: 0px 3px; padding: 1px 4px; border: 1px solid #e1e1e8; outline: 0px; vertical-align: baseline; font-family: Consolas, Monaco, Menlo, 宋体; color: #dd1144; border-radius: 3px; background: #f7f7f9;">username?code style="margin: 0px 3px; padding: 1px 4px; border: 1px solid #e1e1e8; outline: 0px; vertical-align: baseline; font-family: Consolas, Monaco, Menlo, 宋体; color: #dd1144; border-radius: 3px; background: #f7f7f9;">password分别表示d的用户名和密码,属?code style="margin: 0px 3px; padding: 1px 4px; border: 1px solid #e1e1e8; outline: 0px; vertical-align: baseline; font-family: Consolas, Monaco, Menlo, 宋体; color: #dd1144; border-radius: 3px; background: #f7f7f9;">roles表示该用h具备的权限?/p>
user
节点?code style="margin: 0px 3px; padding: 1px 4px; border: 1px solid #e1e1e8; outline: 0px; vertical-align: baseline; font-family: Consolas, Monaco, Menlo, 宋体; color: #dd1144; border-radius: 3px; background: #f7f7f9;">roles属性grole
节点?code style="margin: 0px 3px; padding: 1px 4px; border: 1px solid #e1e1e8; outline: 0px; vertical-align: baseline; font-family: Consolas, Monaco, Menlo, 宋体; color: #dd1144; border-radius: 3px; background: #f7f7f9;">rolename属性值相对应Q表C当前用户具备该role节点所表示的角色权限。当Ӟ一个用户可以具备多U权限,因此属?code style="margin: 0px 3px; padding: 1px 4px; border: 1px solid #e1e1e8; outline: 0px; vertical-align: baseline; font-family: Consolas, Monaco, Menlo, 宋体; color: #dd1144; border-radius: 3px; background: #f7f7f9;">roles的值可以是多个rolename
Q多?code style="margin: 0px 3px; padding: 1px 4px; border: 1px solid #e1e1e8; outline: 0px; vertical-align: baseline; font-family: Consolas, Monaco, Menlo, 宋体; color: #dd1144; border-radius: 3px; background: #f7f7f9;">rolename之间以英文逗号隔开卛_?/p>
E加思考,我们应该猜到Q?code style="margin: 0px 3px; padding: 1px 4px; border: 1px solid #e1e1e8; outline: 0px; vertical-align: baseline; font-family: Consolas, Monaco, Menlo, 宋体; color: #dd1144; border-radius: 3px; background: #f7f7f9;">rolename的属性值ƈ不是随意的内容,否则Tomcat怎么能够知道我们随便定义?code style="margin: 0px 3px; padding: 1px 4px; border: 1px solid #e1e1e8; outline: 0px; vertical-align: baseline; font-family: Consolas, Monaco, Menlo, 宋体; color: #dd1144; border-radius: 3px; background: #f7f7f9;">rolename表示什么样的权限呢。实际上QTomcat已经为我们定义了4U不同的角色——也就??code style="margin: 0px 3px; padding: 1px 4px; border: 1px solid #e1e1e8; outline: 0px; vertical-align: baseline; font-family: Consolas, Monaco, Menlo, 宋体; color: #dd1144; border-radius: 3px; background: #f7f7f9;">rolenameQ我们只需要用Tomcat为我们定义的q几U角色就_满我们的工作需要了?/p>
以下是Tomcat Manager 4U角色的大致介绍(下面URL中的*为通配W?Q?/p>
从Tomcat Manager内部配置文g中可以得知,manager-gui
?code style="margin: 0px 3px; padding: 1px 4px; border: 1px solid #e1e1e8; outline: 0px; vertical-align: baseline; font-family: Consolas, Monaco, Menlo, 宋体; color: #dd1144; border-radius: 3px; background: #f7f7f9;">manager-script?code style="margin: 0px 3px; padding: 1px 4px; border: 1px solid #e1e1e8; outline: 0px; vertical-align: baseline; font-family: Consolas, Monaco, Menlo, 宋体; color: #dd1144; border-radius: 3px; background: #f7f7f9;">manager-jmx均具?code style="margin: 0px 3px; padding: 1px 4px; border: 1px solid #e1e1e8; outline: 0px; vertical-align: baseline; font-family: Consolas, Monaco, Menlo, 宋体; color: #dd1144; border-radius: 3px; background: #f7f7f9;">manager-status的权限,也就是说Q?code style="margin: 0px 3px; padding: 1px 4px; border: 1px solid #e1e1e8; outline: 0px; vertical-align: baseline; font-family: Consolas, Monaco, Menlo, 宋体; color: #dd1144; border-radius: 3px; background: #f7f7f9;">manager-gui?code style="margin: 0px 3px; padding: 1px 4px; border: 1px solid #e1e1e8; outline: 0px; vertical-align: baseline; font-family: Consolas, Monaco, Menlo, 宋体; color: #dd1144; border-radius: 3px; background: #f7f7f9;">manager-script?code style="margin: 0px 3px; padding: 1px 4px; border: 1px solid #e1e1e8; outline: 0px; vertical-align: baseline; font-family: Consolas, Monaco, Menlo, 宋体; color: #dd1144; border-radius: 3px; background: #f7f7f9;">manager-jmx三种角色权限无需再额外添?code style="margin: 0px 3px; padding: 1px 4px; border: 1px solid #e1e1e8; outline: 0px; vertical-align: baseline; font-family: Consolas, Monaco, Menlo, 宋体; color: #dd1144; border-radius: 3px; background: #f7f7f9;">manager-status权限Q即可直接访问\?q style="margin: 0px; padding: 0px; border: 1px dotted #778855; outline: 0px; vertical-align: baseline; background: none 0px 0px repeat scroll #f5f5f5;">/manager/status/*?/p>
hibernate.cfg.xml ?/span>hibernate.hbm2ddl.auto配置节点如下Q?/span>
<properties>
<property name="hibernate.show_sql" value="true" />
<property name="hibernate.hbm2ddl.auto" value="create" />
</properties>
Hibernate Reference Documentation 3.3.1解释如下Q?/span>
Automatically validate or export schema DDL to the database when the SessionFactory is created.With create-drop, the database schema will be dropped when the SessionFactory is closed explicitly.
eg. validate | update | create | create-drop
其实q个hibernate.hbm2ddl.auto参数的作用主要用于:
自动创徏|更新|验证数据库表l构?/span>
如果不是此方面的需求徏议不配置该条语句?/span>
每次加蝲hibernate旉会删除上一ơ的生成的表Q然后根据你?/span>modelcd重新来生成新表,哪怕两ơ没有Q何改变也要这h行,q就是导致数据库表数据丢q一个重要原因?/span>
每次加蝲hibernate时根?/span>modelcȝ成表Q但?/span>SessionFactory一关闭,表就自动删除?/span>
最常用的属性,W一ơ加?/span>hibernate时根?/span>modelcM自动建立赯的结构(前提是先建立好数据库Q,以后加蝲hibernate时根?/span> modelc自动更新表l构Q即使表l构改变了但表中的行仍然存在不会删除以前的行。要注意的是当部|到服务器后Q表l构是不会被马上建立h的,是要{?/span> 应用W一ơ运行v来后才会?/span>
每次加蝲hibernateӞ验证创徏数据库表l构Q只会和数据库中的表q行比较Q不会创建新表,但是会插入新倹{?/span>
当我们把hibernate.hbm2ddl.auto=create?/span>hibernate先用hbm2ddl来生成数据库schema?/span>
当我们把hibernate.cfg.xml文g?/span>hbm2ddl属性注释掉Q这h们就取消了在启动时用hbm2ddl来生成数据库schema。通常只有在不断重复进行单元测试的时候才需要打开它,但再ơ运?/span>hbm2ddl会把你保存的一切都删除掉(dropQ?/span>---- create配置的含义是Q?#8220;在创?/span>SessionFactory的时候,?/span>scema?/span>drop掉所以的表,再重新创建它?#8221;?/span>
我们在项目中使用Hibernate映射oracle的视囄时候,发现会出现某U特D条件下hibernate自动创徏了一张和视图同名?/span>TableQ导致获取视图信息时Q实际上获取的LI中的内容?/span>
注意Q很?/span>Hibernate新手在这一步会p|Q我们不时看到关?/span>Table not found错误信息的提问。但是,只要你根据上面描q的步骤来执行,׃会有q个问题Q因?/span>hbm2ddl会在W一ơ运行的时候创建数据库schemaQ?/span> 后箋的应用程序重启后q能l箋使用q个schema。假若你修改了映,或者修改了数据?/span>schema,你必Lhbm2ddl重新打开一ơ?/span>