共享

来源:互联网 发布:淘宝怎么发布宝贝详情 编辑:程序博客网 时间:2024/06/11 20:49

   前言: 公司的产品上线了, 对于大并发量的客户访问和对手的攻击,真是苦不堪言,所以集群的部署重要,现在集群的部署一般有两种方式,第一种,看到大部分人的做法一般是Nginx+Memcached+Tomcat进行一系列的转发部署,但是说实话,我们自己去搞这个Nginx,转发的效果并不是那么的完美,如果Nginx的服务器down掉的话,那么我们的整个站点,基本上就废除了,所以我这边用的的买了阿里云的ecs,买了一个负载均衡,进行的站点转发功能,其中阿里云的安全骑士也挺好,可以帮我们检测到攻击,那两台不同ip的服务器,由一个主ip去进行了映射,比如192.168.1.101和192.168.1.102两台centos上部署了两个tomcat,由我们的主ip192.168.1.100去访问,转发到两者上,那么问题来了,如果其中的一台down掉后,用户就必须重新登陆了,更为严重的是,如果在支付环节出现了这样的问题,那么后果不堪设想,我们今天使用Memcached +Tomcat7的环境,做一个会话共享转移.

Memcached 环境安装

1.下载编译文件
  wget http://www.memcached.org/files/memcached-1.4.29.tar.gz ----下载memcached源文件
  wget https://cloud.github.com/downloads/libevent/libevent/libevent-2.0.15-stable.tar.gz -----下载libevent源文件
2.安装编译:
# tar zxvf libevent-2.0.5-beta.tar.gz# cd libevent-2.0.5# ./configure –prefix=/usr# make# make install
tar zxvf memcached-1.4.2.tar.gz  cd memcached-1.4.2  ./configure  --with-libevent=/usr  make  make install
3.检查是否安装成功
# ls -al /usr/local/bin/mem*
如果执行完毕出现了一行绿色的信息,说明安装成功
4.启动memcached服务
/usr/local/bin/memcached -d -m 10 -u root -l 192.168.141.64 -p 12000 -c 256 -P /tmp/memcached.pid
-d选项是启动一个守护进程,
-m是分配给Memcache使用的内存数量,单位是MB,我这里是10MB,
-u是运行Memcache的用户,我这里是root,
-l是监听的服务器IP地址,如果有多个地址的话,我这里指定了服务器的IP地址192.168.0.200,
-p是设置Memcache监听的端口,我这里设置了12000,最好是1024以上的端口,
-c选项是最大运行的并发连接数,默认是1024,我这里设置了256,按照你服务器的负载量来设定,
-P是设置保存Memcache的pid文件,我这里是保存在 /tmp/memcached.pid
5.测试是否启动成功
[root@localhost /]# telnet 192.168.141.64 12000Trying 192.168.141.64...Connected to 192.168.141.64 (192.168.141.64).Escape character is '^]'.set key1 0 60 4zhouSTOREDget key1VALUE key1 0 4zhouEND
到此安装成功了
6.配置启动项
我们将memcached配置成为开机启动项,省心又省力
假如启动Memcache的服务器端的命令为:
# /usr/local/bin/memcached -d -m 10 -u root -l 192.168.141.64 -p 12000 -c 256 -P /tmp/memcached.pid
想开机自动启动的话,只需在/etc/rc.d/rc.local中加入一行,下面命令
/usr/local/memcached/bin/memcached -d -m 10 -p 12000 -u apache -c 256
上面有些东西可以参考一下:即,ip不指定时,默认是本机,用户:最好选择是:apache 或 deamon
这样,也就是属于哪个用户的服务,由哪个用户启动。

Tomcat7 环境安装

tomcat和jdk的安装环境,在此就不多说了,将java环境装好,tomcat下载一个解压版的就可以了,我这边用的是7.063版本的。下载tomcat

配置会话共享

1.添加tomcat环境jar

这是我所用到的jar全部的包,再次我提供一个下载链接,请严格安装下载包中的说明进行部署 下载jar包
上面红色的两个,tc7指的是使用了tomcat7版本,如果是6版本的话请更新为tc6的jar,将现在所有的jar放入tomcat/lib目录下。
注意点:
-msm1.6.5依赖了Couchbase,需要添加couchbase-client的jar包,否则启动会报:java.lang.NoClassDefFoundError: com/couchbase/client/CouchbaseClient。
-tomcat6和7使用不同msm支持包:memcached-session-manager-tc6-1.6.5.jar和memcached-session-manager-tc7-1.6.5.jar,只可选一,否则启动报错。
-msm源码中的lib包版本太低:spymemcached-2.7.jar需要使用2.10.2,否则启动tomcat报错:
java.lang.NoSuchMethodError: net.spy.memcached.MemcachedClient.set(Ljava/lang/String;ILjava/lang/Object;)Lnet/spy/memcached/internal/OperationFuture;
at de.javakaffee.web.msm.BackupSessionTask.storeSessionInMemcached(BackupSessionTask.java:227)

kryo-serializers-0.8.jar需要使用0.10版本,否则报错:
Caused by: java.lang.ClassNotFoundException: de.javakaffee.kryoserializers.DateSerializer
2.修改context.xml
在tomcat目录下conf中找到context.xml文件,并添加为一下内容
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"    memcachedNodes="n1:112.74.210.155:12000"    requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"     sessionBackupAsync="false"     sessionBackupTimeout="1800000"    transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"    />
到此为止呢,负载均衡的会话共享已经完成了,当使用100去访问,如果其中down掉了一台服务器的话,会话也不会丢失,一下午的辛酸啊 。。。。

Nginx方式

很多人还是中意于不花钱的Nginx的方式去实现负载均衡,那么上述的共享session的方式不变,我们只需要搭建一个Nginx的转发http服务即可
1.安装Nginx
#yum install pcre* //nginx 依赖pcre类库#useradd nginx#tar xf /share/soft/lamp/nginx/nginx-1.4.7.tar.gz -C /usr/src/#cd /usr/src/nginx-1.4.7#./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_gzip_static_module --with-http_stub_status_module# make && make install
2.配置转发服务
user nginx nginx;worker_processes 5;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;use epoll;}http {upstream session {server 10.1.1.217:8080 weight=1 max_fails=2 fail_timeout=30s;server 10.1.1.218:8080 weight=1 max_fails=2 fail_timeout=30s;}server {listen 80;server_name 10.1.1.217;root /nginxroot/;location ~ \.(txt|jsp)$ {proxy_pass http://session;}proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header Host $http_host;}}mkdir /nginxroot/

Manager标签属性说明
1.className 必须
类名:de.javakaffee.web.msm.MemcachedBackupSessionManager
2.memcachedNodes 必须
memcached节点:此属性应该包含所有运行的 memcached节点或者membase bucket的uri地址,每一个memcached节点的属性定义格式为<id>:<host>:<port>, 多个节点定义直接使用空格或者逗号分隔,形如:memcachedNodes="n1:app01:11211,n2:app02:11211",如果只 有单个的memcached节点,则<id>是可选项,只需配置<host>:<port>即可,形 如:memcachedNodes="localhost:11211"。
如果我们配置的是membase,那么从1.6.0版本开始,我们可以配置指定一个或者多个membase bucket uris,形如:http://host1:8091/pools,http://host2:8091/pools。Bucket 名称和密码通过属性username,password来定义。membase buckets连接需要遵循memcached协议,传输数据通过二进制流方式。
3.failoverNodes 可选项
故障转移节点:可选项,对非黏性session不可用,属性必须包含memcached节点集群的所有ids。节点id之间用空格或者逗号分隔。
4.username 可选项
从1.6.0版开始使用,并且是可选的。用来进行membase bucket或者SASL验证,密码可以为空。
5.password 可选项
从1.6.0版开始使用,并且是可选的。用来进行membase bucket或者SASL验证,密码可以为空。
6.memcachedProtocol 可选项
定义memcached协议,默认使用text文本,出属性指明memcached使用的存储协议。只支持text或者binary。
7.sticky 可选项
定义session方式为黏性或非黏性,默认为true,多个tomcat时需使用非黏性
8.lockingMode 可选项
只有非黏性session才使用,默认值为none
none: 从不对session进行锁定
all: session将一直被锁定,知道请求结束
auto: 对于只读请求,session将不会被锁定,如果是非只读请求,则session会被锁定
uriPattern:<regexp>: 通过正则表达式的方式来对请求uri以及查询字符串进行匹配,只有匹配上的才会被锁定。
9.requestUriIgnorePattern 可选项
此属性是那些不能改备份Session的请求的正则表达式。如果像css,javascript,图片等静态文件被同一个Tomcat和同一个应用 上下文来提供,这些请求也会通过memcached-session-manager。但是这些请求在一个http会话中几乎没什么改变,所以他们没必要 触发Session备份。所以那些静态文件没必要触发Session备份,你就可以使用此属性定义。此属性必须符合java regex正则规范。
如:".*\.(png|gif|jpg|css|js)$"

10.sessionBackupAsync 可选项
指定Session是否应该被异步保存到Memcached中。 如果被设置为true,backupThreadCount设置起作用,如果设置false,通过sessionBackupTimeout设置的过期时间起作用。
11.backupThreadCount 可选项
用来异步保存Session的线程数,(如果sessionBackupAsync="true")。默认值为cup的内核数。
12.sessionBackupTimeout 可选项
设置备份一个Session所用的时间,如果操作超过时间那么保存失败。此属性只在sessionBackupAsync="false"是起作用。默认100毫秒
13.operationTimeout 可选项
从1.6.0版开始使用, 默认值为1000
14.sessionAttributeFilter 可选项
此属性是用来控制Session 中的那个属性值保存到Memcached中的正则表达式。郑则表达式被用来匹配Session中属性名称。如 sessionAttributeFilter="^(userName|sessionHistory)$" 指定了只有"userName"和"sessionHistory"属性保存到Memcached中。依赖于选择的序列化策略。
15.transcoderFactoryClass 可选项
此属性值是创建序列化和反序列化 保存到Memcached中的Session的编码转换器的工厂类名。这个指定的类必须实现了 de.javakaffee.web.msm.TranscoderFactory和提供一个无参的构造方法。例如其他的有效的实现在其他 packages/jars中提供如:msm-kryo-serializer,msm-xstrea-serializer和msm- javolution-serializer.
默认为 de.javakaffee.web.msm.JavaSerializationTranscoderFactory
16.copyCollectionsForSerialization 可选项
默认值为false。
17.customConverter 可选项
自己定义特殊的类注册到kryo自定义转换器中,实现序列化
18.enableStatistics 可选项
用来指定是否进行统计。 默认值为true。
19.enabled 可选项
指定Session保存到Memcached中是否可用和是否可以通过JMX进行改变。只用于粘性Session。 默认值为true。

1 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 一只单眼皮一只双眼皮怎么办 儿童轻轻泥干了怎么办 5d轻轻泥干了怎么办 手机炉石一直闪退怎么办 鸟之羽任务失败怎么办 巫师3没血没药怎么办 荣威rx5灯光不亮怎么办 点滴打没了回血怎么办 加了低标号的油怎么办 别克车钥匙丢了怎么办 霜子哀伤断了怎么办 侧车窗外有雨水怎么办 昂科威15t变速箱异响怎么办 别克昂科拉一公里9毛怎么办? 雷诺科雷傲车钥匙丢了怎么办 奥迪a6l烧机油了怎么办 卡地亚手镯刮花怎么办 卡地亚戒指花了怎么办 手表摔了不走了怎么办 ck手表表扣很难打开怎么办 小天才泡了水怎么办 小天才手表掉水里了怎么办 小天才电话手表进水了怎么办 小天才手表进水了怎么办 小天才电话手表丢了怎么办 小天才电话手表黑屏怎么办 安全守护注册码忘记了怎么办 儿童安全锁的门打不开怎么办 守护宝老年机打不开了怎么办 小米电话手表坏了怎么办 小米手表带坏了怎么办 小米电话手表屏幕坏了怎么办 雷诺梅甘娜06款系统错乱怎么办 轿车碰了一个坑怎么办 车子卖了没过户怎么办 9岁儿童肠胃痉挛怎么办 鹿角胶水放多了怎么办 打胰岛素血糖还是高怎么办 血糖高打胰岛素降不下去怎么办 儿童低烧37度1怎么办 小孩发烧一会冷一会热怎么办