nginx+tomcat+redis实现session共享

RedisMemcached的区别:
内存利用率:使用简单的key-value存储的话,Memcached的内存利用率更高,而如果Redis采用hash结构来做key-value存储,由于其组合式的压缩,其内存利用率会高于Memcached

性能对比:由于Redis只使用单核,而Memcached可以使用多核,所以平均每一个核上Redis在存储小数据时比Memcached性能更高。而在100k以上的数据中,Memcached性能要高于Redis,虽然Redis最近也在存储大数据的性能上进行优化,但是比起Memcached,还是稍有逊色。

 

Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用

Redis支持数据的备份,即master-slave模式的数据备份。

Redis不仅仅支持简单的key-Value类型的数据,同时还提供listsetzsethash数据结构的存储。

 

 

 

 

 

 

 

部署准备:

Nginx192.168.1.11

Tomcat1    192.168.1.12

Tomcat2    192.168.1.13

Redis192.168.1.14

以下环境都必须要关闭防火墙和SElinux安全机制

service iptables stop

setenforce 0

1.安装部署nginx

yum -y install zlib-devel pcre-devel openssl-devel  //安装依赖包

tar xf nginx-1.6.2.tar.gz

tar xf nginx-1.6.2.tar.gz

cd nginx-1.6.2

./configure && make && make install

cd

ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/

修改配置文件实现tomcat负载均衡

vim /usr/local/nginx/conf/nginx.conf

在原配置基础添加以下红色部分:

upstream backend {

    server 192.168.1.12:8080 weight=1 max_fails=1 fail_timeout=10s;

    server 192.168.1.13:8080 weight=1 max_fails=1 fail_timeout=10s;

}

    server {

        listen       80;

        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {

            root   html;

            index  index.html index.htm;

            proxy_pass http://backend;

        }

保存退出,使用nginx –t 检查配置是否正确,确认无误启动nginx

nginx

Nginx部署完毕

2.安装部署tomcat1

为了避免系统的open-jdk环境与新安装jdk环境冲突,我们需要卸载open-jdk 可以不做,直接使用系统自带JAVA环境也没有影响

rpm -e java-1.7.0-openjdk-1.7.0.45-2.4.3.3.el6.x86_64 --nodeps

rpm -e java-1.6.0-openjdk-1.6.0.0-1.66.1.13.0.el6.x86_64 --nodeps

rpm -e java-1.7.0-openjdk-devel-1.7.0.45-2.4.3.3.el6.x86_64 --nodeps

rpm -e java-1.6.0-openjdk-devel-1.6.0.0-1.66.1.13.0.el6.x86_64 --nodeps

1)解压jdk

tar xf jdk-7u65-linux-x64.gz

mv jdk1.7.0_65 /usr/local/java

2)配置环境变量

vim /etc/profile.d/java.sh  #添加以下内容

export JAVA_HOME=/usr/local/java  #设置java的根目录

export PATH=$PATH:$JAVA_HOME/bin

3)生效脚本

source /etc/profile.d/java.sh

安装

tar xf apache-tomcat-7.0.54.tar.gz

mv apache-tomcat-7.0.54 /usr/local/tomcat

tomcat需要调用redisjar包放入tomcat/lib

cp tomcat-redis-session-manage-tomcat7.jar tomcat-juli.jar commons-logging-1.1.3.jar commons-pool2-2.2.jar jedis-2.5.2.jar /usr/local/tomcat/lib

修改context.xml文件以支持调用redis

vim /usr/local/tomcat/conf/context.xml

Context中加入以下内容

<Context>

<Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" />

 <Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"  

host="192.168.1.14"   //redisIP地址

port="6379"    //redis端口

database="0"  

maxInactiveInterval="60" />

</Context>

修改server.xml文件以支持调取创建测试

vim /usr/local/tomcat/conf/server.xml

126加入以下内容:

126  <Context docBase="/web/webapp" path="" reloadable="false" >

127              </Context>

创建测试页:

mkdir -p /web/webapp

cd /web/webapp/

vim index.jsp

 

Session ID:<%= session.getId() %><BR>

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

<% out.println("This tomcat server 192.168.1.12");%>

启动tomcat

/usr/local/tomcat7/bin/startup.sh

[root@centos5 nginx]# netstat -anpt |grep 8080

tcp        0  0 :::8080           :::*                        LISTEN      48726/java  

 

3.tomcat2的安装部署

tomcat1相同,唯一区别就是为区分测试效果tomcat2测试页面为:

mkdir -p /web/webapp

cd /web/webapp/

vim index.jsp

 

Session ID:<%= session.getId() %><BR>

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

<% out.println("This tomcat server 192.168.1.13");%>

4.安装部署redis

tar xf redis-3.2.5.tar.gz

cd redis-3.2.5

make

这里如果报错,tclsh8.5: not found 发现少了tcl 报错 
  解决方法:下载,安装tcl

#wget http://downloads.sourceforge.net/tcl/tcl8.5.9-src.tar.gz

#cd /tcl8.5.9-src/unix

#./configure

#make

#make install

接着make就没报错了

mkdir -p /usr/local/redis/bin

mkdir -p /usr/local/redis/etc

mkdir -p /usr/local/redis/var

cd src/

src目录下这些文件作用如下
    redis-serverRedis服务器的daemon启动程序
    redis-cliRedis命令行操作工具.你也可以用telnet根据其纯文本协议来操作
    redis-benchmarkRedis性能测试工具,测试Redis在你的系统及你的配置下的读写性能.
    redis-statRedis状态检测工具,可以检测Redis当前状态参数及延迟状况

cp redis-benchmark  redis-check-aof redis-cli redis-server  /usr/local/redis/bin/

cp ../redis.conf  /usr/local/redis/etc

vim /usr/local/redis/etc/redis.conf

修改配置文件

daemonize no  改为 daemonize yes  //是否把redis-server启动在后台,默认是。若改成yes,会生成一个pid文件

bind 127.0.0.1 改为 bind 0.0.0.0   //任意主机都可访问

其他的看需要修改

关闭redis

killall -9 redis-server

启动redis

/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf

查看是否启动:

netstat -anpt |grep redis

tcp        0      0 0.0.0.0:6379                0.0.0.0:*                   LISTEN      46390/redis-server

监控redis共享session

redis-cli -p 6379  monitor

5.测试

在客户端访问http://192.168.1.11刷新后会轮流出现以下页面:

 

 

 

测试页面IP地址发生变化,而session ID不变

可以查看redis主机监控,会出现以下页面:

至此nginx+2 tomcat+redis实现session共享成

 

使用keepalived来实现redis主从高可用

接上面的实验,下面使用keepalived来实现redis主从高可用

部署准备

添加一台Redis2服务器

Nginx192.168.1.11

Tomcat1    192.168.1.12

Tomcat2    192.168.1.13

Redis1192.168.1.14

Redis2192.168.1.15

关闭防火墙和SElinux安全机制

service iptables stop

setenforce 0

部署redis

Redis2上安装部署redis2

安装过程与redis1相同

修改redis2redis.conf

vim /usr/local/redis/etc/redis.conf

daemonize no  改为 daemonize yes

bind 127.0.0.1 改为 bind 0.0.0.0

slaveof 192.168.1.14 6379    //去掉此行注释,并改为redis1ip地址和端口

然后启动redis2

/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf

测试redis1redis2数据是否能同步

redis1上写入数据:

[root@localhost ~]# /usr/local/redis/bin/redis-cli -h 192.168.1.14

192.168.1.14:6379> set name zhangsan

OK

192.168.1.14:6379> get name

"zhangsan"

redis2查看:

[root@localhost src]# /usr/local/redis/bin/redis-cli -h 192.168.1.15

192.168.1.15:6379> get name

"zhangsan"

此时两台redis服务器之间数据能同步

安装keepalived

redis1安装keepalived

直接使用yum方式安装即可

yum -y install keepalived

chkconfig keepalived --add

chkconfig keepalived on

修改配置文件

vim /etc/keepalived/keepalived.conf

 

! Configuration File for keepalived

 

global_defs {

   notification_email {

     acassen@firewall.loc

     failover@firewall.loc

     sysadmin@firewall.loc

   }

   notification_email_from Alexandre.Cassen@firewall.loc

   smtp_server 127.0.0.1

   smtp_connect_timeout 30

   router_id LVS_DEVEL

}

 

vrrp_script redis {

        script /opt/chk_redis.sh

        interval 2

        weight -10

}

 

vrrp_instance VI_1 {

    state MASTER

    interface eth0

    virtual_router_id 51

    priority 100

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass 1111

}

track_script {

        redis

        }

    virtual_ipaddress {

        192.168.1.10

    }

}

redis2安装keepalived

yum -y install keepalived

chkconfig keepalived --add

chkconfig keepalived on

 

vim /etc/keepalived/keepalived.conf

 

! Configuration File for keepalived

 

global_defs {

   notification_email {

     acassen@firewall.loc

     failover@firewall.loc

     sysadmin@firewall.loc

   }

   notification_email_from Alexandre.Cassen@firewall.loc

   smtp_server 127.0.0.1

   smtp_connect_timeout 30

   router_id LVS_DEVEL

}

 

vrrp_script redis {

        script /opt/chk_redis.sh

        interval 2

        weight -10

}

vrrp_instance VI_1 {

    state BACKUP

    interface eth0

    virtual_router_id 51

    priority 90

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass 1111

}

track_script {

        redis

        }

    virtual_ipaddress {

        192.168.1.10

    }

}

分别redis1redis2部署redis健康检测脚本

两台redis相同操作:

vim /opt/chk_redis.sh

 

#!/bin/bash

# check redis server st="/usr/local/nginx/sbin/nginx"

REDIS="/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf"

redispid=$(ps -C redis-server --no-header |wc -l)

if [ $redispid -eq 0 ];then

$REDIS

sleep 3

redispid=$(ps -C redis-server --no-header |wc -l)

if [ $redispid -eq 0 ];then

/etc/init.d/keepalived stop

echo "Keepalived stopped ,please check your redis !"|tee -a /var/log/messages

fi

fi

启动keepalived

service keepalived start

分别修改tomcat1tomcat2context.xml支持VIP

两台tomcat相同操作:

vim /usr/local/tomcat/conf/context.xml

host="192.168.1.14"  改为 host="192.168.1.10"

重启tomcat服务:

/usr/local/tomcat/bin/shutdown.sh

/usr/local/tomcat/bin/startup.sh

测试

关闭redis1keepalivedredis服务注意一定要先关闭keepalived,否则redis再次重启,影响测试效果

/etc/init.d/keepalived stop

killall -9 redis-server

然后使用客户端访问http://192.168.1.1出现以下页面:

至此nginx + 2tomcat + 2redis主从部署完毕

 

posted @ 2019-05-29 15:20  #赵程#  阅读(2089)  评论(0编辑  收藏  举报