搭建Nginx(负载均衡)+Redis(Session共享)+Tomcat集群

时间:2022-09-02 19:33:30

一、环境搭建


Linux下Vagrant搭建Tomcat7、Java7

二、Nginx的安装配置与测试


  *虚拟机下转至root

sudo -i

  1)下载并解压(目前官网最新版本)

创建安装目录:mkdir /usr/local/soft && cd /usr/local/soft
命令下载Nginx压缩包:wget http://nginx.org/download/nginx-1.9.15.tar.gz
解压压缩包:tar zxvf nginx-1.9.15.tar.gz

  2)尝试安装Nginx

root@precise64:/usr/local/soft/nginx-1.9.15# ./configure 

  在最后提示:

./configure: error: the HTTP rewrite module requires the PCRE library.
You can either disable the module by using --without-http_rewrite_module
option, or install the PCRE library into the system, or build the PCRE library
statically from the source with nginx by using --with-pcre=<path> option.

  能看到PCRE的字眼,说明Nginx是依赖其它一些模块的,Nginx共依赖以下三个包:

1.gzip 模块需要 zlib 库 ( 下载: http://www.zlib.net/ )
2.rewrite 模块需要 pcre 库 ( 下载: http://www.pcre.org/ )
3.ssl 功能需要 openssl 库 ( 下载: http://www.openssl.org/ )

  依赖包安装顺序依次为:openssl、zlib、pcre, 最后安装Nginx包

  3)下载并安装openssl

命令下载openssl压缩包:wget https://www.openssl.org/source/openssl-1.0.1t.tar.gz
解压压缩包:tar zxvf openssl-1.0.1t.tar.gz
安装:cd openssl-1.0.1t && ./config && make && make install
在最后可能会提示你:
  sh: 1: make: not found
  The program 'make' is currently not installed.  You can install it by typing:
  apt-get install make
按照提示:apt-get install make
再次安装:./config && make && make install

  4)下载并安装zlib

下载zlib压缩包:wget http://zlib.net/zlib-1.2.8.tar.gz
解压:tar zxvf zlib-1.2.8.tar.gz 
安装:cd zlib-1.2.8/ && ./configure && make && make install

  5)下载并安装PCRE

下载PCRE:wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.37.tar.gz
解压:tar zxvf pcre-8.37.tar.gz
安装:cd pcre-8.37 && ./config
可能会提示你:
  configure: error: You need a C++ compiler for C++ support.
安装C++:apt-get install g++(网速有限没有尝试)
再次安装:./configure && make && make install

  6)再次尝试安装Nginx

安装命令:cd nginx-1.9.15/ && ./configure && make && make install
提示信息:
|| mkdir -p '/usr/local/nginx/logs'
test -d '/usr/local/nginx/html' \
|| cp -R html '/usr/local/nginx'
test -d '/usr/local/nginx/logs' \
|| mkdir -p '/usr/local/nginx/logs'
make[1]: Leaving directory `/usr/local/soft/nginx-1.9.15'
表示安装成功并安装至:/usr/local/nginx/

  7)测试开启Nginx

尝试启动:cd /usr/local/nginx/sbin/ && ./nginx
可能会提示:
  error while loading shared libraries: libpcre.so.1: cannot open shared object file: No such file or directory
搜索该文件:whereis libpcre.so.1
提示:libpcre.so: /lib64/libpcre.so.0 /usr/local/lib/libpcre.so /usr/local/lib/libpcre.so.1
 或 libpcre.so: /usr/local/lib/libpcre.so.1 /usr/local/lib/libpcre.so
添加:ln -s /usr/local/lib/libpcre.so.1 /lib64
 或:ln -s /usr/local/lib/libpcre.so.1 /lib
再次尝试启动:./nginx

  打开浏览器,跳转至Vagrant配置的IP地址(没有端口号),显示如下即成功:

搭建Nginx(负载均衡)+Redis(Session共享)+Tomcat集群

三、配置Tomcat集群


  1)复制出两个Tomcat

复制:cp -r Tomcat-7 ./Tomcat7-2
重命名:mv Tomcat-7 Tomcat7-1
查看:ls
bin  etc  games  include  lib  man  nginx  sbin  share  soft  src  ssl  Tomcat7-1  Tomcat7-2

  2)修改其中一个Tomcat的 server.xml

打开配置文件:vim conf/server.xml
  • <Server port="8005"shutdown="SHUTDOWN"> 改为 8006

  • <Connector port="8080"protocol="HTTP/1.1" 改为 8081

  • <Connector port="8009"protocol="AJP/1.3" 改为 8010

 保存::wq

  3)添加测试页面

创建应用文件夹:
mkdir /usr/local/Tomcat7-1/webapps/www
mkdir /usr/local/Tomcat7-2/webapps/www
添加测试页面:vim /usr/local/Tomcat7-1/webapps/www/index.jsp
  

<%@ pagelanguage="java" %>

<html>

  <head><title>TomcatA</title></head>

  <body>

   <h1style="color: red;">Tomcat A</h1>

    <tablealign="centre"border="1">

      <tr>

        <td>Session ID</td>

        <td><%= session.getId() %></td>

      </tr>

      <tr>

        <td>Created on</td>

        <td><%= session.getCreationTime() %></td>

     </tr>

    </table>

  </body>

</html>

sessionID:<%=session.getId()%>

<br>

SessionIP:<%=request.getServerName()%>

<br>

SessionPort:<%=request.getServerPort()%>

<%

out.println("This is Tomcat Server A");

%>

复制测试页面:cp /usr/local/Tomcat7-1/webapps/www/index.jsp /usr/local/Tomcat7-2/webapps/www/

  4)分别启动两个Tomcat

启动服务:/usr/local/Tomcat7-1/bin/startup.sh
可能提示:-bash: /usr/local/Tomcat7-1/bin/startup.sh: Permission denied
解决:cd /usr/local/Tomcat7-1/bin && chmod u+x *.sh
再次尝试启动服务:./startup.sh

  浏览器打开IP:8080/www/index.jsp 与 IP:8081/www/index.jsp,显示如下

搭建Nginx(负载均衡)+Redis(Session共享)+Tomcat集群

搭建Nginx(负载均衡)+Redis(Session共享)+Tomcat集群

四、用Nginx实现集群的负载均衡


  1)修改Nginx配置文件

打开配置文件:vim /usr/local/nginx/conf/nginx.conf
在http { 内添加:
 #Tomcat
 upstream zhengbin {
   server 192.168.33.10:8080 max_fails=1 fail_timeout=10s;
  server 192.168.33.10:8081 max_fails=1 fail_timeout=10s;
  }
在http { 的 server { 的 location / { 内添加:
  proxy_pass http://zhengbin;
保存配置::wq

搭建Nginx(负载均衡)+Redis(Session共享)+Tomcat集群

  2)重启Nginx

重新加载命令:/usr/local/nginx/sbin/nginx -s reload
查看更多命令:nginx/sbin/nginx -h

  现在浏览器打开http://IP/www/,同样显示TomcatA或TomcatB,尝试不断刷新,两个页面会交替显示,即成功

  但发现SessionID并不相同,接下来通过Redis来实现Session的共享(同步)

五、安装配置Redis并实现Session共享


  1)安装测试Redis

安装:sudo apt-get install redis-server
测试:redis-server
提示:
[8206] 13 May 00:47:49 # Opening port: bind: Address already in use
测试:
  • redis-cli
  • redis 127.0.0.1:6379> exit

  • 说明安装成功

 注意:
  redis-cli shutdown 为关闭连接
  再次连接时显示:
    Could not connect to Redis at 127.0.0.1:6379: Connection refused
    not connected> exit
 重新读取配置:redis-server /etc/redis/redis.conf
 再次连接:
  
  redis-cli
    redis 127.0.0.1:6379> exit

  2)下载相关jar

1.下载commons-pool,建议下载1.6,2.4.2没有测试成功
2.下载tomcat-redis-session-manager,我用的jdk7所以用的是-7.jar
3.下载jedis作为java的redis客户端,建议用2.1.0,最新版本没有测试成功
最后将三个jar分别放在两个Tomcat的 /lib 中

  3)配置Tomcat

修改配置文件:vim /usr/local/Tomcat7-1/conf/context.xml 
在<Context>节点中,添加以下内容:
  <Valve className="com.radiadesign.catalina.session.RedisSessionHandlerValve" />
   <Manager className="com.radiadesign.catalina.session.RedisSessionManager"
      host="127.0.0.1"
      port="6379"
      database="0"
      maxInactiveInterval="60"/>
复制:cp /usr/local/Tomcat7-1/conf/context.xml /usr/local/Tomcat7-2/conf/

  4)启动测试

1.启动Nginx:/usr/local/nginx/sbin/nginx

2.启动Redis:redis-server
3.启动Tomcat:/usr/local/Tomcat7-1/bin/startup.sh && /usr/local/Tomcat7-2/bin/startup.sh 

  浏览器打开http://IP/www/index.jsp

  发现即使两个Tomcat在切换,但各自的SessionID是相同的

到此配置全部完成

感谢以下博主的精彩博文,虽然坑较多。。内容重复较多。。


nginx+redis+tomcat实现session共享 *Session处的解决方法没有测试成功

Redis相关

最终Session解决参考

搭建Nginx(负载均衡)+Redis(Session共享)+Tomcat集群的更多相关文章

  1. 【转载】解决nginx负载均衡的session共享问题

    https://blog.csdn.net/u012081441/article/details/71787164 之前有写过ubuntu环境下搭建nginx环境,今天来谈一下nginx sessio ...

  2. 怎么样 解决nginx负载均衡的session共享问题呢

    php服务器有多台,用nginx做负载均衡,这样同一个IP访问同一个页面会被分配到不同的服务器上,如果session不同步的话,就会出现很多问题,比如说最常见的登录状态,下面提供了几种方式来解决ses ...

  3. 解决nginx负载均衡的session共享问题

    1.不使用session,换用cookie session是存放在服务器端的,cookie是存放在客户端的,我们可以把用户访问页面产生的session放到cookie里面,就是以cookie为中转站. ...

  4. nginx&colon;负载均衡的session共享

    一.场景 当nginx做了负载均衡之后,同一个ip的url请求服务器的时候,负载均衡会根据每台服务器的权重等一些设置将请求转发到不同的服务器上去进行处理,这样的话针对一些带有状态请求的情况来说就是个很 ...

  5. 几个常见用于解决nginx负载均衡的session共享问题的办法

    查了一些资料,看了一些别人写的文档,总结如下,实现nginx session的共享: PHP服务器有多台,用nginx做负载均衡,这样同一个IP访问同一个页面会被分配到不同的服务器上,如果sessio ...

  6. Nginx负载均衡和HTTPS配置及集群搭建

    Nginx的高可用(HA)配置 1.高可用配置结构(画图说明) 2.KeepAlived的安装和配置 1.安装 yum install keepalived 2.keepalived.conf配置文件 ...

  7. nginx&plus;tomcat&plus;redis负载均衡及session共享

    概述 本文档是用来详细描述 nginx+tomcat+redis负载均衡实现session共享 所需软件及下载地址 软件名称 下载地址 功能说明 Nginx-v1.6.0 http://nginx.o ...

  8. keepalived&plus;nginx&plus;tomcat&plus;redis实现负载均衡和session共享(原创)

    keepalived+nginx+tomcat+redis实现负载均衡和session共享 直接上链接,码了一天,就不再重写了,希望能帮到大家,有问题欢迎留言交流.

  9. haproxy&plus;tomcat实现负载均衡以及session共享&lpar;linux centos7环境&rpar;

    一.安装HAProxy 1.进入home目录,下载最新haproxy安装包. cd /home wget http://haproxy.1wt.eu/download/1.4/src/haproxy- ...

  10. Nginx&plus;Tomcat8&plus;Memcached实现负载均衡及session共享

    1> 基础环境 简易拓扑图: 2> 部署Tomcat [root@node01 ~]# ll -h ~ |egrep 'jdk|tomcat'-rw-r--r-- 1 root root ...

随机推荐

  1. spring mvc重定向方法

    一.不带参数,直接重定向到另一个地址: 返回String直接跳转,如: @RequestMapping(value = "/filehandle") public String u ...

  2. LINQ的Expression与delegate表达式

    Linq的delegate表达式,Insus.NET觉得它封装得好,让开发时简化了很多代码,而且容易阅读与检索. 比如,我们需要计算优惠给客户金额,打85%折,可以这样写: using System; ...

  3. decimalFormat&lpar;&quot&semi;&num;&quot&semi;&comma;&quot&semi;&num;&num;0&period;00&quot&semi;&rpar; java

    importjava.text.DecimalFormat; publicclassTestNumberFormat{ publicstaticvoidmain(String[]args){ doub ...

  4. 【读书笔记】iOS-UIFont-动态下载系统提供的多种中文字体网址

    苹果可使用的字体列表: https://support.apple.com/zh-cn/HT202599 动态下载字体的代码demo: https://developer.apple.com/libr ...

  5. 一次数据库hang住的分析过程

    现象: 普通用户和sysdba都无法登陆,业务中断 分析过程: 1.先做hanganalyze和systemstate dump $sqlplus -prelim "/as sysdba&q ...

  6. OpenJudge&sol;Poj 2105 IP Address

    1.链接地址: http://poj.org/problem?id=2105 http://bailian.openjudge.cn/practice/2105 2.题目: IP Address Ti ...

  7. fuck WPFG&period;org

    今天一旦进入国外网站,就立刻跳转到WPFG.org.可能DNS被劫持污染了吧.用OpenDNS就行了.然后就没有这回事发生了 参考以下: https://www.opendns.com https:/ ...

  8. 为什么树莓派不会受到 Spectre 和 Meltdown 攻击

    最近爆出来的 Intel CPU 的底层漏洞可谓是影响巨大,过去20年的电脑都可能会受影响.前几天 Raspberry Pi 的官方 Twitter(@Raspberry_Pi) 转推了这篇文章,通过 ...

  9. centos7忘记密码解决办法

    centos7重置密码: centos7一改以往风格,很多方面都做了改进,尤其是修改root密码,一般centos6以前直接进入grub然后从单用户模式进去就可以修改,可centos7不同,笔者今天修 ...

  10. python3 十六进制字符串进行分割并累加

    最近忘性大,记录一下 需求: ‘80 11 F1 01 1A’字符串需要把每一个十六进制字符加起来,即80+11+F1+01+1A=? 很简单,不解释,直接上 hex(sum([int(i,16) f ...