nginx+tomcat+memcached集群部署

1.windows环境下 下载nginx,tomcat7  安装 

nginx  所有版本:http://nginx.org/en/download.html

windows版本

http://nginx.org/download/nginx-1.8.0.zip

tomcat7 所有版本:http://tomcat.apache.org/download-70.cgi

windows64版本:

http://mirrors.cnnic.cn/apache/tomcat/tomcat-7/v7.0.63/bin/apache-tomcat-7.0.63-windows-x64.zip


2.修改nginx,tomcat7配置

nginx-1.2.9\conf  nginx.conf

修改成

   #设定负载均衡的服务器列表,可以设置多个upstream,但mysvr名字要区分
    upstream myClusterServer1 {
       #weigth参数表示权值,权值越高被分配到的几率越大
        #本机上的Squid开启3128端口

	   #ip_hash;
	   server 127.0.0.1:8081 weight=5;
	   server 127.0.0.1:8082 weight=5;
	   server 127.0.0.1:8083 backup;
    }
    
    
      server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
            index  index.html index.htm;
			 #请求转向mysvr 定义的服务器列表
           proxy_pass    http://myClusterServer1;
           proxy_redirect default;
            #跟代理服务器连接的超时时间,必须留意这个time out时间不能超过75秒,当一台服务器当掉时,过10秒转发到另外一台服务器。
           proxy_connect_timeout 5;
        }

使用了 ip_hash 就会根据客户的ip分配服务器,会有黏性,也能解决session问题,这种方式就相当于F5。我这里是注释掉的,使用的是非黏性session。

windows和Linux下配置Nginx负载的写法一样,故不分开介绍.

Nginx负载均衡一些基础知识:

nginx 的 upstream目前支持 4 种方式的分配 
1)、轮询(默认) 
      每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。 
2)、weight 
      指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。 
2)、ip_hash 
      每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。  
3)、fair(第三方) 
      按后端服务器的响应时间来分配请求,响应时间短的优先分配。  
4)、url_hash(第三方)

配置:

在http节点里添加:

#定义负载均衡设备的 Ip及设备状态 

upstream myServer {   

    server 127.0.0.1:9090 down; 
    server 127.0.0.1:8080 weight=2; 
    server 127.0.0.1:6060; 
    server 127.0.0.1:7070 backup; 
}

在需要使用负载的Server节点下添加

proxy_pass http://myServer;

upstream 每个设备的状态:

down 表示单前的server暂时不参与负载 
weight  默认为1.weight越大,负载的权重就越大。 
max_fails :允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream 模块定义的错误 
fail_timeout:max_fails 次失败后,暂停的时间。 
backup: 其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。

Nginx还支持多组的负载均衡,可以配置多个upstream  来服务于不同的Server.


在Windows版本中,将压缩包进行解压,执行命令:

start nginx  或者双击

这样就可以启动nginx服务了。而执行命令:

nginx -s stop

可以停止服务。 或者 tskill nginx


tomcat修改

tomcat8081\conf\server.xml 改成

<?xml version='1.0' encoding='utf-8'?>
 
<Server port="18101" shutdown="SHUTDOWN">
  <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
  <Listener className="org.apache.catalina.core.JasperListener" />
  <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
  <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
 
  <GlobalNamingResources>
 
    <Resource name="UserDatabase" auth="Container"
              type="org.apache.catalina.UserDatabase"
              description="User database that can be updated and saved"
              factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
              pathname="conf/tomcat-users.xml" />
  </GlobalNamingResources>
 
  <Service name="Catalina">
 
    <Connector port="8081" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="18081"
				URIEncoding="UTF-8"			   />
     
    <Connector port="18001" protocol="AJP/1.3" redirectPort="18081" />
 
    <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcatRoute1">
 
      <Realm className="org.apache.catalina.realm.LockOutRealm">
 
        <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
               resourceName="UserDatabase"/>
      </Realm>
	  
      <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">
 
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log." suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />

      </Host>
    </Engine>
  </Service>
</Server>

修改五处的端口号

加入了 jvmRoute="tomcatRoute1" 。这个会在session生成时加入到后缀

 <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcatRoute1">

tomcat8081\conf\context.xml

<?xml version='1.0' encoding='utf-8'?>
<Context>
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
        memcachedNodes="n1:192.168.85.132:12000"
        sticky="false"
        requestUriIgnorePattern=".*\.(png|gif|jpg|css|js|ico|jpeg)$"
        sessionBackupAsync="false"
        sessionBackupTimeout="100"
        transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"/>

    <WatchedResource>WEB-INF/web.xml</WatchedResource>

</Context>


context标签里加入了

<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
        memcachedNodes="n1:192.168.85.132:12000"
        sticky="false"
        requestUriIgnorePattern=".*\.(png|gif|jpg|css|js|ico|jpeg)$"
        sessionBackupAsync="false"
        sessionBackupTimeout="100"
        transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"/>

12000是memcached的端口

准备jar


144855_Qvmt_552549.png

将这些jar放到 tomcat8081\lib 下面 ,共8个


Tomcat6和Tomcat7使用不同msm支持包 ,tomcat6是-tc6

jar包的获取可以使用maven获取。

具体的maven依赖定义如下(任选一种就oK了):

kryo-serializer:

Xml代码  

<dependency>
   <groupId>de.javakaffee.msm</groupId>
   <artifactId>msm-kryo-serializer</artifactId>
   <version>1.8.3</version>
</dependency>

javolution:

Xml代码  

<dependency>  
    <groupId>de.javakaffee.msm</groupId>  
    <artifactId>msm-javolution-serializer</artifactId>  
    <version>1.6.0</version>  
    <scope>runtime</scope>  
</dependency>

xstream:

Xml代码  

<dependency>  
    <groupId>de.javakaffee.msm</groupId>  
    <artifactId>msm-xstream-serializer</artifactId>  
    <version>1.6.0</version>  
    <scope>runtime</scope>  
</dependency>

flexjson:

Xml代码  

<dependency>  
    <groupId>de.javakaffee.msm</groupId>  
    <artifactId>msm-flexjson-serializer</artifactId>  
    <version>1.6.0</version>  
    <scope>runtime</scope>  
</dependency>


我们就是用kryo-serializer ,其它几种我也没试。

如果我们不是使用maven仓库来对依赖进行管理的话 ,我们需要针对每种策略下载单独需要的jar包,具体如下:

不管你选择哪种序列化策略,你都需要 memcached-session-manager-${version}.jar ,如果你使用的是tomcat6,则还需要下载 memcached-session-manager-tc6-${version}.jar ,如果使用的是tomcat7则下载 memcached-session-manager-tc7-${version}.jar 。同时还需要下载 spymemcached-2.7.3.jar.下载这完这些jar包后把jar包放到 $CATALINA_HOME/lib/目录

 


tomcat8082\conf\Catalina\localhost 路径下添加 ROOT.xml

<?xml version='1.0' encoding='utf-8'?>
<Context crossContext="true" docBase="E:/work/test2/sbweb/target/sbweb" path="" reloadable="true">
</Context>

这段代码 可以将sbweb项目路径当作根目录。代替ROOT


按照这个步骤,配置三台tomcat ,端口8081 ,8082,8083 最后一台当作灾备。


3下载安装配置memcached

memcache下载 http://memcached.org/downloads

安装到centos 步骤:

官网也有教程,但是会缺少依赖

1.分别把memcached和libevent下载回来,放到 /tmp 目录下:
# cd /tmp
# wget http://www.danga.com/memcached/dist/memcached-1.2.0.tar.gz
# wget http://www.monkey.org/~provos/libevent-1.2.tar.gz

2.先安装libevent:
# tar zxvf libevent-1.2.tar.gz
# cd libevent-1.2
# ./configure –prefix=/usr
# make
# make install

3.安装memcached,同时需要安装中指定libevent的安装位置:
# cd /tmp
# tar zxvf memcached-1.2.0.tar.gz
# cd memcached-1.2.0
# ./configure –with-libevent=/usr
# make
# make install

启动Memcached服务
1.启动Memcache的服务器端:

# /usr/local/bin/memcached -d -m 10 -u root -l 0.0.0.0 -p 12000 -c 256 -P /tmp/memcached.pid -d

选项是启动一个守护进程,

-m是分配给Memcache使用的内存数量,单位是MB,我这里是10MB,
-u是运行Memcache的用户,我这里是root,
-l是监听的服务器IP地址,如果有多个地址的话,我这里指定了服务器的IP地址192.168.0.200,
-p是设置Memcache监听的端口,我这里设置了12000,最好是1024以上的端口,
-c选项是最大运行的并发连接数,默认是1024,我这里设置了256,按照你服务器的负载量来设定,
-P是设置保存Memcache的pid文件,我这里是保存在 /tmp/memcached.pid,

2.如果要结束Memcache进程,执行:

# kill `cat /tmp/memcached.pid`

测试Memcached:

 

[root@localhost /]# telnet 192.168.141.64 12000
Trying 192.168.141.64...
Connected to 192.168.141.64 (192.168.141.64).
Escape character is '^]'.
set key1 0 60 4
zhou
STORED
get key1
VALUE key1 0 4
zhou
END


退出控制台:quit
至此Memcached安装成功!

 

你可能没有telnet命令 ,需要安装telnet。

在线安装

可使用命令:

#yum install xinetd (注意在root下安装)

#yum install telnet (注意在root下安装)


4部署启动项目

需要有个能登录测试的项目

http://git.oschina.net/nhniu/sbweb

效果图如下

155532_cwqM_552549.png



转载于:https://my.oschina.net/u/552549/blog/488225

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值