久久久久久久视色,久久电影免费精品,中文亚洲欧美乱码在线观看,在线免费播放AV片

<center id="vfaef"><input id="vfaef"><table id="vfaef"></table></input></center>

    <p id="vfaef"><kbd id="vfaef"></kbd></p>

    
    
    <pre id="vfaef"><u id="vfaef"></u></pre>

      <thead id="vfaef"><input id="vfaef"></input></thead>

    1. 站長(zhǎng)資訊網(wǎng)
      最全最豐富的資訊網(wǎng)站

      Tomcat之session解決方案

      session方案及配置

      用戶(hù)訪問(wèn)服務(wù)器資源主要分成兩類(lèi),一類(lèi)是無(wú)狀態(tài)訪問(wèn),例如請(qǐng)求一張圖片。另一類(lèi)是有狀態(tài)訪問(wèn),這種情況下,服務(wù)器需要記錄追蹤用戶(hù)狀態(tài),并根據(jù)用戶(hù)所處狀態(tài)做出不同響應(yīng),典型的例子是購(gòu)物車(chē)。Session的作用就是在Web服務(wù)器上保持用戶(hù)的狀態(tài)信息。

      用戶(hù)請(qǐng)求連接服務(wù)器時(shí),服務(wù)器會(huì)生成一個(gè)唯一的sessionID為標(biāo)識(shí)符至用戶(hù)端本地,客戶(hù)端使用該sessionID來(lái)存/取服務(wù)器端的session空間。sessionID是客戶(hù)端瀏覽器cookie保存的。

      當(dāng)客戶(hù)端訪問(wèn)Tomcat集群時(shí),所有的請(qǐng)求將被Nginx攔截,由Nginx做負(fù)載均衡后轉(zhuǎn)發(fā)給后臺(tái)真實(shí)Tomcat。按照這個(gè)流程就可能出現(xiàn)一個(gè)問(wèn)題,當(dāng)用戶(hù)進(jìn)行頁(yè)面刷新或跳轉(zhuǎn)時(shí),每次請(qǐng)求將被轉(zhuǎn)發(fā)給不同的Tomcat處理,這樣就會(huì)造成Session的不同步。舉個(gè)簡(jiǎn)單的栗子,例如當(dāng)用戶(hù)往購(gòu)物車(chē)添加商品時(shí),興高采烈地準(zhǔn)備買(mǎi)單了,當(dāng)他跳轉(zhuǎn)到付款頁(yè)面卻發(fā)現(xiàn)購(gòu)物車(chē)被清空了,這就是Session丟失的典型栗子。因此,我們需要為集群環(huán)境做Session同步。

      單機(jī)環(huán)境下,session可有部署在服務(wù)器上的web容器如:Tomcat進(jìn)行保存管理。但在使用負(fù)載均衡集群時(shí)如架構(gòu)前端Nginx來(lái)負(fù)載均衡后端多臺(tái)Tomcat,所以可能分發(fā)到任何一臺(tái)后端的Tomcat;雖然呢,也有類(lèi)似于Nginx中的ip_hash算法可以將客戶(hù)端和服務(wù)器做一個(gè)綁定,但是弊端太多,生產(chǎn)環(huán)境慎用。

      下面將介紹幾種session的方案

      一、session綁定

      session綁定就是利用負(fù)載均衡服務(wù)器的hash源IP地址算法實(shí)現(xiàn),將來(lái)源于同一個(gè)IP的請(qǐng)求總是分發(fā)到同一臺(tái)后端web服務(wù)器上,又稱(chēng)為會(huì)話粘滯。 但是如果該服務(wù)器死機(jī)或故障,那該用戶(hù)的session空間也就不復(fù)存在了,就如我們網(wǎng)頁(yè)瀏覽購(gòu)物網(wǎng)站時(shí),剛添加到購(gòu)物車(chē)的寶貝,一刷新全沒(méi)了,用戶(hù)體驗(yàn)肯定非常差,所以該session綁定方案使用場(chǎng)景非常有限

      #編輯nginx主配置文件  upstream tomcats {      ip_hash  #使用ip_hash算法調(diào)度    server 192.168.111.4:8080;      server 192.168.111.5:8080;      }

      二、session復(fù)制

      適用于小型架構(gòu)的服務(wù)器集群。開(kāi)啟web服務(wù)器的session復(fù)制功能,在集群中的幾臺(tái)服務(wù)器之間同步session對(duì)象,這樣每臺(tái)服務(wù)器都保存了用戶(hù)的session信息,但是當(dāng)集群規(guī)模比較大時(shí),session復(fù)制機(jī)制會(huì)消耗大量系統(tǒng)資源以及網(wǎng)絡(luò)資源

      操作系統(tǒng) IP地址 軟件版本 主機(jī)名
      CentOS7 192.168.111.3 nginx1.14.2 Nginx
      centos7 192.168.111.4 JDK1.7;Tomcat7.0.54 tnode1
      centos7 192.168.111.5 JDK1.7;Tomcat7.0.54 tnode2

      如有防火墻或selinux記得關(guān)閉或者修改相應(yīng)規(guī)則

      [root@localhost ~]# nginx -v  nginx version: nginx/1.14.2    [root@localhost ~]# vim /etc/hosts      192.168.111.3   nginx      192.168.111.4   tnode1      192.168.111.5   tnode2    [root@localhost ~]# scp /etc/hosts 192.168.111.4:/etc/  [root@localhost ~]# scp /etc/hosts 192.168.111.5:/etc/  #配置hosts文件    #hostname nginx  #hostname tnode1  #hostname tnode2  修改主機(jī)名      [root@nginx ~]# vim /usr/local/nginx/conf/nginx.conf      http {      ...          upstream tomcatpool {              server 192.168.111.4:8080 weight=1 max_fails=1 fail_timeout=10s;              server 192.168.111.5:8080 weight=1 max_fails=1 fail_timeout=10s;              }      #以上為添加      location / {              root   html;              index  index.html index.htm;              proxy_pass http://tomcatpool;          }      #以上為修改添加最下面一行調(diào)用池      安裝配置Tomcat。    [root@tnode1 ~]# tar zxf jdk-7u65-linux-x64.tar.gz   [root@tnode1 ~]# mv jdk1.7.0_65/ /usr/local/java7  [root@tnode1 ~]# echo "PATH=$PATH:/usr/local/java7/bin" >> /etc/profile  [root@tnode1 ~]# source /etc/profile  [root@tnode1 ~]# rm -rf /usr/bin/java  [root@tnode1 ~]# java -version  java version "1.7.0_65"  Java(TM) SE Runtime Environment (build 1.7.0_65-b17)  Java HotSpot(TM) 64-Bit Server VM (build 24.65-b04, mixed mode)  [root@tnode1 ~]# tar zxf apache-tomcat-7.0.54.tar.gz   [root@tnode1 ~]# mv apache-tomcat-7.0.54 /usr/local/tomcat7      [root@tnode2 ~]# tar zxf jdk-7u65-linux-x64.tar.gz   [root@tnode2 ~]# mv jdk1.7.0_65/ /usr/local/java7  [root@tnode2 ~]# echo "PATH=$PATH:/usr/local/java7/bin" >> /etc/profile  [root@tnode2 ~]# source /etc/profile  [root@tnode2 ~]# rm -rf /usr/bin/java  [root@tnode1 ~]# java -version  java version "1.7.0_65"  Java(TM) SE Runtime Environment (build 1.7.0_65-b17)  Java HotSpot(TM) 64-Bit Server VM (build 24.65-b04, mixed mode)  [root@tnode2 ~]# tar zxf apache-tomcat-7.0.54.tar.gz   [root@tnode2 ~]# mv apache-tomcat-7.0.54 /usr/local/tomcat7      [root@tnode1 ~]# vim /usr/local/tomcat7/webapps/ROOT/session.jsp  #測(cè)試頁(yè)面      Session ID:<%= session.getId() %><BR>      SessionPort:<%= request.getServerPort() %>      <% out.println("This tomcat server 192.168.111.4");%>      [root@tnode2 ~]# vim /usr/local/tomcat7/webapps/ROOT/session.jsp      Session ID:<%= session.getId() %><BR>      SessionPort:<%= request.getServerPort() %>      <% out.println("This tomcat server 192.168.111.5");%>        #這是一個(gè)獲取當(dāng)前服務(wù)器所擁有的IP和sessionID的腳本頁(yè)面        下面開(kāi)始配置session復(fù)制(生產(chǎn)環(huán)境時(shí)一般10臺(tái)以下使用該session解決方案    [root@tnode1 ~]# vim /usr/local/tomcat7/conf/server.xml       104     <Engine name="Catalina" defaultHost="localhost" jvmRoute="tnode1">      #改行后面添加jvmroute配置項(xiàng)。      109       <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>      #去掉注釋        [root@tnode1 ~]# vim /usr/local/tomcat7/webapps/ROOT/WEB-INF/web.xml       </description>       #添加至倒數(shù)第二行      [root@tnode2 ~]# vim /usr/local/tomcat7/conf/server.xml       <Engine name="Catalina" defaultHost="localhost" jvmRoute="tnode2">      <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>        [root@tnode1 ~]# vim /usr/local/tomcat7/webapps/ROOT/WEB-INF/web.xml       </description>       #添加至倒數(shù)第二行        [root@tnode1 ~]# /usr/local/tomcat7/bin/shutdown.sh    [root@tnode1 ~]# /usr/local/tomcat7/bin/startup.sh     [root@tnode2 ~]# /usr/local/tomcat7/bin/shutdown.sh     [root@tnode2 ~]# /usr/local/tomcat7/bin/startup.sh         客戶(hù)端使用火狐瀏覽器輸入:http://192.168.111.3/session.jsp來(lái)進(jìn)行測(cè)試,并且刷新(別強(qiáng)制刷新,那樣是新的sessionID)

      三、使用memcached解決session問(wèn)題

      memcached是一套分布式的快取系統(tǒng),相關(guān)數(shù)據(jù)都是在內(nèi)存里,一旦服務(wù)重啟或者死機(jī),則數(shù)據(jù)必然丟失;memcached是鍵值對(duì)存儲(chǔ)形式;在以下試驗(yàn)中,每個(gè)session都會(huì)在這兩臺(tái)memcached上進(jìn)行分布式存儲(chǔ),有了冗余性,即使一臺(tái)出問(wèn)題也不影響工作。同樣只適用于中小型架構(gòu)。
      Tomcat之session解決方案

      以下的配置兩臺(tái)Tomcat一樣

      [root@tnode1 ~]# yum -y install libevent memcached  #安裝memcached及其依賴(lài)    [root@tnode1 ~]# memcached -u root -m 512M -n 10 -f 2 -d -vvv -c 512      //-u:運(yùn)行用戶(hù)必須是root身份      //-m:指定使用物理機(jī)的多少內(nèi)存      //-n:chunk size的最小空間是多少字節(jié)      //-f:chunk size大小增長(zhǎng)的倍數(shù)默認(rèn)1.25倍      //-d:在后臺(tái)啟動(dòng)      //-vvv:顯示詳細(xì)信息      //-c:memcached服務(wù)的最大連接數(shù)  Tomcat連接memcached所依賴(lài)的庫(kù)文件:  javolution-5.5.1.jar                     memcached-session-manager-1.5.1.jar      msm-kryo-serializer-1.6.4.jar  kryo-1.03.jar                            memcached-session-manager-tc7-1.5.1.jar  reflectasm-0.9.jar  kryo-serializers-0.10.jar                minlog-1.2.jar                           spymemcached-2.7.3.jar  memcached-2.5.jar                        msm-javolution-serializer-1.5.1.jar   將這些文件放到/usr/local/tomcat7/lib/目錄下    配置文件連接memcached。  [root@tnode2 ~]# vim /usr/local/tomcat7/conf/context.xml       <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager" memcachedNodes="memA:192.168.111.4:11211 memB:192.168.111.5:11211" requestUrilgnorePattern=".*(ico|png|gif|jpg|css|js)$" transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"/>        [root@tnode2 ~]# /usr/local/tomcat7/bin/shutdown.sh   [root@tnode2 ~]# /usr/local/tomcat7/bin/startup.sh  #重啟服務(wù)    測(cè)試頁(yè)仍然使用以上的那個(gè)測(cè)試頁(yè)    瀏覽器訪問(wèn)http://192.168.111.3/session.jsp測(cè)試,可以看到sessionID不變

      四、使用redis解決session問(wèn)題

      注意:盡量保持系統(tǒng)環(huán)境的純凈

      如果使用如上做完memcached環(huán)境接著做redis    1.rpm -e memcached-1...  2.vim /usr/local/tomcat7/conf/context.xml  3.pkill -9 memcached  4.刪除相關(guān)jar包        安裝部署redis  [root@tnode1 ~]# tar zxf redis-3.2.5.tar.gz   [root@tnode1 ~]# yum -y install tcl  #依賴(lài)包    [root@tnode1 src]# mkdir /usr/local/redis/{bin,etc,var} -pv      [root@tnode1 src]# cp ~/redis-3.2.5/src/redis-benchmark redis-check-aof redis-cli redis-server /usr/local/redis/bin/  //redis-benchmark:讀寫(xiě)性能測(cè)試工具  //redis-cli:redis命令行操作工具  //redis-server:redis服務(wù)的daemon啟動(dòng)程序  [root@tnode1 src]# cp ~/redis-3.2.5/redis.conf /usr/local/redis/etc/  //redis的主配置文件      [root@tnode1 src]# vim /usr/local/redis/etc/redis.conf      128 daemonize yes      #表示將redis啟動(dòng)在后臺(tái)            61 bind 0.0.0.0      #監(jiān)聽(tīng)所有主機(jī)      [root@tnode1 src]# /usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf   [root@tnode1 src]# netstat -anpt | grep redis  tcp        0      0 0.0.0.0:6379            0.0.0.0:*               LISTEN      69432/redis-server    #啟動(dòng)并且查看端口      Tomcat和redis連接需要用到如下包:  commons-logging-1.1.3.jar                jedis-2.5.2.jar                          tomcat-redis-session-manage-tomcat7.jar  commons-pool2-2.2.jar                    tomcat-juli.jar                              [root@tnode1 ~]# vim /usr/local/tomcat7/conf/context.xml   #連接redis配置  <Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" />  <Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager" host="192.168.111.4" port="6379" database="0" maxInactiveInterval="60" />  #Context字段中添加如上,IP為redis服務(wù)器的IP。      #如下可以先把node2上該lib目錄刪掉,直接復(fù)制覆蓋  [root@tnode1 ~]# scp -r /usr/local/tomcat7/lib root@192.168.111.5:/usr/local/tomcat7/lib    #如下是直接覆蓋node2配置文件  [root@tnode1 ~]# scp /usr/local/tomcat7/conf/context.xml root@192.168.111.5:/usr/local/tomcat7/conf/    #然后node2上重啟Tomcat服務(wù),可多重啟幾遍順便觀察node1上的redis監(jiān)視狀態(tài),并且時(shí)刻關(guān)注本機(jī)catalina.out日志變化是否異常。      #如下是正常情況下redis監(jiān)視的狀態(tài)輸出  [root@tnode1 src]# /usr/local/redis/bin/redis-cli -p 6379 monitor    1556385116.932343 [0 192.168.111.4:37948] "EXPIRE" "DCF23D098140E899E20A996990F690D5" "1800"  1556385116.970109 [0 192.168.111.4:37948] "GET" "DCF23D098140E899E20A996990F690D5"  1556385116.972760 [0 192.168.111.4:37948] "EXPIRE" "DCF23D098140E899E20A996990F690D5" "1800"  1556385117.582753 [0 192.168.111.4:37948] "GET" "DCF23D098140E899E20A996990F690D5"  1556385117.584391 [0 192.168.111.4:37948] "EXPIRE" "DCF23D098140E899E20A996990F690D5" "1800"  1556385117.599639 [0 192.168.111.4:37948] "GET" "DCF23D098140E899E20A996990F690D5"  1556385117.600743 [0 192.168.111.4:37948] "EXPIRE" "DCF23D098140E899E20A996990F690D5" "1800"  1556385125.008432 [0 192.168.111.4:37948] "PING"  1556385155.006175 [0 192.168.111.4:37948] "PING"  1556386097.450914 [0 192.168.111.5:34118] "SETNX" "F7379EF99F21FD0BBF830056FEF162A0" "null"  1556386097.575639 [0 192.168.111.5:34118] "SET" "F7379EF99F21FD0BBF830056FEF162A0" "xacxedx00x05srx00Dcom.orangefunction.tomcat.redissessions.S  essionSerializationMetadataBxd9xd9xf7vxa2xdbLx03x00x01[x00x15sessionAttributesHashtx00x02[Bxpwx14x00x00x00x10x1fxa2xa9ox15x7fxe1Wx9cx9cxc6xc2xb0xd5xe2xa8xsrx00x0ejava.lang.Long;x8bxe4x90xccx8f#xdfx02x00x01Jx00x05valuexrx00x10java.lang.Numberx86xacx95x1dx0bx94xe0x8bx02x00x00xpx00x00x01j3x83Fxddsqx00~x00x03x00x00x01j3x83Fxddsrx00x11java.lang.Integerx12xe2xa0xa4xf7x81x878x02x00x01Ix00x05valuexqx00~x00x04x00x00absrx00x11java.lang.Booleanxcd rx80xd5x9cxfaxeex02x00x01Zx00x05valuexpx01qx00~x00nsqx00~x00x03x00x00x01j3x83Fxddtx00 F7379EF99F21FD0BBF830056FEF162A0sqx00~x00ax00x00x00x00wbx00x00x01j3x83Fxdd"1556386097.577377 [0 192.168.111.5:34118] "EXPIRE" "F7379EF99F21FD0BBF830056FEF162A0" "1800"  1556386097.586858 [0 192.168.111.5:34118] "EXPIRE" "F7379EF99F21FD0BBF830056FEF162A0" "1800"  1556386099.395455 [0 192.168.111.5:34118] "GET" "F7379EF99F21FD0BBF830056FEF162A0"  1556386099.403983 [0 192.168.111.5:34118] "EXPIRE" "F7379EF99F21FD0BBF830056FEF162A0" "1800"  1556386099.410867 [0 192.168.111.5:34118] "GET" "F7379EF99F21FD0BBF830056FEF162A0"  1556386099.413166 [0 192.168.111.5:34118] "EXPIRE" "F7379EF99F21FD0BBF830056FEF162A0" "1800"  1556386099.855877 [0 192.168.111.5:34118] "GET" "F7379EF99F21FD0BBF830056FEF162A0"  1556386099.857305 [0 192.168.111.5:34118] "EXPIRE" "F7379EF99F21FD0BBF830056FEF162A0" "1800"  1556386100.497947 [0 192.168.111.5:34118] "GET" "F7379EF99F21FD0BBF830056FEF162A0"        客戶(hù)端訪問(wèn)http://192.168.111.3/session.jsp,是Nginx的地址來(lái)進(jìn)行測(cè)試,正常時(shí)是sessionID不會(huì)變的  

      五、memcached和redis對(duì)比表

      、 內(nèi)存利用率 性能 數(shù)據(jù)持久化 其它
      redis 鍵值對(duì)村存儲(chǔ)利用率低于memcached,但使用hash結(jié)構(gòu)存儲(chǔ)則超過(guò)后者 只使用單核CPU,數(shù)據(jù)大小100K以下快于后者 支持?jǐn)?shù)據(jù)持久化(保存到硬盤(pán)) Redis 支持?jǐn)?shù)據(jù)的備份,即 master-slave 模式的數(shù)據(jù)備份,支持多種數(shù)據(jù)結(jié)構(gòu)的存儲(chǔ)
      memcached 如上 可以使用多核,100K以上快于前者 自身不支持持久化,但可以結(jié)合其他數(shù)據(jù)庫(kù)做架構(gòu)如:memcached + bdb 兩者性能都屬于非常不錯(cuò)的,而且也都是開(kāi)源免費(fèi)。
      贊(0)
      分享到: 更多 (0)
      網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)