前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >运维|Nginx+Tomcat+Memcached实现负载均衡及Session共享

运维|Nginx+Tomcat+Memcached实现负载均衡及Session共享

作者头像
黄小怪
发布2018-05-21 15:27:42
1K0
发布2018-05-21 15:27:42
举报
文章被收录于专栏:小怪聊职场小怪聊职场
一、环境介绍

我这里使用了两台Linux服务器,一台安装Nginx、Memcached、Tomcat服务器1,另一台服务器安装Tomcat服务器2。

二、Nginx+Tomcat实现负载均衡

1、安装nginx及tomcat,如果两个Tomcat在同一个服务器时需要修改这两个Tomcat的启动端口为不一样。

2、nginx负载均衡配置,只需要配置nginx.conf配置文件即可。

nginx.conf配置

1)当用户请求vrlisty.com或www.vrlisty.com(1)时,则交由名称为netitcast的Nginx集群来处理(2)。

2)找到对应的服务器集群名称,最终的请求会被转发到集群的服务器列表进行处理。

3、关于nginx负载均衡的策略,有以下几种方式:

1)ip_hash

根据客户端地址,同一个ip地址分配给同一台后端服务器处理,这样可以解决session的问题。但是如果该后端服务器宕掉,则session会失效。

缺点:局域网内的用户使用的是同一个公网IP,这对于ip_hash来说,会被认为是同一个客户端,因此总是会将这个公网ip的请求交给同一个后端服务器来处理,因此起不到负载均衡的作用。

2)轮询

每一个请求,按照时间顺序,逐一分配给后端不同的服务器。

缺点:需要对后端服务器做session共享。

3)权重

每个请求,根据后端服务器的权重值来转发。权重越大,表明该服务器处理能力相对越高。主要用于后端服务器性能不同的情况。上面的配置使用的就是权重。

三、Memcached+Tomcat实现session共享

1、使用Memcached缓存来存储session信息,后端服务器都可以从该缓存中读写session。

2、Tomcat配置文件主要是conf文件里的context.xml文件,还有/lib的jar包。

Context文件是配合memcached进行session同步,在之间添加配置就可以。如果只部署一台memcached那memcachedNodes只要写一个。如果你安装了多台memcached,那么需要把安装多台memca的地址都写上,用空格分开即可。

memcachedNodes="n1:IP地址:端口"  #这个ip是安装memca的服务器的ip sticky="false" sessionBackupAsync="false" lockingMode="auto" requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"/>

添加tomcat8的jar包。

memcached-session-manager依赖于memcached-session-manager-${version}.jar,如果使用的是tomcat8,则还需要下载memcached-session-manager-tc8-2.1.1.jar,并且它还依赖memcached-${version}.jar进行memcacher的访问。在启动Tomcat之前,需要将这些jar放在$CATALINA_HOME/lib/目录下。如果使用第三方序列化方法,如Kryo,还需要在Web工程中引入相关的第三方库,Kryo序列化所依赖的库,包括kryo-${version}.jar、kryo-serializers-${version}.jar和msm-kryo-serializer-${version}.jar。

asm-3.2.jar kryo-1.04.jar kryo-serializers-0.11.jar memcached-session-manager-2.1.1.jar memcached-session-manager-tc8-2.1.1.jar minlog-1.2.jar msm-kryo-serializer-2.1.1.jar reflectasm-1.01.jar spymemcached-2.7.3.jar

3、共享的实体需要序列化(Serializable)。

序列化是指将对象以字符串形式在网络上传输、存储、读取的过程。比如我们在加上负载均衡之后要使得用户登录信息实现session共享,那么该用户信息一定要序列号。切记!!

public class AuthorInfoSession implements Serializable{...}

四、启动

1)启动Memcached

#cd /usr/local/bin //进入到该目录 # ./memcached -d -m 900 -u root -l 192.168.100.186 -p 11211 -c 256 -P /tmp/memcached.pid 

启动参数说明:

-d   选项是启动一个守护进程, -m  是分配给Memcache使用的内存数量,单位是MB,默认64MB -M  return error on memory exhausted (rather than removing items) -u  是运行Memcache的用户,如果当前为root 的话,需要使用此参数指定用户。 -l   是监听的服务器IP地址,默认为所有网卡。 -p  是设置Memcache的TCP监听的端口,最好是1024以上的端口 -c  选项是最大运行的并发连接数,默认是1024 -P  是设置保存Memcache的pid文件 -f  chunk size growth factor (default: 1.25) -I   Override the size of each slab page. Adjusts max item size(1.4.2版本新增)

也可以启动多个守护进程,但是端口不能重复。

停止Memcache进程:

kill 'cat /tmp/memcached.pid'

2)启动Nginx

nginx -c /etc/nginx/nginx.conf

3)启动Tomcat1和Tomcat2

到此,我们利用Nginx已经实现了负载均衡的Tomcat集群。我们不断的刷新,发现访问Tomcat2的概率大概是Tomcat1的2倍,这是因为我们在Nginx中配置的两台Tomcat的权重起的作用。

五、常见问题(持续添加)

1、各自的tomcat在各自的memcached上寻找各自sessionid值,而且总变。

可能是你安装了多个memcached,并且没有在memcachedNodes把多个安装memca的服务器id配置上。

也有可能是你的lib包有问题,不过lib包有问题tomcat会报错,这样也会导致session同步会失败,你可以看看你的tomcat有没有报错。


写技术文章就是悲催,真的没多少人点赞吗

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017.05.02 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
负载均衡
负载均衡(Cloud Load Balancer,CLB)提供安全快捷的流量分发服务,访问流量经由 CLB 可以自动分配到云中的多台后端服务器上,扩展系统的服务能力并消除单点故障。负载均衡支持亿级连接和千万级并发,可轻松应对大流量访问,满足业务需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档