1. 程式人生 > >Java + Tomcat + Memcached + Ecs 實現負載均衡~上

Java + Tomcat + Memcached + Ecs 實現負載均衡~上

itl 說明 figure trying roo context use ges ip地址

前言: 公司的產品上線了, 對於大並發量的客戶訪問和對手的攻擊,真是苦不堪言,所以集群的部署重要,現在集群的部署一般有兩種方式,第一種,看到大部分人的做法一般是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.測試是否啟動成功
[[email protected] /]# telnet 192.168.141.64 12000
Trying 192.168.141.64...
Connected to 192.168.141.64 (192.168.141.64).
Escape character is ‘^]‘.
set key1 0 60 4
zhou
STORED
get key1
VALUE key1 0 4
zhou
END
到此安裝成功了 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掉了一臺服務器的話,會話也不會丟失。

其中,要註意,請看context.xml中配置的,Kryo,這個就是將session會話進行序列化的方式,但是如果我們在會話中存入了使用Java序列化的對象,那麽就會出錯,在此處,我提供一個序列化配置的大全以及相關的文件包和開發環境內容,希望可以幫到大家。

http://download.csdn.net/download/u014201191/9964411

  

  

  

Java + Tomcat + Memcached + Ecs 實現負載均衡~上