标签:网络技术
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
二 创建测试页面:在huangguanhua2和huangguanhua3两台虚拟机上分别执行以下操作
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之间切换,关掉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 也没有丢掉。
本文出自 “huangguanhua” 博客,请务必保留此出处http://huangguanhua.blog.51cto.com/11827742/1825361
redhat6.5搭建nginx+tomcat负载均衡,memcached高速缓存
标签:网络技术
原文地址:http://huangguanhua.blog.51cto.com/11827742/1825361