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

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


[size=medium]第一章 安装配置nginx[/size]
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 下新增一个文件
直接访问这个文件

[size=medium]2 安装memcached[/size]

 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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

annan211

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值