码迷,mamicode.com
首页 > 系统相关 > 详细

redhat6.5搭建nginx+tomcat负载均衡,memcached高速缓存

时间:2016-07-11 19:31:18      阅读:204      评论:0      收藏:0      [点我收藏+]

标签:网络技术

nginx简介:Nginx是一款轻量级的Web 服务器/反向代理服务器电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。由俄罗斯的程序设计师Igor Sysoev所开发,供俄国大型的入口网站及搜索引擎Rambler使用。其特点是占有内存少,并发能力强事实上nginx的并发能力确实在同类型的网页服务器中表现较好,广泛应用于互联网企业

nginx的特点:(1)更快(2)高扩展性(3)高可靠性(4)低内存消耗(5)单机支持10万以上的并发连接(6)具有热部署的功能

nginx和apache相比

nginx的优点

  • (1)轻量级,同样起web 服务,比apache 占用更少的内存及资源(2)抗并发,nginx 处理请求是异步非阻塞的,而apache 则是阻塞型的,在高并发下nginx 能保持低资源低消耗高性能(3)高度模块化的设计,编写模块相对简单等等

  • apache的优点:

  • (1)rewrite ,比nginx 的rewrite 强大(2)模块超多,基本上能想到的功能都可以实现(3)少bug,nginx的bug相对较多

  • 少bug ,nginx 的bug 相对较多,而且功能强大且稳定等等。

  • 总的来说,两者最核心的区别在于 apache 是同步多进程模型,一个连接对应一个进程,而 nginx 是异步的,多个连接(万级别)可以对应一个进程

  • 实验环境:

  •              redhat6.5的虚拟机三台:

                                                huangguanhua1:172.25.50.100  内存1024M CPU双核

                                                huangguanhua2:172.25.50.150  内存512M  CPU单核

                                                huangguanhua3:172.25.50.200  与上台配置一样

注:虚拟机中的selinux模式为disabled  iptables关闭

实验过程:

首先在huangguanhua1虚拟机上执行以下操作:

一.Nginx的编译与安装:

                            tar  -xvf  nginx-1.9.14.tar.gz    #解压安装包


技术分享

注:编译nginx要在解压中的目录进行编译,编译过程中需要安装gcc编译器,需要安装yum install pcre-devel,yum install openssl-devel解决编译安装时所依赖的关系,才能完成安装。编译时还需要关闭debug模式,该配置文件为/mnt/nginx-1.9.14/auto/cc/gcc,进去该文件把debug模式注释掉,为了安全起见还需要更改nginx的版本信息,配置文件为/mnt/nginx-1.9.14/src/core/nginx.h

                                make && make install  #检查编译是否正确,正确后进行安装

                                vim   /etc/profile    将  /usr/local/nginx/sbin加入环境变量

                                 source    /etc/profile   #使文件生效

添加nginx用户,使之运行nginx服务

                               groupadd -g 500 nginx

                                useradd -u 500 -g 500 -s /sbin/nologin nginx

配置nginx基本信息:vim /usr/local/nginx/conf/nginx.conf

技术分享

注:因为该台虚拟机的cpu为双核,所以worker_processes 2;event工作模式为use epoll;基本配置完成。

                      nginx -t  #检查配置文件是否正确

                      nginx  #运行nginx服务           nginx  -s  reload #加载

测试:在浏览器中输入huangguanhua1虚拟机的ip地址172.25.50.100

技术分享

二 创建测试页面huangguanhua2huangguanhua3两台虚拟机上分别执行以下操作

                echo server2 > /var/www/html/index.html

                echo server3 > /var/www/html/index.html

注:两台虚拟机都已经安装了httpd 而且都启动了httpd服务,防火墙要记得关掉切记,不然在浏览器中访问不到测试页面。

huangguanhua1虚拟机中:添加以下图片中的内容

技术分享

nginx  -t #检查配置文件是否错误

nginx  -s  reload #加载nginx服务

测试:在浏览器中输入huangguanhua1虚拟机的ip地址172.25.50.100

测试效果链接地址:http://pan.baidu.com/s/1jHQmOdw

技术分享

注:在浏览器中进行测试,利用F5键进行刷新,按F5键进行刷新会显示server2一次server3一次依次循环,如果一台客户端挂断,按F5刷新只会显示另一台客户端的信息,如果挂掉的客户端重新好的,server2和server3又会轮询显示。

ip_hash

          vim /usr/local/nginx/conf/nginx.conf

技术分享

upstream westos段下添上ip_hash; #捆绑ip,刷新网页不轮询,一台客户端挂了,再次刷新另一台不会不补上,只显示挂了那台客户端的信息,即同一个ip访问的是同一台服务器,关闭一台后访问另一台。

                                         nginx   -t

                                         nginx  -s   reload   

测试:打开浏览器访问172.25.50.100       测试效果链接地址http://pan.baidu.com/s/1i5dgds5

sticky模式:使用nginx sticky实现负载均衡

                                   重新编译nginx   加入sticky模块

                                    nginx   -s    stop   #先关掉nginx服务

                                   cd  /mnt/

                                    tar  -xvf  nginx-sticky-module-1.0.tar.gz  -C  nginx-1.9.14  # nginx-sticky-module-1.0.tar.gz 解压到nginx-1.9.14目录下

                                    cd  nginx-1.9.14/   

                                     make clean  #清除之前的编译

./configure  --prefix=/usr/local/nginx  --usrer=nginx  --group=nginx  --add-module=nginx-sticky-module-1.0/

                                        编译成功后:make && make install #安装

vim  /usr/local/nginx/conf/nginx.conf

                                                                        

                注释掉ip_hash;那行        添加sticky;

                                     nginx   -t 

                                     nginx  -s  reload 

tomcat简介Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选

huangguanhua2和huangguanhua2两台虚拟机上执行:

在huangguanhua2虚拟机上

                                              cd  /mnt/

                                  sh  jdk-6u26-linux-x64.bin  

                                  mv jdk1.6.0_26/  /usr/local

vim /etc/profile

export JAVA_HOME=/usr/local/jdk

export CLASSPATH=:$JAVVA_HOAME/lib

export PATH=$PATH:$JAVA_HOME/bin

source /etc/profile

ln -s /usr/local/jdk1.6.0_26/ java

tar zxf apache-tomcat-7.0.37.tar.gz -C /usr/local

ln -s /usr/local/apache-tomcat-7.0.37/ tomcat

scp -r /usr/local/java root@172.25.50.200:/usr/local

scp -r /usr/local/tomcat root@172.25.50.200:/usr/local

scp -r /etc/profile root@172.25.50.200:/etc/

huangguanhua3虚拟机上

                        source /etc/profile

制作测试页:vim /usr/local/tomcat/webapps/ROOT/test.jsp

server2 The time is:<%=new java.util.Date() %>  huangguanhua3上也添加上测试页 server3 The time is:<%=new java.util.Date() %>

然后 cd /usr/local/tomcat       ./start.sh

huangguanhua1虚拟机上:vim /usr/etc/nginx/conf/nginx.conf

技术分享

注释掉ip_hash;   添加sticky;

技术分享

                nginx -t

                  nginx  -s  reload

测试:在浏览器上访问172.25.50.100/test.jsp 

测试效果页面会在server2-The time与server3-The time之间切换关掉huangguanhua2tomcat,只会显示huangguanhua3 /usr/local/tomcat/webapps/ROOT/test.jsp的内容。

memcached:memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态、数据库驱动网站的速度。

交叉存储原理:tomcat-1session存储在memcaached-2只有当memcached2不可用时,tomcat1才将session存储在memcached使用这种配置的好处是当tomcat1memcached1同时崩掉也不会丢失session会话,避免单点故障。

在huangguanhua2和huangguanhua3虚拟机上安装执行:

                                                                                yum install memcached -y

                                                                                /etc/init.d/memcached start

                                                                                 /usr/local/tomcat/bin/shutdown.sh

把以下这些这些软件放在/usr/local/tomcat/lib目录下:

                                                                 

  kryo-1.03.jar
        kryo-serializers-0.8.jar
        memcached-2.5.jar
        memcached-session-manager-1.5.1.jar

        memcached-session-manager-tc7-1.5.1.jar
        minlog-1.2.jar
        msm-kryo-serializer-1.5.1.jar
        reflectasm-0.9.jar

然后  vim /usr/local/tomcat/conf/context.xml


 <Context>
            ......
        <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
        memcachedNodes="n1:172.25.44.20:11211,n2:172.25.44.30:11211"
        failoverNodes="n1"
        #在 node2 上此项设置为“n2”
        requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
        transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
        />
        </Context>

        以下为测试页面,保存到/usr/local/tomcat/webapps/ROOT/test.jsp

        <%@ page contentType="text/html; charset=GBK" %>
        <%@ page import="java.util.*" %>
        <html><head><title>Cluster App Test</title></head>
        <body>
        Server Info:
        <%
        out.println(request.getLocalAddr() + " : " + request.getLocalPort()+"<br>");%>
        <%
        out.println("<br> ID " + session.getId()+"<br>");
        String dataName = request.getParameter("dataName");
        if (dataName != null && dataName.length() > 0) {
        String dataValue = request.getParameter("dataValue");
        session.setAttribute(dataName, dataValue);
        }
        out.print("<b>Session list</b>");
        Enumeration e = session.getAttributeNames();
        while (e.hasMoreElements()) {
        String name = (String)e.nextElement();
        String value = session.getAttribute(name).toString();
        out.println( name + " = " + value+"<br>");
        System.out.println( name + " = " + value);
        }
        %>
        <form action="test.jsp" method="POST">
        name:<input type=text size=20 name="dataName">
        <br>
        key:<input type=text size=20 name="dataValue">
        <br>
        <input type=submit>
        </form>
        </body>
        </html>

/usr/local/tomcat/bin/start.sh  #开始tomcat服务
访问http://172.25.50.100/test.jsp   ,不同的主机访问时会调度到不同的 tomcat 实例上处理
来自同一主机的请求会交给同一个 tomcat 实例处理,此时你 down 掉当前正在响应的 tomcat 实
例,nginx 会自动把用户的请求调度到另一个 tomcat 实例上,同时 session 也没有丢掉。



本文出自 “huangguanhua” 博客,请务必保留此出处http://huangguanhua.blog.51cto.com/11827742/1825361

redhat6.5搭建nginx+tomcat负载均衡,memcached高速缓存

标签:网络技术

原文地址:http://huangguanhua.blog.51cto.com/11827742/1825361

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!