Session 服务器之 Memcached(tomcat,memcached 为 7 版本,版本要配套)(多台tomcat)
(一台Nginx,两台tomcat)
1、配置各个机器的主机名2、配置主机名与IP的映射3、关闭防火墙和selinux两台 tomcat 上安装 Memcached
[root@node1 ~]# yum -y install libevent memcached
[root@node1 ~]# memcached -u root -m 512M -n 10 -f 2 -d -vvv -c 512
选项:
-h #查看帮助信息
-p #指定 memcached 监听的端口号 默认11211
-I #memcached 服务器的IP地址
-u #memcached 程序运行时使用的用户身份必须是 root 用户
-m #指定使用本机的多少物理内存数据默认 64M
-c # memcached 服务的最大链接数
-vvv #显示详细信息
-n # chunk size 的最小空间是多少单位字节
-f # chunk size 大小增长的倍数默认为 1.25 倍
-d #在后台启动
[root@node1 ~]#netstat -anpt | grep :11211 #(检测 memcached 是否存活,memcached 端口为 11211)
测试 memcached 能否 存取数据
[root@node1 ~]# yum -y install telnet
[root@node1 ~]# telnet 192.168.200.113 11211
set username 0 0 8
zhangsan
STORED #值以存进
get username
VALUE username 0 8
zhangsan
END
quit
Connection closed by foreign host
最后执行让 Tomcat-1 Tomcat-2 通过(msm) 连接到 memcached
将 session 包中的 “*.jar” 复制到 /usr/local/tomcat/lib/ 下面
[root@node1 ~]# cp session/* /usr/local/tomcat/lib/
编辑 tomcat 配置文件连接到指定的 memcached 服务器,两台 tomcat 配置一样
[root@node1 ~]# vim /usr/local/tomcat/conf/context.xml
<Context>
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNode="memA:192.168.200.113:11211 memB:192.168.200.114:11211"
requestUrilgnorePattem=".*(ico|png|gif|jpg|js|css)$"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory" />
</Context>
重启服务
如果成功,tomcat 与 memcached 端口会连在一起,前后有变化
[root@node1 ~]# netstat -anpt | grep java
浏览器访问测试时,关闭 memB:192.168.200.114 的 memcached服务器,在进行测试发现 memcached 服务器发生了变化,但是 SessionID 并没有变化
Session 服务器之 Redis (任意一台机器)
Redis 与 memcached 的区别
内存利用率:使用简单的 Key-value(键值对)存储的话,Memcached 的内存利用率更高,而如果 Redis 采用 hash 结构来做 key-value 存储,由于其组合式的压缩,其内存利用率会高于 Memcached。
性能对比:由于 Redis 只使用单核,而 Memcached 可以使用多核,所以平均每一个核上 Redis 在存储小数据时比 Memcached 性能更高,而在 100k 以上的数据中,Memcached 性能要高于 Redis,虽然 Redis 最近也在存储大数据的性能上进行优化,但是比起 Memcached,还是稍有逊色。
Redis 支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用
Redis 支持数据的备份,即 master-slave 模式的数据备份
Redis 不仅仅支持简单的 key-Value 类型的数据,同时还提供 list,set,zset,hash 等数据结构的存储
(一台Nginx,两台tomcat)
1、配置各个机器的主机名2、配置主机名与IP的映射3、关闭防火墙和selinux安装部署 Redis
[root@node1 ~]# tar xf redis-3.2.5.tar.gz -C /usr/local/
[root@node1 ~]# cd /usr/local/local/redis-3.2.5/
[root@node1 redis-3.2.5]# make
这里如果报错:tclsh8.5:not found 发现少了tcl报错,则安装 tcl
wget http://downloads.sourceforge.net/tcl/tcl8.5.9-src.tar.gez
cd /tcl8.5.9-src/unix
./configure
make &&make install
接着 make 就没报错了
[root@node1 redis-3.2.5]# mkdir -p /usr/local/redis/{bin,etc,var}
[root@node1 redis-3.2.5]# cd src/
src 目录下这些文件作用如下
redis-server:Redis服务器的daemon启动程序
redis-cli:Redis命令行操作工具,你也可以用 telnet 根据其纯文本协议来操作
redis-benchmark:Redis 性能测试工具,测试 Redis 在你的系统及你的配置下的读写性能
redis-stat:Redis 状态检测工具,可以检测 Redis 当前状态参数及延迟状态
[root@node1 src]# cp redis-benchmark redis-check-aof redis-cli redis-server redis-check-rdb /usr/local/redis/bin/
[root@node1 redis-3.2.5]# cp ../redis.conf /usr/local/redis/etc
[root@node1 redis-3.2.5]# 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
[root@node1 redis-3.2.5]# killall -9 redis-server
启动 Redis
[root@node1 redis-3.2.5]# /usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf
查看是否启动
netstat -anpt | grep redis (netstat -anpt | grep 6379)
监控 Redis 共享 session(也可不用监控)
[root@node1 redis-3.2.5]#/usr/local/redis/bin/redis-cli -p 6379 monltor
将 tomcat 需要调用 Redis 的 jar 包放入 tomcat/lib
[root@node1 redis-3.2.5]# cp tomcat-redis-session-manager-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
[root@node1 redis-3.2.5]# vim /usr/local/tomcat/conf/context.xml
<Context>
<Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" />
<Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"
host="192.168.200.113" //redis 的IP地址
port="6379"
database="0"
maxinactiveinterval="60" />
</Context>
重启 tomcat 服务