前言: 公司的產品上線了, 對於大併發量的客戶訪問和對手的攻擊,真是苦不堪言,因此集羣的部署重要,如今集羣的部署通常有兩種方式,第一種,看到大部分人的作法通常是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的環境,作一個會話共享轉移.javascript
# 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
/usr/local/bin/memcached -d -m 10 -u root -l 192.168.141.64 -p 12000 -c 256 -P /tmp/memcached.pid
[root@localhost /]# 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到此安裝成功了
<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" />
#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
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。css