nginx+tomcat负载均衡以及redis共享session综合解决方案(By Centos 7)

图片发自简书App

#文件准备 ##nginx: [nginx-1.10.3.tar.gz](http://nginx.org/download/nginx-1.10.3.tar.gz) ##tomcat8: [apache-tomcat-8.0.43.zip](http://mirror.bit.edu.cn/apache/tomcat/tomcat-8/v8.0.43/bin/apache-tomcat-8.0.43.zip) ##redis: [redis-3.2.8.tar.gz](http://download.redis.io/releases/redis-3.2.8.tar.gz) ##ruby(当使用redis cluster时需要): [ruby-2.4.1.tar.gz](https://cache.ruby-lang.org/pub/ruby/2.4/ruby-2.4.1.tar.gz) ##TomcatRedisSessionManager(From [GitHub](https://github.com/ran-jit/TomcatClusterRedisSessionManager)): [TomcatRedisSessionManager-1.1.1.zip](https://github.com/ran-jit/TomcatClusterRedisSessionManager/releases/download/1.1.1/TomcatRedisSessionManager-1.1.1.zip) ##jdk :[jdk-8u131-linux-x64.tar.gz](http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.tar.gz)

#环境安装 >**PS:建议将所有文件下载后上传至/usr/local/src  ;若无其他说明,本教程所有操作均以/usr/local/src作为起手目录**

##redis

``` tar -zxvf redis-3.2.8.tar.gz cd redis-3.2.8 make ``` >建议安装后, 将redis移动到/usr/local/redis3.2或相似的好记的目录,方便后续操作 安装后查看是否安装成功

``` cd src ./redis-server ../redis.conf ``` 具体参考: [redis安装|菜鸟教程](http://www.runoob.com/redis/redis-install.html) ##nginx ``` yum -y install make zlib zlib-devel gcc-c++ libtool  openssl openssl-devel wget http://downloads.sourceforge.net/project/pcre/pcre/8.35/pcre-8.35.tar.gz tar zxvf pcre-8.35.tar.gz cd pcre-8.35 ./configure make && make install tar -zxvf nginx-1.10.3.tar.gz

cd nginx-1.10.3

./confignre --prefix=/usr/local/webserver/nginx --with-http_stub_status_module --with-http_ssl_module --with-pcre=/usr/local/src/pcre-8.35

make && make install ```

安装完成后,进入sbin目录, 输入

`nginx -s start ` 默认端口80,尝试访问 >nginx源码安装较为复杂,参考网上完整安装教程: [Nginx安装配置 | 菜鸟教程](http://www.runoob.com/linux/nginx-install-setup.html)

##tomcat

```

tar -zxvf apache-tomcat-8.0.43.zip cd apache-tomcat-8.0.43 cd bin ./startup.sh ```

解压即安装,启动后默认端口为8080, 自行测试server是否正常开启,若失败,尝试以下命令 ```

systemctl stop firewalld systemctl stop iptabled

```

#nginx+tomcat集群搭建

##复制一份tomcat8

```

mv apache-tomcat-8.0.43 /usr/local/tomcat8/8081 cp /usr/local/tomcat8/8081 /usr/local/tomcat8/8082

```

##修改tomcat的启动及关闭端口

###更改配置文件 ####tomcat/conf/server.xml 更改关闭端口,例如8005->8015

```

<Server port="8005" shutdown="SHUTDOWN">

.....

```

更改启动端口,例如8080->8081

```

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

```

##配置nginx

###nginx.conf

```

#user  nobody; worker_processes  1; #error_log  logs/error.log;

#error_log  logs/error.log  notice; #error_log  logs/error.log  info;

#pid   

  logs/nginx.pid; events {     worker_connections  1024; } http {     include     

mime.types;  

default_type  application/octet-stream;    

#log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '  

  #              '$status $body_bytes_sent "$http_referer" '     #                  '"$http_user_agent" "$http_x_forwarded_for"';  

  #access_log  logs/access.log  main;     sendfile        on;  

#tcp_nopush    on; 

#keepalive_timeout  0;     keepalive_timeout  65;    

#gzip  on; upstream tomcatcluster{ server 127.0.0.1:8081 weight=1; server 127.0.0.1:8082 weight=1; }     server {         listen      80;         server_name  localhost;         charset utf-8;        

#access_log  logs/host.access.log  main;         location / {             proxy_pass http://tomcatcluster; proxy_redirect default;         }        

#error_page  404              /404.html;         # redirect server error pages to the static page /50x.html        

#         error_page  500 502 503 504  /50x.html;         location = /50x.html {             root  html;         }     } }

```

其中核心是 >upstream tomcatcluster{ server 127.0.0.1:8081 weight=1; server 127.0.0.1:8082 weight=1; } 定义一个upstream 标识为tomcatcluster; server:定义一个服务器 ip:port:指定URL weight:权重, 越大 >location / { proxy_pass http://tomcatcluster; proxy_redirect default; } http:// 后接upstream指定的标识 ,如 tomcatcluster

##启动nginx 进入nginx目录, 比如我的/usr/local/nginx ``` cd /usr/local/nignx cd sbin ./nginx -s start ``` 启动前可使用` nignx -t` 检验配置文件是否错误. 浏览器访问80端口, 若无意外, 则显示tomcat的欢迎界面,于是为tomcat添加项目 ##修改tomcat/webapps/ROOT ``` cd /usr/local/tomcat8/8081 cd webapps/ROOT rm -rf * vi index.jsp ``` 输入以下内容: ``` <html>     <body>          <h1>This is tomcat 1 , sessionId: <%=session.getId()%></h1>         <% session.setAttribute("aa","guddqs"); session.setAttribute("bb","bbgudqs"); %>     </body> </html> ``` 类似的修改8082, 要在jsp上区分出是哪个tomcat服务 修改后,多次刷新页面, 轮次出现2个tomcat的页面. 至此nginx+tomcat负载均衡搭建完毕 #redis共享session for tomcat >PS: 本教程采用tomcat8, 并使用国外某大佬github项目, 对于tomcat7需要另一个redis-session-manager.jar ##准备文件 ``` unzip TomcatRedisSessionManager-1.1.1.zip cd TomcatRedisSessionManager-1.1.1 ls -l total 740 -rw-r--r--. 1 root root  61829 Mar 19  2016 commons-logging-1.2.jar -rw-r--r--. 1 root root 111892 Mar 19  2016 commons-pool2-2.4.1.jar -rw-r--r--. 1 root root 533252 Feb 21  2016 jedis-2.8.0.jar -rw-r--r--. 1 root root  1850 Nov 26 00:30 ReadMe.txt -rw-r--r--. 1 root root    324 Nov 25 23:56 RedisDataCache.properties -rw-r--r--. 1 root root  28807 Nov 26 00:49 TomcatRedisSessionManager-1.1.1.jar ``` 其中4个jar包需要复制到tomcat的lib目录下 ``` cp commons-logging-1.2.jar /usr/local/tomcat/8081/lib cp commons-pool2-2.4.1.jar /usr/local/tomcat/8081/lib ....... ``` RedisDataCache.properties需要复制到tomcat的conf下 ``` cp RedisDataCache.properties /usr/local/tomcat/8081/conf ``` ##修改配置文件 ###context.xml 进入tomcat的conf目录, 修改 context.xml文件 再`<Context>` 节点下加入 ``` <Valve className="com.r.tomcat.session.management.RequestSessionHandlerValve" /> <Manager className="com.r.tomcat.session.management.RequestSessionManager" /> ``` ###RedisDataCache.properties 然后修改之前复制到conf下的RedisDataCache.properties文件,切记不可修改文件名 ``` vi RedisDataCache.properties ``` 单redis配置如下: ``` redis.hosts=127.0.0.1:6379 # Redis Password redis.password= # set true to enable redis cluster mode redis.cluster.enabled=false # Redis database (default 0) #redis.database=0 # Redis connection timeout (default 2000) #redis.timeout=2000 ``` redis cluster模式配置文件如下: ``` redis.hosts=127.0.0.1:3000,127.0.0.1:3001,127.0.0.1:3002,127.0.0.1:3003,127.0.0.1:3004,127.0.0.1:3005 # Redis Password redis.password= # set true to enable redis cluster mode redis.cluster.enabled=true # Redis database (default 0) #redis.database=0 # Redis connection timeout (default 2000) #redis.timeout=2000 ``` >PS:  redis.password留空则等于无密码 类似的修改8082下的tomcat配置文件, 复制jar包, RedisDataCache.properties 最后重启2个tomcat, 访问80端口, 刷新页面, 观察页面显示是否达到 2个不同的tomcat服务单具有相同的session id #小结 >使用nginx反向代理到2个tomcat服务器, 仅需修改tomcat配置不同的端口,以及为nginx.conf添加upstream配置并将反向代理指向upstream即可 >而添加tomcat的session共享则利用了tomcat的提供的外部session存储机制接口,而实现则使用了redis作为储存源.从而实现了session共享.

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,222评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,455评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,720评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,568评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,696评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,879评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,028评论 3 409
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,773评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,220评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,550评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,697评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,360评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,002评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,782评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,010评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,433评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,587评论 2 350

推荐阅读更多精彩内容