电子商务网站基础架构 nginx + memcached + tomcat + squid 集群

标签: 电子商务 网站 基础 | 发表时间:2014-11-19 11:48 | 作者:annan211
出处:http://www.iteye.com
本文中 包含 nginx memcached tomcat 集群 的安装和配置
wget url 为下载所需的资源文件方式,也可以通过 VMware Tools 工具载入,
如何安装 VMwareTools 参考本博客或者其他资料
后面最后一章节是安装配置squid 在项目第一期不作要求。




第一章 安装配置nginx
1 安装nginx
   1 下载解压nginx
①: wget http://nginx.org/download/nginx-1.7.7.tar.gz
	 ②: tar zxvf nginx-1.7.7.tar.gz 


  Nginx 依赖很多软件(gcc、g++、make、libz-dev、libbz2-dev、libreadline-dev)
  所以下面我们就来安装这些依赖包
 yum  -y install gcc gcc-c++ autoconf automake
	  yum -y install zlib zlib-devel openssl openssl-devel pcre pcre-devel



  安装此模块之前需要先获取root权限,不然会提示 you need to be root to perform this command
  获取权限的方法是  终端 输入su 回车,输入密码

2 建立用户组(可以跳过这一步)
 
groupadd -r nginx
	  man useradd
	  useradd -s /sbin/nologin -g nginx -r nginx 
	  id nginx


3 需要pcre库支持 pcre是一个正则表达式库
下载
 wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.36.tar.gz

解压
 tar -zxvf pcre-8.36.tar.gz 

进入目录安装
 cd pcre-8.36
	 ./configure
	 make && make install


以上准备工作已经完成。以下开始进入安装。

 cd nginx-1.7.7
	 ./configure
	 make && make install


上面的步骤完成  nginx就已经安装好了。
因为我们使用的是默认的 configure,所以会安装到/usr/local/nginx目录。相应的配置文件是/usr/local/nginx/conf/nginx.conf。
因为前面建立的是nginx 用户,所以到
cd usr/local/nginx/conf/nginx.conf 文件 就是nginx配置文件了。

	使用命令 ps  -ef | grep nginx  
	root 48344 1 0 00:41 ? 00:00:00 nginx:master process /usrlocal/nginx/sbin/nginx


关闭nginx (前提切入 root 用户,su)
	kill -quit 48344

	nginx 重启命令
	/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
	或者 先杀死 在启动
	kill -quit 主进程号


不间断重启nginx
kill -HUP 主进程号

可以查看具体的安装目录
查看 80 端口是否被监听 netstat -tulnp | grep :80
	卸载nginx
	yum remove nginx

	(chmod -R 777 nginx-1.7.7 将所有文件夹设置为可读可写)


可以使用下面 的语句块 实现多台虚拟主机的配置
下面是 最终的配置文档形式
#user  www www;
	worker_processes  1;
	pid     /usr/local/nginx/logs/nginx.pid;
	events {
		use epoll;
		worker_connections  1024;
	}
	http {
		include       mime.types;
		default_type  application/octet-stream;
		include     proxy.conf;  #一定要指向代理文件
		sendfile        on;
		tcp_nopush      on;
		keepalive_timeout  65;
		
		# 这里实现轮询
		upstream www.server80.com{ 
		   server 127.0.0.1:8080 weight=1;
		   server 127.0.0.1:9080 weight=1;
		}
		
		##cache 缓存部分 有些设置在代理文件中##
		  proxy_temp_file_write_size 128k;
		  proxy_temp_path /home/temp_dir;#如果页面允许我们缓存 那么就会在这个路径下 这个是临时目录
		  ## 如果页面允许我们缓存 那么就会在这个路径下
		  proxy_cache_path /home/cache levels=1:2 keys_zone=cache_one:200m inactive=1d max_size=30g;
		##end##
  
		server {
		 #listen   8081;
		 server_name   www.server80.com;
		 location /{
		   root html;
		   index  index.html  index.jsp index.htm;
		   proxy_redirect off;
		   proxy_set_header Host $host; #这一句至关重要
		   proxy_set_header X-Real-IP $remote_addr;
		   proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
		   proxy_pass  http://www.server80.com; # 转向tomcat
		 }
		 ## 缓存部分
		 location ~ .*\.(gif|jpg|png|htm|html|css|js|flv|ico|swf)(.*) {
              proxy_pass http://www.server80.com;
              proxy_redirect off;
              proxy_set_header Host $host;
              proxy_cache cache_one;
              proxy_cache_valid 200 302 1h;
              proxy_cache_valid 301 1d;
              proxy_cache_valid any 1m;
              expires 30d;
        }
		access_log /usr/local/nginx/logs/www.server80.com.log;
	  }

	}


下面是nginx.conf同目录的 代理文件proxy.conf 的最终形式


proxy_connect_timeout 300s;
	proxy_send_timeout   900;
	proxy_read_timeout   900;
	proxy_buffer_size    32k;
	proxy_buffers     4 32k;
	proxy_busy_buffers_size 64k;
	proxy_redirect     off;
	proxy_hide_header  Vary;
	proxy_set_header   Accept-Encoding '';
	proxy_set_header   Host   $host;
	proxy_set_header   Referer $http_referer;
	proxy_set_header   Cookie $http_cookie;
	proxy_set_header   X-Real-IP  $remote_addr;
	proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
	#后端的Web服务器可以通过X-Forwarded-For获取用户真实IP


检测nginx 是否安装成功,可以在安装路径 html 下新增一个文件
直接访问这个文件

2 安装memcached
 
 wget http://www.danga.com/memcached/dist/memcached-1.2.0.tar.gz
	# wget http://www.monkey.org/~provos/libevent-1.2.tar.gz

	# ./configure --prefix=/usr
	# make
	# make install

	测试libevent 
	.测试libevent是否安装成功:
	# ls -al /usr/lib | grep libevent



安装memcached
     转向其解压路径 直接安装
cd memcached-1.2.0
./configure --with-libevent=/usr

# make
# make install

安装完成后会把memcached放到 /usr/local/bin/memcached ,


测试是否成功安装memcached:
# ls -al /usr/local/bin/mem*

启动memcached

/usr/local/bin/memcached -d -m 10 -u root -l 127.0.0.1 -p 11211 -c 256 -P /usr/local/memcached.pid
    /usr/local/bin/memcached -d -m 10 -u root -l 127.0.0.1 -p 11212 -c 256 -P /usr/local/memcached.pid


参数:
	-p <num>      设置TCP端口号(默认不设置为: 11211)
	-U <num>      UDP监听端口(默认: 11211, 0 时关闭) 
	-l <ip_addr>  绑定地址(默认:所有都允许,无论内外网或者本机更换IP,有安全隐患,若设置为127.0.0.1就只能本机访问)
	-d                    以daemon方式运行
	-u <username> 绑定使用指定用于运行进程<username>
	-m <num>      允许最大内存用量,单位M (默认: 64 MB)
	-P <file>     将PID写入文件<file>,这样可以使得后边进行快速进程终止, 需要与-d 一起使用


	可以启动多个memcached 当一台memcached宕机之后  另外一台继续工作,试验证明。


停止memcached
先使用 netstat -ntpl 查看 memcached 的pid
使用命令kill pid 杀死进程


测试
telnet 127.0.0.1 12111

如果出现 bash:telnet:command not found
安装一下即可
yum -y insatll telnet
 
 
3 安装多个tomcat
 
① 安装 jdk
首先卸载默认的jdk1.42
rpm -qa | grep gcj                                          
libgcj-devel-3.4.6-3
java-1.4.2-gcj-compat-1.4.2.0-27jpp             
libgcj-3.4.6-3

# yum -y remove java-1.4.2-gcj-compat

② 下载jdk
http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html
或者
wget http://download.oracle.com/otn-pub/java/jdk/7u71-b14/jdk-7u71-linux-x64.tar.gz
        http://download.oracle.com/otn-pub/java/jdk/7u71-b14/jdk-7u71-linux-x64.tar.gz

解压 tar -zxvf jdk1.7.0_71-xxxxx.tar.gz
重命名 mv jdk1.7.0_71-xxxxx.tar.gz jdk1.7.0_71

   ③ 写入环境变量 /etc/profile 最后加入如下内容
export JAVA_HOME=/usr/local/jdk1.7.0_71
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/rt.jar
检测jdk 安装成功与否  java -version

   ④ 导入tomcat 压缩包  apache-tomcat-7.0.57.tar.gz
解压 tar -zxvf apache-tomcat-7.0.57.tar.gz
重命名 mv apache-tomcat-7.0.57.tar.gz tomcat7-1

复制一份tomcat
cp -r tomcat7-1 tomcat7-2

修改
tomcat7-2 中的文件
   1 conf/server.xml
        修改三个监听端口
<Server port="8005" shutdown="SHUTDOWN">
改成
<Server port="9005" shutdown="SHUTDOWN">

<Connector port="8080" protocol="HTTP/1.1"
   connectionTimeout="20000"
   redirectPort="8443" />
改成
<Connector port="9080" protocol="HTTP/1.1"
   connectionTimeout="20000"
   redirectPort="8443" />

<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
改成
<Connector port="9009" protocol="AJP/1.3" redirectPort="8443" />

使用jvmRoute 区分不同的tomcat ,目的是1 在验证页面上可以观察的很清晰,2 可以实现
不同的session 使用不同的tomcat处理 减轻服务器压力。

<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">
有多个tomcat的时候  可以设置jvmRoute="tomcat1,2,3,4....."

   2  conf/context.xml(为了与memcached 集成实现session 同步,需要在两个tomcat中都修改此文件)
      1) 在 Context 节点下 加入如下代码
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"     
                    memcachedNodes="n1:localhost:11211 "     
                    requestUriIgnorePattern=".*\.(png|gif|jpg|css|js){1}quot"  
                    sessionBackupAsync="false"     
                    sessionBackupTimeout="100"     
                    transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory"     
                    copyCollectionsForSerialization="false"     
                />
          2) 我们需要一系列的jar包来实现session同步
    asm-3.2.jar
javolution-5.4.3.1.jar
kryo-1.04.jar
kryo-serializers-0.8.jar
memcached-session-manager-1.6.3.jar
memcached-session-manager-tc7-1.6.3.jar
minlog-1.2.jar
msm-javolution-serializer-1.6.3.jar
msm-kryo-serializer-1.6.3.jar
msm-xstream-serializer-1.6.3.jar
reflectasm-0.9.jar
spymemcached-2.8.4.jar

这些jar 会打包附在本博文附件
需要将这些jar 分别 复制到tomcat/bin 目录
linux 可以使用命令
       cp -frap jar/* tomcat7-1/lib  完成     */
      
   ⑤ 为了更加通用和简单易懂 以及后期添加更多的tomcat集群 这里也对/etc/profile 文件进行修改
        #tomcat7-1
CATALINA_BASE=/usr/local/tomcat7-1
CATALINA_HOME=/usr/local/tomcat7-1
TOMCAT_HOME=/usr/local/tomcat7-1
export CATALINA_BASE CATALINA_HOME TOMCAT_HOME

#tomcat7-2
CATALINA_2_BASE=/usr/local/tomcat7-2
CATALINA_2_HOME=/usr/local/tomcat7-2
TOMCAT_2_HOME=/usr/local/tomcat7-2
export CATALINA_2_BASE CATALINA_2_HOME TOMCAT_2_HOME
        
这里设置的变量值 需要在tomcat 安装目录下引用

现在打开tomcat7-1/bin/catalina.sh
    export JAVA_HOME=/usr/local/jdk1.7.0_71
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=$JAVA_HOME/lib
export CATALINA_HOME=$CATALINA_HOME
export CATALINA_BASE=$CATALINA_BASE

现在打开tomcat7-2/bin/catalina.sh
    export JAVA_HOME=/usr/local/jdk1.7.0_71
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=$JAVA_HOME/lib
export CATALINA_HOME=$CATALINA_2_HOME
export CATALINA_BASE=$CATALINA_2_BASE    

修改 tomcat 的配置文件
  tomcat7-1的配置文件和
  tomcat7-2的配置文件修改如下:
修改 tomcat7-2/bin  下的文件:startup.sh 和 shutdown.sh(加入的内容一样),在文件中加入以下内容:

tomcat7-1的配置文件修改如下:(startup.sh 和 shutdown.sh)
export JAVA_HOME=/usr/java/jdk1.7.0_45
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib:$JAVA_HOME/bin
export CATALINA_HOME=$CATALINA_HOME 
export CATALINA_BASE=$CATALINA_BASE

tomcat7-2的配置文件修改如下:(startup.sh 和 shutdown.sh)
export JAVA_HOME=/usr/java/jdk1.7.0_45
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib:$JAVA_HOME/bin
export CATALINA_HOME=$CATALINA_2_HOME 
export CATALINA_BASE=$CATALINA_2_BASE


4 etc/hosts 文件添加域名 www.server80.com

5 测试项目

在eclipse 下新建cluster web项目,
其中有两个页面
cluster.jsp
 
<%@ page contentType="text/html; charset=UTF-8" %>
<%@ page import="java.util.*" %>
<%       
  response.setHeader("Pragma","Public");    
  response.setHeader("Cache-Control","Public");      
  response.setDateHeader("Expires",10);   
  %> 
<html><head><title>Cluster Test</title></head>
<body>
<%
  //HttpSession session = request.getSession(true);
  System.out.println(session.getId());
  out.println("<br> SESSION ID:" + session.getId()+"<br>");  
  // 如果有新的请求,则添加session属性
  String name = request.getParameter("name");
  if (name != null && name.length() > 0) {
     String value = request.getParameter("value");
     session.setAttribute(name, value);
  }  
    out.print("<b>Session setting success !!!</b>");   
%>
</body>
</html>

cluster2.jsp

<%@ page contentType="text/html; charset=UTF-8" %>
<%@ page import="java.util.*" %>
<%       
  response.setHeader("Pragma","Public");    
  response.setHeader("Cache-Control","Public");      
  response.setDateHeader("Expires",10);   
  %> 
<html><head><title>Cluster Test</title></head>
<body>
<%
  //HttpSession session = request.getSession(true);
  System.out.println(session.getId());
  out.println("<br> SESSION ID:" + session.getId()+"<br>");     
    out.print("<b>Session List:</b>");  
    Enumeration<String> names = session.getAttributeNames();
    while (names.hasMoreElements()) {
        String sname = names.nextElement(); 
        String value = session.getAttribute(sname).toString();
        out.println( sname + " = " + value+"<br>");
        System.out.println( sname + " = " + value);
   }
%>
</body>
</html>


页面 1 用于设置session
页面2  用于获取session

当启动 nginx memcached 和 两个 tomcat
访问 www.server80.com/cluster/cluster.jsp?name=kk&value=pp
请求将以轮询的形式访问分布式状态的两个tomcat
访问 www.server80.com/cluster/cluster2.jsp

页面上  我们看到我们的请求在以轮询的方式访问两个tomcat 但是sessionID是不会变化的,
这就说明 虽然我们访问的是不同的tomcat 但是是同一个session ,到此,session同步完成。


本章节安装配置squid 项目第一期不作要求
配置 suqid(多台,多台squid(不同路径) 集群 一台 nginx)

参照  http://blog.yunvi.com/html/160.html

下载 wget http://www.squid-cache.org/Versions/v3/3.4/squid-3.4.9-20141113-r13188.tar.gz

解压 tar -zxvf squid-3.4.9-20141113-r13188.tar.gz

重命名 mv squid-3.4.9-20141113-r13188 squid-3.4.9

安装

cd suqid-3.4.9

./configure --prefix=/usr/local/squid \
--localstatedir=/var/squid \
--enable-stacktraces
make && make install

优化linux内核
linux内核的优化根据具体情况来定,其中比较重要的参数有:
net.ipv4.tcp_max_tw_buckets = 6000
表示允许的最多timewait数量,这个值根据服务器的情况来定,不建议太高
net.ipv4.ip_local_port_range = 1024    65000
允许tcp连接打开的端口范围,上面指定为1024-65000
参考优化参数:(将此参数插入到/etc/sysctl.conf文件中)

运行命令使其生效:
sysctl -p

创相关目录并启动squid

mkdir /var/squid
chown -R squid.squid /var/squid
ln -s /usr/local/squid/sbin/squid /usr/sbin/
ln -s /usr/local/squid/bin/squidclient /usr/bin/
ulimit -SHn 102400
squid -z
squid

如果出现没有权限
直接使用 chmod 777 /usr/local/squid/var/logs/cache.log


查看squid服务是否正常启动,端口是否打开
netstat -an | grep 80

也可以用 netstat -ntpl 查看




已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [电子商务 网站 基础] 推荐:

电子商务网站基础架构 nginx + memcached + tomcat + squid 集群

- - 企业架构 - ITeye博客
本文中 包含 nginx memcached tomcat 集群 的安装和配置. wget url 为下载所需的资源文件方式,也可以通过 VMware Tools 工具载入,. 如何安装 VMwareTools 参考本博客或者其他资料. 后面最后一章节是安装配置squid 在项目第一期不作要求. 第一章 安装配置nginx.

电子商务网站之信任度

- robin - 所有文章 - UCD大社区
记得《赢在中国》中,郭凡生对创业者说过的一句话:你们需要的不是钱,而是投资者对你的信任. 在虚拟的电子商务世界,信任显得尤其重要,因为如果交易发生,我们必然会从虚拟走向现实. 在淘宝网,我有几年的购物经历,我最看重的三个方面依次是:皇冠或钻石卖家、本城市、价格. 其实,卖自己,也就是建立和客户的信任关系.

电子商务网站RFM分析

- - 钛媒体网
根据美国数据库营销研究所Arthur Hughes的研究,客户数据库中有三个神奇的要素,这三个要素构成了数据分析最好的指标:. 最近一次消费(Recency). 消费频率(Frequency). 消费金额(Monetary). RFM分析多用于传统营销、零售业等领域,适用于拥有多种消费品或快速消费品的行业,只要任何有数据记录的消费都可以被用于分析.

电子商务网站收银流程设计基本指引

- jary - June&#39;s blog
原文作者选取了15个电子商务网站,包括apple,新蛋,沃尔玛,Zappos等,对其收银系统进行考察,总结了11条设计的基本方针. 简单的翻译文章的要点,有删节,详见原文. 如果想要更详细的内容,可以购买原作者的这份收费报告(求分享文档). 原文链接:Fundamental Guidelines Of E-Commerce Checkout Design.

设计电子商务网站的10个技巧

- 雄杰 - 所有文章 - UCD大社区
        导读:随着先进科学技术的应用,人们无需外出逛几个小时来“猎”东西,直接坐在家里就可以购买所需商品,支付服务费用. 人们习惯了周到的服务和漂亮的橱窗,对网店的选择也不例外. 因此,电子商务网站的设计就是一切的关键了. 如果你想做一个网店,你最应该考虑如何设计你的电子商务网站从中获利. 你可以在市场上以合理的价格出售最好的商品,但在网络上,如果你的网站设计简陋,即使商品质量非常棒,你的销量也会大打折扣.

新浪推奢侈品B2C网站 布局电子商务

- CarlNERV - GeekPark 捕风捉影
8月11日,新浪正式推出奢侈品B2C网站(l.sina.com.cn)“新浪奢品”,囊括超50个国际一线奢侈品品牌,Sku总数过千. 这是继网易、腾讯后,门户网站再次在奢侈品电商领域布局. “新浪奢品”官方信息显示,包括宝格丽、香奈儿、迪奥、芬迪、华伦天伦等在内的超过50个奢侈品品牌产品已经正式上线.

45个创意的电子商务网站设计

- emilo - 创意悠悠花园
今天分享:45个创意的电子商务网站设计,希望其中有你喜欢的,或者可以给你带来灵感的. Read the rest of 45个创意的电子商务网站设计 (76 words). © emilo for 创意悠悠花园, 2011. Post tags: 创意, 电子商务, 网站设计. 如果你喜欢创意悠悠花园的文章,可以收听我们@emilo,或者订阅我们的rss.

二线电子商务网站流量分析

- Eric - 月光博客
  本文并不想分析那些一线知名电子商务网站,而是从一些不知名的电商网站进行分析,看看这些小电商网站的流量来源到底是哪里. 以下是这些天我分析和查询的一些流量较高的二线电子商务网站,其流量数量,收录数量,搜索关键字来源,以及其网站流量排名的分析,分析时间是今年年初.   在网站流量分析报告中,主要以Alexa排名为基准,排列对比二线的电子商务网站,在电子商务市场竞争白热化的今天,如果不烧钱做广告做营销,是很难获取大批用户的,但是,这些二线电商网站是如何积累流量的呢.

38个漂亮的电子商务网站设计

- emilo - 创意悠悠花园
在我的印象中,电子商务可以简单的理解为利用网络进行产品销售的一种行为. 今天分享:38个漂亮的电子商务网站设计,希望其中有你喜欢的或者可以给你带来灵感的. Read the rest of 38个漂亮的电子商务网站设计 (21 words). © emilo for 创意悠悠花园, 2011. Post tags: 漂亮, 电子商务, 网站设计.

谷歌关闭电子商务网站Boutiques.com(图)

- ZeeJee - 焦点新闻-新浪科技
谷歌关闭电子商务网站Boutiques.com   新浪科技讯 北京时间9月24日上午消息,谷歌本周宣布将关闭电子商务网站Boutiques.com,并将其整合到谷歌产品搜索服务中.   未来,Boutiques.com的流量将被重定向至谷歌产品搜索,全部的迁移工作将于10月14日完成.