Nginx+Keepalived搭建HA负载均衡Web

 

一、nginx和lvs的对比:

1、  nginx工作在网络的第7层,所以它可以针对http应用本身来做分流策略,比如针对域名、目录结构等,相比之下lvs并不具备这样的功能,Nginx单凭这点可以利用的场合就远多于lvs;

2、  nginx对网络的依赖小,理论上只要ping通,网页访问正常,nginx就能连得通,lvs就比较依赖于网络环境,目前来看服务器在同一网段内并且lvs使用direct方式分流,效果较能得到保证。要做好lvs管理员,确实得跟进学习很多有关网络方面的知识,就不再是一个http那么简单了。

3、  nginx安装和配置比较简单,测试起来也很方便,因为它基本能把错误用日志打印出来。Lvs的安装和配置、测试就比较复杂;

4、  nginx也同样能承受很高负载且稳定,但负载度的稳定性差lvs还有几个等级:nginx处理所有流量所以受限于机器IO和配置;本身的bug也是难以避免的;nginx没有现成的双机备份方案;

5、  nginx可以检测服务器内部的故障,比如根据服务器处理网页返回的状态码、超时等等,并且会把返回错误的请求重新提交到另一个节点,目前lvs中ldirectd也能支持针对服务器内部的状态监控,但lvs的原理使其不能重发请求。比如用户正在上传一个文件,而处理该上传的节点刚好在上传过程中出现故障,nginx会把上传切到另一台服务器重新处理,而lvs就直接断掉了。

6、  nginx对请求的异步处理可以帮助节点服务器减轻负载,假如使用apache直接对外服务,那么出现很多的窄带连接时Apache服务器将会占用大量的内存而不能释放,使用nginx做Apache代理的话,这些窄带连接会被nginx拦截,Apache上就不会堆积过多的请求,这样就减少了相当多的内存占用。这点使用squid也有相同的作用,即使squid本身配置为不缓存,对Apache还是有很大的帮助,lvs就没有这些功能。

7、  nginx能支持http和Email(Email的功能比较少人用),lvs所支持应用会比nginx更多。

具体的应用还得具体分析,如果是比较小的网站(日PV<1000万),用nginx就完全可以了;如果机器充裕,可以用dns轮询;大型网站或者重要的服务,机器数量充裕可以考虑使用lvs。

Nginx的优点:

高并发连接、内存消耗少、配置文件简单、成本低廉、支持rewrite重写规则、内置健康检查功能、节省带宽。

Keepalived是linux下面实现vrrp备份路由的高可靠性运行组件,基于keepalived设计的服务模式能够真正做到主服务器和备份服务器故障时,业务可以瞬间无缝交接。Keepalived的VIP通过其配置文件管理,依靠其自身的进程去确定服务器的存活状态,如果在需要对服务器进行在线维护的话,只需要停掉被维护机器的keepalived服务进程,另外一台服务器就能接管该台服务器的所有应用。

二、四台机器keepalived+nginx+apache+tomcat搭建高可用负载均衡WEB服务器集群

Nginx+Keepalived搭建HA负载均衡Web_第1张图片

1、  准备四台机器:

10.7.12.5   Nginx+Keepalived

10.7.12.6   Nginx+Keepalived

10.7.12.50  Apache

10.7.12.60  Tomcat

10.7.12.7   VIP

   2、10.7.12.5和10.7.12.6配置VIP:

       #cd /etc/sysconfig/network-scripts

       #cp ifcfg-ens192  ifcfg-ens192:0

       #vim ifcfg-ens192:0 内容如下:

     Nginx+Keepalived搭建HA负载均衡Web_第2张图片

       #systemctl restart   network 

  之后效果如下:

  Nginx+Keepalived搭建HA负载均衡Web_第3张图片

3、两台机器分别安装Nginx和Keepalived

#yum  -y install  nginx

#yum  -y install  gcc gcc+ gcc-c++popt-devel  openssl  openssl-devel libssl-dev  libnl-devel  popt-devel

#yum  -y  install kernel  kernel-devel  keepalived

确保有这些文件:

Nginx+Keepalived搭建HA负载均衡Web_第4张图片

 4、10.7.12.5和10.7.12.6配置Nginx和keepalived:

 都执行如下操作:

 #vim /etc/nginx/conf.d/default.conf

 Nginx+Keepalived搭建HA负载均衡Web_第5张图片

#echo “

This is10.7.12.5.

” >  /var/www/html/index.html

#echo “

This is 10.7.12.6.

”  > /var/www/html/index.html //10.7.12.6上执行

10.7.12.5上执行:

#vim  /etc/keepalived/keepalived.conf

Nginx+Keepalived搭建HA负载均衡Web_第6张图片

   10.7.12.6上执行如下:

    #vim /etc/keepalived/keepalived.conf

   Nginx+Keepalived搭建HA负载均衡Web_第7张图片

   主要参数:

      state 参数值:主的是MASTER,备用的是BACKUP;

      priority 参数值:MASTER>BACKUP;

      virtual_router_id:参数值要一致;

  5、测试:

     两台10.7.12.5和10.7.12.6均启动keepalived和nginx

     #systemctl start  keepalived

     #systemctl start  nginx

     验证nginx启动正常:

     访问master:http://10.7.12.5:8088

     访问backup:http://10.7.12.6:8088

     访问VIP:   http://10.7.12.7:8088  //访问VIP时会根据keepalived的配置文件来跳转主机,根据priority的值大小,优先访问priority值大的主机。

   6、测试成功则表示HA已配置成功,接下来就开始配置nginx实现web服务器的负载均衡。

  10.7.12.5和10.7.12.6上配置nginx:

      #vim /etc/nginx/nginx.conf

Nginx+Keepalived搭建HA负载均衡Web_第8张图片

10.7.12.5和10.7.12.6的配置都如上图所示。

7、10.7.12.50上安装Apache:

    #yum  -y install  httpd

    #echo“

This is 10.7.12.50.

”  > /var/www/html/index.html

    #systemctl start httpd

    测试访问:http://10.7.12.50

8、10.7.12.60上安装Tomcat:

   #cd  /usr/src

   #tar  -zxvf jdk1.8.0_131-linux-x64.tar.gz

   #mv  jdk1.8.0_131  /usr/local/jdk1.8.0_131

   #vim  /etc/profile     //文件结尾添加如下内容:

  重新登录bash执行#java  -version 如果成功显示java的版本信息,则表示安装jdk成功。

  安装Tomcat:

 #tar  /usr/src/apache-tomcat-8.5.15.tar.gz

  #mv  apache-tomcat-8.5.15  /usr/local/tomcat

  #cp  /usr/local/tomcat/bin/catalina.sh  /usr/local/tomcat/bin/catalina.sh.bak

  #vim  /usr/local/tomcat/bin/catalina.sh    //文件末尾添加如下两行:

  JAVA_HOME=/usr/local/jdk1.8.0_131

  CATALINA_HOME=/usr/local/tomcat

 #/usr/local/tomcat/bin/catalina.sh start    //启动tomcat服务

  #echo  “

This is10.7.12.60.

” > /usr/local/tomcat/webapps/ROOT/index.html

  测试访问: http://10.7.12.60:8080

9、至此HA负载均衡的Web服务器集群搭建完成:

10、测试:

    Windows客户端修改本地hosts文件添加:

    10.7.12.7   test.likai.com

    访问:http://test.likai.com  //不断刷新可在10.7.12.50和10.7.12.60之间切换。

11、切换策略设置:

    Nginx负载均衡的策略设置:

A、 轮询(默认)

每个请求按时间顺序逐一分配到不通的后端服务器,如果有机器down掉,则自动剔除;

B、 weight

加权轮询,weight和访问比率成正比,用于后端服务器性能不均的情况;

例如:

upstream  a.com {

   server 10.7.12.50weight=10;

   server 10.7.12.60weight=20;

}

C、 ip_hash

每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。例如:

 upstream  a.com {

ip_hash;

server 10.7.12.50:80;

server 10.7.12.60:8080;

}

D、 fair(第三方)

按后端服务器的响应时间来分配请求,响应时间短的优先分配。例如:

  upstream  a.com {

  serverserver1;

 server server2;

 fair;

}

E、  url_hash(第三方)

按访问url的hash结果来分配请求,是每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。例如:在upstream中加入hash语句,server语句中不能写入weight等其他的参数,hash_method是使用的hash算法:

  upstream resinserver  {

   server  squid1:3128;

  server  squid2:3128;

  hash  $request_url;

  hash_method  crc32;

}

F、  upstream resinserver {#定义负载均衡设备的IP及设备状态

ip_hash;

 server 10.7.12.50:80 down;

 server 10.7.12.60:80 weight=2;

 server 10.7.12.70:80 1;

 server 10.7.12.80:80 backup;

}

            down:表示当前server暂时不参与负载均衡;

            weight:默认为1,weight越大负载越大;

            max_fails:允许请求失败的次数,默认为1;

            backup:其它非backup机器down或mang时才请求backup机器。

你可能感兴趣的:(Web架构)