设为首页 收藏本站
查看: 1915|回复: 0

[经验分享] Apache/Nginx+Tomcat+Memcahced实现session管理

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-2-2 09:03:19 | 显示全部楼层 |阅读模式
一.memcached简介
Memcached是一个免费开源、高性能、分布式的内存对象缓存系统。Memcached是在内存中,为特定数据(字符串或对象)构建key-value的小块数据存储。
Memcached项目地址:
http://www.memcached.org/
现在最新版本为1.4.22,时间点:2015.01.26

二.实验环境介绍
第一个实验:我们在node3节点实现一个LNMP架构,测试memcached的基本的使用和web gui界面管理;
第二个实验:我们将node3节点当作httpd和nginx的反向代理节点,在node4和node5节点上搭建tomcat服务器,并安装memcached缓存服务器,实现tomcat的会话保存;我们在node3反向代理节点上将客户端请求负载均衡到后端的tomcat服务器节点,并实现session会话保持;

实验实现过程

三.LNMP构建(Linux+Nginx+Memcached+php-fpm)
1.安装php-fpm和nginx
需要下载nginx的稳定版本:
nginx-1.6.2-1.el6.ngx.x86_64.rpm
1
[iyunv@node3 ~]# yum install -y php-fpmnginx-1.6.2-1.el6.ngx.x86_64.rpm




2.配置nginx支持php-fpm,创建php的测试页
配置nginx启用php:
1
2
3
4
5
6
7
8
[iyunv@node3 ~]# vim/etc/nginx/conf.d/default.conf
   location ~ .php$ {
       root           /usr/share/nginx/html/index.php;
       fastcgi_pass   127.0.0.1:9000;
       fastcgi_index  index.php;
       fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html/$fastcgi_script_name;
       include        fastcgi_params;
    }



如图所示:
wKiom1THhvLj14q5AAEihvMYjjg889.jpg
创建php测试页:
1
2
3
4
[iyunv@node3 ~]# vim/usr/share/nginx/html/index.php
       phpinfo()
?>




3.启动nginx和php-fpm服务器
1
2
3
4
[iyunv@node3 ~]# service nginx start
Starting nginx:                                           [  OK  ]
[iyunv@node3 ~]# service php-fpm start
Starting php-fpm:                                         [  OK  ]




访问测试如图:
wKiom1THhyDCc1USAAQrced1ZpU990.jpg

4.在php-fpm中安装memcached扩展模块
需要下载memcache-2.2.7.tgz,安装前需要php的开发包支持:
我这里提供附件下载;
安装开发包:
[iyunv@node3 ~]# yum install -y php-devel

编译安装memcache-2.2.7.tgz:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[iyunv@node3 ~]# tar xf memcache-2.2.7.tgz
[iyunv@node3 ~]# cd memcache-2.2.7
[iyunv@node3 memcache-2.2.7]# phpize
Configuring for:
PHP Api Version:         20090626
Zend Module Api No:      20090626
Zend Extension Api No:   220090626
[iyunv@node3 memcache-2.2.7]# ./configure
开始安装:
[iyunv@node3 memcache-2.2.7]# make&& make install
信息略......
Installing shared extensions:     /usr/lib64/php/modules/
  
可以发现安装完成生成的模块在/usr/lib64/php/modules/中,我们去查看:
[iyunv@node3 memcache-2.2.7]# cd/usr/lib64/php/modules/
[iyunv@node3 modules]# ls
curl.so fileinfo.so  json.so  memcache.so  phar.so zip.so
有memcache.so这个模块,安装完成。







配置php-fpm加载此模块即可,在如图位置添加扩展模块即可:
1
2
[iyunv@node3 ~]# vim /etc/php.ini
extension =/usr/lib64/php/modules/memcache.so



配置如图所示:
wKioL1THib_yPKLGAAFmUd_OJlg654.jpg
重启php-fpm服务即可:
1
2
3
[iyunv@node3 ~]# service php-fpm restart
Stopping php-fpm:                                          [  OK  ]
Starting php-fpm:                                         [  OK  ]




再次访问测试页可以看见php已经支持memcached扩展了:
wKiom1THiP2iDS6yAAKf4r71hVQ398.jpg

5.安装memcached软件
1
2
3
4
5
libmemcached:是C语言的驱动(api),跟应用连接需要指定的API
版本是libmemcached-0.31-1.1.el6.x86_64
Memcached软件包:
如果希望进行源码编译安装,可以从http://www.memcached.org/ 获取 memcached 源文件;
我的yum源已经有了memcached-1.4.4-3.el6.x86_64。





使用yum源安装:
[iyunv@node3 ~]# yum install -y memcached  libmemcached

不用配置即可启动memcached服务:
1
2
[iyunv@node3 ~]# /etc/init.d/memcached start
Starting memcached:                                        [  OK  ]




查看服务监听端口:
1
2
3
4
5
[iyunv@node3 ~]# netstat -tunlp |grepmemcached
tcp       0      0 0.0.0.0:11211               0.0.0.0:*                   LISTEN      2956/memcached     
tcp       0      0 :::11211                    :::*                        LISTEN      2956/memcached     
udp       0      0 0.0.0.0:11211               0.0.0.0:*                               2956/memcached     
udp       0      0 :::11211                    :::*                                    2956/memcached




基本上一个LNMP的简单架构就构建完成了。我们使用这个做memcached的测试。


四.memcahced的基本使用
1. memcached 参数说明:
1
# memcached -h




2. memcached 的参数
常用参数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
-p  监听的TCP端口号,默认是11211;(port)
-l  监听的主机地址,默认是INADDR_ANY,即所有地址,可以是host:port的形式,如果没有指定port,则使用-p或者-U的值;可以指定多个地址,以逗号分隔或者多次使用-l参数;尽量不要使用默认值,有安全隐患。(listen)
-d 以守护进程运行 (daemon)
-u  指定进程的所有者(只有以root用户执行时才可以使用该参数)(username)
-m  用于存储数据的最大内存,单位是MB,默认是64MB;(memory)
-c  最大并发连接数,默认是1024;
-vv 显示更详细的信息(还显示客户端的命令和响应)
-vvv 显示最详细的信息(还显示内部的状态转变)
-h 显示帮助信息
-P  将PID保存到中,仅和-d参数一起使用;
-f  chunk的增幅因子,默认是1.25,不同的slabclass,slab page大小相同,但是chunk大小不等,chunk的大小根据这个增幅因子增长;(factor)
-n  为key+value+flags分配的最小内存,单位bytes,默认是48;chunk数据结构本身要占据48字节,所以实际大小是n+48;
-t  使用多少个线程,默认是4;(thread)
-I 设置slab page的大小,即设置可以保存的item的最大值,默认1MB,最小是1K,最大值128M;






其它参数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
-U  监听的UDP端口号,默认是11211,0表示关闭UDP监听;(UDP)
-s  要监听的UNIXsocket路径(禁用网络支持)(socket)
-a  UNIX socket的访问掩码(accessmask),八进制表示,默认是0700. (mask)
-r 文件数量的最大值 (rlimit)
-M 内存耗尽时返回错误,而不是通过LRU淘汰内容;
-k 锁定所有页内存;允许被锁定的内存是有限制的,超过限制可能会失败。
-v 显示启动信息(错误和警告信息)(verbose)
-i 显示memcached和libevent的licence信息
-L 一次申请大的内存页(如果可以);增大内存页的大小,可以提高性能;
-D  指定key前缀与ID的分隔符,用于stats信息显示,默认是冒号:,如果使用了该参数,则stats收集自动启用了,否则,需要发送命令“stats detail on”命令来启动stats的收集。
-R 每一个事件(event)的最大请求数,限制最大请求数可以防止线程饥饿,默认是20;
-C 禁用CAS;
-b 设置backlog队列限制,默认1024;
-B 指定绑定协议,ascii,binary或者auto,其中auto是默认值;
3.repcached的参数:
-x  peer主机的主机名或者ip地址;
-X peer主机的TCP端口,即主从同步端口,共同的监听端口






常用的参数组合
1
# memcached -d -m -p 11212 -u nobody -l127.0.0.1 -x 127.0.0.1 -X 11222 -P /tmp/localhost_slave.pid –vv




4.我们安装telnet客户端进行简单memcached键值存储演示

基本命令与操作
存储的命令
主要有:set,add,replace,append,prepend,cas;格式为:
1
2
command key flag expiration_time bytes
value



key表示键,flag表示key/value的额外信息,expiration_time表示过期时间,单位为秒,0表示永不过期,bytes表示值所占的字节数,必须完全匹配,value表示key对应的值,总是出现在第二行。


读取的命令
get根据key获取value值;可以获取多个key的值;get key  get key1 key2 格式为:


set命令表示存储一个key/value对,如果该key已存在,则更新对应的value值;如果成功,返回STORED。
实例:
1
2
3
4
5
6
7
8
9
10
11
12
13
[iyunv@node3 ~]# telnet localhost 11211
Trying ::1...
Connected to localhost.
Escape character is '^]'.
#设置一个简单的testkey,过期时间用不过期,字节长度为11bytes
set testkey 0 60 11
#输入11个字节,必须和上面的完全匹配;
hello world
#获取缓存的键值;
get testkey
VALUE testkey 0 11
hello world
END




add命令也表示增加key/value,如果key/value已存在,add操作失败;保存成功返回STORED,失败返回NOT_STORED。
实例:在telnet下操作
1
2
3
4
5
6
add testkey 0 60 2
hi
STORED
add testkey 0 60 11
hello world
NOT_STORED




replace命令表示更新key对应的value值,如果key/value不存在,replace操作失败;成功返回STORED,失败返回NOT_STORED;
实例:在telnet下操作
1
2
3
4
5
6
7
8
9
10
11
12
13
14
set testkey 0 60 11
hello world
STORED
get testkey
VALUE testkey 0 11
hello world
END
replace testkey 0 60 5
hello
STORED
get testkey
VALUE testkey 0 5
hello
END



由于缓存时间有限,所以超时会自动清空缓存。

append表示在key对应的value值后追加数据,key必须已存在,否则操作失败;成功返回STORED,失败返回NOT_STORED;
实例:在telnet下操作:
1
2
3
4
5
6
7
8
9
10
set testkey 0 60 5
hello
STORED
append testkey 0 60 6
world
STORED
get testkey
VALUE testkey 0 11
hello world
END




prepend在key对应的value值的前面追加数据,key必须已存在,否则操作失败;成功返回STORED,失败返回NOT_STORED;
实例:在telnet下操作;
1
2
3
4
5
6
7
8
9
10
set testkey 0 60 5
world
STORED
prepend testkey 0 60 6
hello
STORED
get testkey
VALUE testkey 0 11
hello world
END




cas (check and set):先比较后存储,即原子更新,原理类似于乐观锁。每次请求存储某个数据时附带一个cas值,memcached比对这个cas值与当前存储数据的cas值是否相等,如果相等,则更新数据,否则操作失败;当前存储的cas值通过gets命令获取。成功返回STORED,失败返回EXISTS。
实例:在telnet下设置:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
set testkey 0 60 11
hello world
STORED
get testkey
VALUE testkey 0 11
hello world
END
cas testkey 0 60 8 10
shanghai
STORED
cas testkey 0 60 8 13
shanghai
EXISTS
get testkey
VALUE testkey 0 8
shanghai
END




get根据key获取value值;可以获取多个key的值;get key  get key1 key2
例子上面很多啦!

delete命令删除key/value对,一次只能删除一个key/value对;如果要删除的key不存在,操作失败:delete key
实例:
1
2
3
4
5
6
7
8
9
10
11
set testkey 0 60 11
hello world
STORED
get testkey
VALUE testkey 0 11
hello world
END
delete testkey
DELETED
get testkey
END




统计的命令
stats显示进程及当前状态等信息。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
[iyunv@node3 ~]# telnet localhost 11211
Trying ::1...
Connected to localhost.
Escape character is '^]'.
Stats
#进程ID
STAT pid 2956
#系统运行的时间,单位:秒
STAT uptime 59841
#系统当前的事件,Unix时间戳表示的时间
STAT time 1422337390
#memcached版本
STAT version 1.4.4
#操作系统字大小(64位)
STAT pointer_size 64
# 进程累计用户时间
STAT rusage_user 1.372791
#进程累计系统时间
STAT rusage_system 1.542765
#当前打开的连接数
STAT curr_connections 10
# 曾打开的连接总数
STAT total_connections 42
#服务器分配的连接结构数
STAT connection_structures 11
#执行get命令的总数
STAT cmd_get 17
#执行set命令的总数
STAT cmd_set 22
#执行flush_all命令的总数
STAT cmd_flush 0
STAT get_hits 12
STAT get_misses 5
STAT delete_misses 0
STAT delete_hits 0
STAT incr_misses 0
STAT incr_hits 0
STAT decr_misses 0
STAT decr_hits 0
STAT cas_misses 0
STAT cas_hits 1
STAT cas_badval 5
STAT auth_cmds 0
STAT auth_errors 0
STAT bytes_read 1295
STAT bytes_written 14526
STAT limit_maxbytes 67108864
STAT accepting_conns 1
STAT listen_disabled_num 0
# 线程数
STAT threads 4
STAT conn_yields 0
#存储的item字节数
STAT bytes 84
#当前item数量
STAT curr_items 1
#item的总数
STAT total_items 13
#为获取空间删除的item数量
STAT evictions 0
END
  
stats items 显示items的相关信息
stats items
STAT items:1:number 1
STAT items:1:age 50209
STAT items:1:evicted 0
STAT items:1:evicted_nonzero 0
STAT items:1:evicted_time 0
STAT items:1:outofmemory 0
STAT items:1:tailrepairs 0
END




stats slabs 显示slab的相关信息
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
stats slabs
STAT 1:chunk_size 96
STAT 1:chunks_per_page 10922
STAT 1:total_pages 1
STAT 1:total_chunks 10922
STAT 1:used_chunks 1
STAT 1:free_chunks 2
STAT 1:free_chunks_end 10919
STAT 1:mem_requested 107
STAT 1:get_hits 12
STAT 1:cmd_set 22
STAT 1:delete_hits 0
STAT 1:incr_hits 0
STAT 1:decr_hits 0
STAT 1:cas_hits 1
STAT 1:cas_badval 5
STAT active_slabs 1
STAT total_malloced 1048512
END




1
2
3
4
stats sizes
stats sizes
STAT 96 1
END




flush_all 使cache中的所有items都过期,server不会停止,也不会刷新或者释放内存。
1
2
3
4
5
6
7
set testkey 0 60 11
hello world
STORED
flush_all
OK
get testkey
END




五.创建基于web gui接口管理memcached

1.web gui 接口的管理软件是phpMemcachedAdmin
通过php编码实现的,phpMemcachedAdmin是一个用来管理memcached的一个可视化的管理工具,采用php的脚本语言实现,参考学习应运于开发实践不错的例子

2.软件安装
软件版本:phpMemcachedAdmin-1.2.2-5.svn262.el6.noarch,由epel源提供。
1
2
3
4
5
6
7
8
9
10
11
安装软件:
[iyunv@node3 ~]# yum install -y phpMemcachedAdmin
查看软件安装路径:
[iyunv@node3 ~]# rpm -ql phpMemcachedAdmin
/etc/httpd/conf.d/phpMemcachedAdmin.conf
/etc/phpMemcachedAdmin
/etc/phpMemcachedAdmin/Memcache.php
/usr/share/doc/phpMemcachedAdmin-1.2.2
/usr/share/doc/phpMemcachedAdmin-1.2.2/LICENSE
/usr/share/phpMemcachedAdmin
信息略





由于它相当于一个web服务器,是memcached的管理后台,我们下面就去配置一下nginx服务器即可:

3.配置nginx服务器
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[iyunv@node3 ~]# vim/etc/nginx/conf.d/default.conf
server {
   listen       80;
   server_name  localhost;
   location / {
       root   /usr/share/phpMemcachedAdmin/;
       index  index.html index.htm;
    }
   error_page   500 502 503 504  /50x.html;
   location = /50x.html {
       root   /usr/share/nginx/html;
    }
  
   location ~ .php$ {
       root          /usr/share/phpMemcachedAdmin/;
        fastcgi_pass   127.0.0.1:9000;
       fastcgi_index  index.php;
       fastcgi_param SCRIPT_FILENAME /usr/share/phpMemcachedAdmin/$fastcgi_script_name;
       include        fastcgi_params;
    }
}





4.配置完成启动nginx服务:

1
2
3
[iyunv@node3 ~]# service nginx restart
Stopping nginx:                                           [  OK  ]
Starting nginx:                                           [  OK  ]



访问测试:
wKioL1THjhvzasM7AAPEurn-Rjw250.jpg


六.通过memcached实现tomcat服务器集群session共享

实验架构图
wKioL1THlRSAgQ1RAAH3DzLJSrs784.jpg


1.在后端tomcat服务器开始安装配置jdk;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
安装jdk:
#rpm -ivh jdk-7u67-linux-x64.rpm
  
配置jdk环境变量
# vim /etc/profile.d/java.sh
export JAVA_HOME=/usr/java/latest
export PATH=$JAVA_HOME/bin:$PATH
  
# source /etc/profile.d/java.sh
  
运行命令显示java的版本和jre运行时环境:
# java -version
java version "1.7.0_67"
Java(TM) SE Runtime Environment (build1.7.0_67-b01)
Java HotSpot(TM) 64-Bit Server VM (build24.65-b04, mixed mode)





2.安装tomcat软件
获得tomcat软件:
apache-tomcat-7.0.55.tar.gz

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
安装tomcat:
#tar xf apache-tomcat-7.0.55.tar.gz -C/usr/local
  
创建软链接:
# cd /usr/local/
# ln -sv apache-tomcat-7.0.55/ tomcat
`tomcat' -> `apache-tomcat-7.0.55/'
  
配置tomcat环境变量:
# vim /etc/profile.d/tomcat.sh
export CATALINA_HOME=/usr/local/tomcat
export PATH=$CATALINA_HOME/bin:$PATH
  
加载环境变量:
# source /etc/profile.d/tomcat.sh




tomcat安装完成;启动tomcat服务:
#catalina start
访问测试:
wKiom1THj0nR9hOIAAMTDohhq5o887.jpg
wKioL1THkBiQgNBhAAMeEbAzT2Y055.jpg


4.在后端tomcat节点安装memcached:
1
# yum install -y memcached libmemcached



安装完成后启动memcached服务:
1
# service memcached start




5.tomcat服务器session会话保持之session服务器配置

MSM(memcached session manager)是一个高可用的Tomcatsession共享解决方案,除了可以从本机内存快速读取Session信息(仅针对黏性Session)外,同时可使用memcached存取Session,以实现高可用。
    对于非黏性Session,memcached直接存储session。
    memcached-session-manager项目地址,http://code.google.com/p/memcached-session-manager/
下载如下jar文件至各tomcat节点的tomcat安装目录下的lib目录中,其中的${version}要换成你所需要的版本号,tc${6,7,8}要换成与tomcat版本相同的版本号。
         memcached-session-manager-${version}.jar
         memcached-session-manager-tc${6,7,8}-${version}.jar
         spymemcached-${version}.jar
         msm-javolution-serializer-${version}.jar
         javolution-${version}.jar

由于我的节点的tomcat服务器版本是7系列的,我们使用的memcached-session-manager的jar包如下:
我这里提供下载,请到附件中下载即可。


将相关的jar包拷贝到指定目录:
1
2
3
4
node4节点:
[iyunv@node4 memcached-session-manager]# cp spymemcached-2.10.2.jar memcached-session-manager-1.8.1.jarjavolution/javolution-5.4.3.1.jar tc7/memcached-session-manager-tc7-1.8.1.jarmsm-javolution/msm-javolution-serializer-1.8.1.jar  /usr/local/tomcat/lib/
node5节点:
[iyunv@node5 memcached-session-manager]# cp spymemcached-2.10.2.jar memcached-session-manager-1.8.1.jar javolution/javolution-5.4.3.1.jartc7/memcached-session-manager-tc7-1.8.1.jarmsm-javolution/msm-javolution-serializer-1.8.1.jar  /usr/local/tomcat/lib/




分别在两个tomcat服务器上的某host上定义一个用于测试的context容器,并在其中创建一个会话管理器,如下所示:

1
2
3
4
5
6
7
8
         
              <managerclassname="de.javakaffee.web.msm.memcachedbackupsessionmanager"
               memcachedNodes="n1:172.16.31.21:11211,n2:172.16.31.22:11211"
                failoverNodes="n1"
               requestUriIgnorePattern=".*.(ico|png|gif|jpg|css|js)$"
               transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory"
              />
            </managerclassname="de.javakaffee.web.msm.memcachedbackupsessionmanager"





详细配置如下:
node4节点的配置:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
[iyunv@node4 ~]# cat/usr/local/tomcat/conf/server.xml








   <resource name="UserDatabase" auth="Container"
             type="org.apache.catalina.UserDatabase"
              description="User databasethat can be updated and saved"
             factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
             pathname="conf/tomcat-users.xml" />


   <connector port="8080" protocol="HTTP/1.1"
              connectionTimeout="20000"
               redirectPort="8443"/>
   
  
   
     
       <realmclassname="org.apache.catalina.realm.userdatabaserealm"
              resourceName="UserDatabase"/>
     </realmclassname="org.apache.catalina.realm.userdatabaserealm"

  
     <host name="node4.stu31.com" appbase="webapps"
           unpackWARs="true" autoDeploy="true">
           
          <managerclassname="de.javakaffee.web.msm.memcachedbackupsessionmanager"
            memcachedNodes="n1:172.16.31.21:11211,n2:172.16.31.22:11211"
             failoverNodes="n1"
            requestUriIgnorePattern=".*.(ico|png|gif|jpg|css|js)$"
            transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory"/>
          </managerclassname="de.javakaffee.web.msm.memcachedbackupsessionmanager"

       <valve classname="org.apache.catalina.valves.AccessLogValve" directory="logs"
              prefix="localhost_access_log." suffix=".txt"
               pattern="%h %l %u %t"%r" %s %b" />
     
   






node5节点的配置:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
[iyunv@node5 ~]# cat/usr/local/tomcat/conf/server.xml








   <resource name="UserDatabase" auth="Container"
             type="org.apache.catalina.UserDatabase"
              description="User databasethat can be updated and saved"
              factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
             pathname="conf/tomcat-users.xml" />


   <connector port="8080" protocol="HTTP/1.1"
              connectionTimeout="20000"
              redirectPort="8443" />
   
  
   
     
       <realm classname="org.apache.catalina.realm.UserDatabaseRealm"
              resourceName="UserDatabase"/>
     
  
     <host name="node5.stu31.com" appbase="webapps"
           unpackWARs="true" autoDeploy="true">
         
          <managerclassname="de.javakaffee.web.msm.memcachedbackupsessionmanager"
            memcachedNodes="n1:172.16.31.21:11211,n2:172.16.31.22:11211"
            failoverNodes="n1"
            requestUriIgnorePattern=".*.(ico|png|gif|jpg|css|js)$"
            transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory"/>
          </managerclassname="de.javakaffee.web.msm.memcachedbackupsessionmanager"

       <valve classname="org.apache.catalina.valves.AccessLogValve" directory="logs"
              prefix="localhost_access_log." suffix=".txt"
               pattern="%h %l %u %t"%r" %s %b" />
     
   





如图所示,我们将其添加到默认的host下:
wKiom1THkCqgTY-2AAM0AmnVb7g703.jpg

分别为两个context提供测试页面:
部署testapp应用:
1
# mkdir/usr/local/tomcat/webapps/testapp/{lib,classes,WEB-INF} -pv




node4节点的testapp部署及测试页面:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# vim/usr/local/tomcat/webapps/testapp/index.jsp
添加如下内容:
<%@ page language="java" %>

Node4

   node4.stu31.com
   


   <% session.setAttribute("stu31.com","stu31.com");%>






Session ID<%= session.getId() %>
Created on<%= session.getCreationTime() %>








node5节点的testapp部署及测试页面:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# mkdir -pv/usr/local/tomcat/webapps/testapp/{WEB-INF,classes,lib}
# vim/usr/local/tomcat/webapps/testapp/index.jsp
添加如下内容:
<%@ page language="java" %>

Node5

   node5.stu31.com
   


   <% session.setAttribute("stu31.com","stu31.com");%>






Session ID<%= session.getId() %>
Created on<%= session.getCreationTime() %>







配置完成后我们重新启动tomcat服务:
1
2
# catalina.sh stop
# catalina.sh start




访问测试:

wKioL1THkafxJtP7AAC9kmjEsA4707.jpg
wKioL1THkduCvWltAADC-UazCDo305.jpg

配额制前端负载均衡节点,使用httpd服务器反向代理请求到后端tomcat服务器节点:
先注释到主配置文件/etc/httpd/conf/httpd.conf中的中心主机,如图:
wKiom1THkRfQpa0wAADayX7TUHs007.jpg
配置反向代理:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
[iyunv@node3 ~]# vim/etc/httpd/conf.d/proxy.conf

   BalancerMember http://172.16.31.21:8080 loadfactor=1
   BalancerMember http://172.16.31.22:8080 loadfactor=1
   ProxySet  lbmethod=byrequests

  
ProxyVia Off
ProxyRequests Off
ProxyPass / balancer://tomcat/
ProxyPassReverse / balancer://tomcat/

   Order Allow,Deny
   Allow From all

  

   Order Allow,Deny
   Allow From all





1
2
3
4
5
6
配置完成后检查语法:
[iyunv@node3 ~]# httpd -t
Syntax OK
  
启动httpd服务器:
[iyunv@node3 ~]# service httpd start




访问测试,可以发现session会话实现了绑定;

wKiom1THkWKQHpyxAACj_unLoIA528.jpg
wKioL1THklGDOetPAACz4tY6xHc626.jpg


我们将node5节点的memcached服务器关闭,看session会话转移到哪里了:
1
2
[iyunv@node5 ~]# service memcached stop
Stopping memcached:                                        [  OK  ]




访问测试:
wKiom1THkZOx3kZJAACuEu-pq-w086.jpg


可以发现节点是转移到了node4,但是session会话的ID未改变,实现了缓存会话功能;
wKioL1THko2hZoG9AADGPrUExHU248.jpg


配置前端负载均衡节点,使用nginx服务器反向代理请求到后端tomcat服务器节点:
关闭httpd服务器:
#service httpd stop

配置nginx的主配置文件,向其中添加upstream服务器:
1
2
3
4
5
[iyunv@node3 ~]# vim /etc/nginx/nginx.conf
   upstream tcsrvs {
       server 172.16.31.21:8080;
       server 172.16.31.22:8080;
    }




如图:
wKioL1THkrWhS5MhAAClJb2w7qg730.jpg
配置默认default.conf文件:
1
2
3
4
5
[iyunv@node3 ~]# vim/etc/nginx/conf.d/default.conf
   location / {
        proxy_pass http://tcsrvs;
       index  index.jsp index.htmlindex.htm;
    }




配置如图:
wKiom1THkfOhwp_tAAFfHyJ1H00801.jpg
配置完成后启动nginx服务器,
[iyunv@node3 ~]# service nginx start

访问测试,

wKioL1THkvqR5tMaAAC-A8MwRr8615.jpg
wKiom1THkivivi9jAADApxH7E8U641.jpg
可以发现实现了会话保持;

至此;Apache/Nginx+Tomcat+Memcahced实现session管理的配置就完成了。


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-41837-1-1.html 上篇帖子: Apache 的vhost文件配置参考 下篇帖子: apache用别名方式,解决不同的目录问题
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表