1、Nginx
Nginx是一个很强大的高性能的web服务器、反向代理服务器。并且作为反向代理服务器实现了负载均衡。目前国内使用 Nginx 网站有:百度、京东、腾讯、淘宝(Tengine)、新浪等
2、负载均衡
负载均衡是指将请求均匀地分摊到多个主机上运行,负载均衡的关键在于均匀,均衡地分摊压力。
3、SwitchHosts!工具
SwitchHosts是一个管理、快速切换Hosts的小工具。用它来管理本机的IP和域名的映射。启动时以管理员身份启动,否则没有修改权限。
4、修改Tomcat 下 conf/server.xml (这里Tomcat默认的端口号是7070)
在server.xml中添加两个service节点,name值分别为TestServerOne,TestServerTwo。HTTP连接端口号分别是8081、8082,它们指向的部署目录分别是webapps1、webapps2。Tomcat的根目录下没有这两个目录,直接复制webapps目录就行了,此时三个部署目录处于同一个目录中。在这三个部署目录中分别创建一个名为test 的 web项目。
<Service name="Catalina">
<Connector port="7070" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
URIEncoding = "utf-8"
/>
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
<Engine name="Catalina" defaultHost="localhost">
<Realm className="org.apache.catalina.realm.LockOutRealm">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
</Realm><Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log." suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" /></Host>
</Engine>
</Service><Service name="TestServerOne">
<Connector URIEncoding="UTF-8" connectionTimeout="20000" port="8081" protocol="HTTP/1.1" redirectPort="8443"/>
<Connector port="8010" protocol="AJP/1.3" redirectPort="8443"/><Engine defaultHost="localhost" name="Catalina">
<Realm className="org.apache.catalina.realm.LockOutRealm">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/>
</Realm><Host appBase="webapps1" autoDeploy="true" name="localhost" unpackWARs="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" pattern="%h %l %u %t "%r" %s %b" prefix="localhost_access_log." suffix=".txt"/>
</Host>
</Engine></Service>
<Service name="TestServerTwo">
<Connector URIEncoding="UTF-8" connectionTimeout="20000" port="8082" protocol="HTTP/1.1" redirectPort="8443"/>
<Connector port="8011" protocol="AJP/1.3" redirectPort="8443"/><Engine defaultHost="localhost" name="Catalina">
<Realm className="org.apache.catalina.realm.LockOutRealm">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/>
</Realm><Host appBase="webapps2" autoDeploy="true" name="localhost" unpackWARs="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" pattern="%h %l %u %t "%r" %s %b" prefix="localhost_access_log." suffix=".txt"/>
</Host>
</Engine></Service>
5、负载均衡五种策略:
5.0、这五种负载均衡策略分为内置策略(轮询、权重、ip_hash、url_hash)和 扩展策略(fair策略),内置策略都可以混合使用
5.1、轮询策略(默认策略)
配置nginx.conf如下图,在浏览器上输入 vip.load.com/test 访问三个服务器的test 项目,多次刷新当前页面,就会发现它们负责处理请求的机率是一样的,这就是轮询策略,也就是轮着执行请求。
特点:请求平均分配给多个服务器。简单、平均,适合服务器软硬件一致的qing情况下
缺点:
1、在各种主机硬件配置、处理能力不一时,轮询不能物尽其用。就比如16核的服务器和1核的服务器同时工作,在这中策略下任务是平均分配的,这对于16核的服务器来说是大材小用的。此时轮询不能达到最高效
2、在需要Session的时候,轮询会导致反复登录。
5.2、权重策略(在轮询策略的基础上)
配置nginx.conf 如下图。每个server后面设置weight=n,n是一个整数,默认为1,n越大被分派请求的次数越多,通过配置weight来设置访问机率,三个服务器的权重分别是2、4、5,所以第三个服务器在轮询时被访问的机率也就也大。
特点:可以根据各种服务器负载状态,进行手动分配,达到了软硬件高效率利用
缺点:同样继承了轮询策略的缺点(在需要Session的时候,轮询会导致反复登录)
5.3、ip_hash策略(按IP地址哈希)
配置nginx.conf如下图。根据客户端IP地址经过哈希算法计算后的结果,决定请求固定分派给哪一台后端服务器。这样就不用考虑session共享的问题,因为一个用户的所有请求都会有一台服务器处理并响应的,也就是说同一个用户一直用同一台服务器。
特点:适用于有状态(session)的项目。
5.4、url_hash策略
配置nginx.conf如下图。根据客户端请求URL哈希计算后的结果,决定请求分派给哪一台后端服务器。
如:http://www.bai.com/auth/api/register
http://www.bai.com/search/api/...
http://www.bai.com/biz/api/.... 同一个的功能使用同一个的服务器
特点:相同业务主要由专门的服务器处理,利于提高缓存命中率。
5.5、fair策略
配置nginx.conf如下图。Nginx自动根据页面大小、加载时间长短智能地进行负载均衡。
特点:自动选择响应时间短的服务器,高效。
注意:该策略需要安装第三方模块,从 https://github.com/gnosek/nginx-upstream-fair 下载C源代码 并编译安装