设为首页 收藏本站
查看: 866|回复: 0

[经验分享] redhat6.5搭建nginx+tomcat负载均衡,memcached高速缓存

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2016-7-12 08:58:38 | 显示全部楼层 |阅读模式
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    #解压安装包

QQ截图20160712085719.jpg
注:编译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
QQ截图20160712085724.jpg
注:因为该台虚拟机的cpu为双核,所以worker_processes 2;event工作模式为use epoll;基本配置完成。
                      nginx -t  #检查配置文件是否正确
                      nginx  #运行nginx服务           nginx  -s  reload #加载
测试:在浏览器中输入huangguanhua1虚拟机的ip地址172.25.50.100
QQ截图20160712085730.jpg
二 创建测试页面:在huangguanhua2和huangguanhua3两台虚拟机上分别执行以下操作

                echo server2 > /var/www/html/index.html
                echo server3 > /var/www/html/index.html
注:两台虚拟机都已经安装了httpd 而且都启动了httpd服务,防火墙要记得关掉切记,不然在浏览器中访问不到测试页面。
在huangguanhua1虚拟机中:添加以下图片中的内容
QQ截图20160712085736.jpg
nginx  -t #检查配置文件是否错误
nginx  -s  reload #加载nginx服务
测试:在浏览器中输入huangguanhua1虚拟机的ip地址172.25.50.100
测试效果链接地址:http://pan.baidu.com/s/1jHQmOdw
QQ截图20160712085740.jpg
注:在浏览器中进行测试,利用F5键进行刷新,按F5键进行刷新会显示server2一次server3一次依次循环,如果一台客户端挂断,按F5刷新只会显示另一台客户端的信息,如果挂掉的客户端重新好的,server2和server3又会轮询显示。

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

QQ截图20160712085745.jpg
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
QQ截图20160712085753.jpg
注释掉ip_hash;   添加sticky;
QQ截图20160712085757.jpg
                nginx -t

                  nginx  -s  reload
测试:在浏览器上访问172.25.50.100/test.jsp
测试效果:页面会在server2-The time与server3-The time之间切换,关掉huangguanhua2的tomcat,只会显示huangguanhua3的 /usr/local/tomcat/webapps/ROOT/test.jsp的内容。
memcached:memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态、数据库驱动网站的速度。

交叉存储原理:tomcat-1将session存储在memcaached-2上,只有当memcached2不可用时,tomcat1才将session存储在memcached上。使用这种配置的好处是当tomcat1和memcached1同时崩掉,也不会丢失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 也没有丢掉。



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-242854-1-1.html 上篇帖子: Linux--centos6.5 安装nginx+tomcat 服务器整合 下篇帖子: 利用Nginx sub模块对网页内容进行替换
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表