1. 程式人生 > >memcache在tomcat中實現session交叉存放

memcache在tomcat中實現session交叉存放

###jdk 首先從官網下載jdk包 tar   zxf  jdk-7u79-linux-x64.tar.gz  -C   /usr/loacl   ##-C  指定路徑 cd   /usr/local/ ls ln  -s   jdk1.7.0_79  java   ##做軟連結 ll   -d   /usr/local/java

##加永久的環境變數 vim  /etc/profile  ##在最後面加 export  JAVA_HOME=/usr/local/java export  CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib export  PATH=$PATH:$JAVA_HOME/bin source  /etc/profile

##檢視環境變數時候載入成功 echo   $PATH  ##輸出環境變數 echo   $JAVA_HOME  ##/usr/local/java

java javac cd

###編譯測試 vim   test.java public  class  test  {    public  static  void  main(String[]  args) {      System.out.println("hello  world!"); } }

javac  test.java  ##編譯 ll  test.class java  test  ##顯示hello  world

##做apache-tomcat加速 去官網下載 apache-tomcat包 tar   zxf apache-tomcat-7.0.37.tar.gz  -C  /usr/local cd  /usr/local ls ln -s   apache-tomcat-7.0.37   tomcat

cd  tomcat bin/startup.sh   #開啟tomcat netstat  -antlp  | grep  :8080

在瀏覽器訪問 tomcat.apache.org http://172.25.254.1:8080  #也能看見tomcat

/opt/nginx/nginx/sbin/nginx  -s stop     ##關閉不含有openstrey的nginx nginx   cd  /usr/local/lnmp/nginx/conf vim  nginx.conf    ##修改配置檔案 加入 location  ~ \.jsp$ {     proxy_pass   http://172.25.254.1:8080; }

nginx  -t nginx  -s reload cd   /usr/local/tomcat/webapps/ROOT vim  test.jsp the   time  is: <%=new  java.util.Date() %>

在瀏覽器訪問  172.25.17.11/test.jsp

##這時我們需要開啟另外一臺虛擬機器 ###將apacha和jdk軟體包考到server2裡面     6  cd     7  scp   apache-tomcat-7.0.37.tar.gz   jdk-7u79-linux-x64.tar.gz   [email protected]:/root 在server2裡面解壓 117  tar   zxf   jdk-7u79-linux-x64.tar.gz   -C  /usr/local   118  tar   zxf  apache-tomcat-7.0.37.tar.gz   -C  /usr/local   119  cd   /usr/local   120  ls   121  ln  -s  jdk1.7.0_79/  java   122  ln  -s  apache-tomcat-7.0.37/  tomcat

在server1裡面改環境變數     8 vi  /etc/profile 將環境變數複製到server2裡面##有關java的 124  vi  /etc/profile 125  source  /etc/profile

在server2裡面啟動tomcat 126  ls   127  cd  tomcat/   128  ls   129  bin/startup.sh  130  netstat  -antlp  #檢視埠

進去server1裡面     9  cd  /usr/local/lnmp    10  cd  nginx    11  ls    12  cd conf    13  ls    14  vi   nginx.conf http {       upstream  tomcat {      server 172.25.17.11:8080;      server  172.25.17.12:8080;      #增加後端埠    }     include       mime.types;     default_type  application/octet-stream;

location ~ \.jsp$ {                   proxy_pass  http://tomcat;    #迴圈模式改為tomcat模式       }

   15  nginx  -t    16  nginx -s  reload         cd  ..         cd ..    17  cd ..    18  cd tomcat/    19  ls    20  cd webapps/ROOT/    21  ls    22  scp  test.jsp  172.25.17.12:/usr/local/tomcat/webapps/ROOT/ ##發給server2    24  vi  test.jsp   #為了區分,可以給裡面加入伺服器的名稱  server1  the  time   is: <%=new  java.util.Data() %>  在server2裡面也改  可以給裡面加入伺服器的名稱  server2  the  time   is: <%=new  java.util.Data() %>  132  cd  webapps/ROOT/   133  ls   134  vi   test.jsp 測試:在真機測試,可以看見迴圈 http://172.25.17.11/test.jsp

為了不要出現迴圈,加入sticky模組    26  cd   /usr/local/lnmp/nginx/conf/    27  ls    28  vi  nginx.conf    http {       upstream  tomcat {      sticky;      server 172.25.17.11:8080;      server  172.25.17.12:8080;      #增加後端埠    }     include       mime.types;     default_type  application/octet-stream;

   29  nginx   -t    30  nginx  -s  reload 發現此時是靜態的不輪詢

   31  cd  /usr/local/tomcat/webapps/ROOT/    32  ls    34  vi  test.jsp ##增加測試頁面 <%@ page contentType="text/html; charset=GBK" %> <%@ page import="java.util.*" %> <html><head><title>Cluster App Test</title></head> <body> Server Info: <% out.println(request.getLocalAddr() + " : " + request.getLocalPort()+"<br>");%> <% out.println("<br> ID " + session.getId()+"<br>"); String dataName = request.getParameter("dataName"); if (dataName != null && dataName.length() > 0) { String dataValue = request.getParameter("dataValue"); session.setAttribute(dataName, dataValue); } out.print("<b>Session list</b>"); Enumeration e = session.getAttributeNames(); while (e.hasMoreElements()) { String name = (String)e.nextElement(); String value = session.getAttribute(name).toString(); out.println( name + " = " + value+"<br>"); System.out.println( name + " = " + value); } %> <form action="test.jsp" method="POST"> name:<input type=text size=20 name="dataName"> <br> key:<input type=text size=20 name="dataValue"> <br> <input type=submit> </form> </body> </html>

  35  scp   test.jsp  [email protected]:/usr/local/tomcat/webapps/ROOT/  #把測試頁面傳到server2裡 在真跡測試:http://172.25.17.11/test.jsp  新增使用者名稱和密碼

在server1裡面做    36  cd ..    37  ls    38  cd   ..    ##此時pwd為/usr/local/tomcat    39  bin/shutdown.sh   ##讓tomcat掛掉,

在真跡測試:http://172.25.17.11/test.jsp  新增使用者名稱和密碼,發現以前新增的都在,雖然server2接管了

三.在tomcat中實現session共享 什麼是session:

session:在計算機中,尤其是在網路應用中,稱為“會話控制”。Session物件儲存特定使用者會話所需的屬性及配置資訊。這樣,當用戶 在應用程式的 Web 頁之間跳轉時,儲存在 Session物件中的變數將不會丟失,而是在整個使用者會話中一直存在下去。當用戶請求來自應用程式的 Web 頁時,如果該使用者還沒有會話,則 Web伺服器將自動建立一個 Session 物件。當會話過期或被放棄後,伺服器將終止該會話。Session物件最常見的一個用法就是儲存使用者的首選項。例如,如果使用者指明不喜歡檢視圖形,就可以 將該資訊儲存在 Session 物件中。

為了對資料的儲存更加牢靠,我們選擇交叉存放session的方法,即將訪問tomcat1上的資料存放在memcache2中,將訪問tomcat2上的資料存放在memcache1中,這樣存放,當某個tomcat服務斷了之後,訪問它的客戶session並不會消失,而是存放在了對立的memcache,如果存放session的memcache壞了,那麼它的資料會立即切換到另一個memcached中....

nginx+memcache+tomcat的實現 在server1和server2上都下在memcache yum   install  -y  memcached /etc/init.d/memcached  start cd  /usr/local/tomcat/conf ls vim  context.xml##在最後面加下列程式碼要在<Context>裡面加 <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager" memcachedNodes="n1:172.25.17.11:11211,n2:172.25.17.12:11211" failoverNodes="n1"     ##server2要改為n2,預設為互動式,互動式有問題了,找自己,所以設為n2 requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$" transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory" />

##在server2裡面也要做 cd  /usr/local/tomcat/conf ls vim  context.xml##在最後面加下列程式碼 <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager" memcachedNodes="n1:172.25.17.11:11211,n2:172.25.17.12:11211" failoverNodes="n2"     ##server2要改為n2,預設為互動式,互動式有問題了,找自己,所以設為n2 requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$" transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory" />

在server1裡面做 cd /usr/local/tomcat/lib/ ls 去官網下載jar有關的東西,傳到/usr/local/tomcat/lib/裡面  /pub/docs/lamp/jar  mget   * rm   -f   memcache-session-manager-tc6-1.6.3.jar  ##因為我們是版本7的tomcat ,所以我們刪除6 的東西

cd   /usr/local/tomcat bin/shutdown.sh netstat  -antlp bin/startup.sh

cat  logs/catalina.out##會看到節點資訊,出現節點資訊才會正確

在server2裡面 cd /usr/local/tomcat/lib/ ls 去官網下載jar有關的東西,傳到/usr/local/tomcat/lib/裡面  /pub/docs/lamp/jar  mget   * rm   -f   memcache-session-manager-tc6-1.6.3.jar  ##因為我們是版本7的tomcat ,所以我們刪除6 的東西 cd   /usr/local/tomcat bin/shutdown.sh netstat  -antlp bin/startup.sh cat  logs/catalina.out##會看到節點資訊,出現節點資訊才會正確

在真跡測試:http://172.25.17.11/test.jsp  新增使用者名稱和密碼 去server1裡面做 telnet  localhost 11211 get   id號 是否會有顯示

在server2裡面做 yum  install   -y  telnet telnet  localhost  11211 get id號 quit##退出 補充:停掉了一個服務機的memcache,則在另一個機子中會有相應新增的資訊的顯示,當停掉的服務及開啟的時候,並不會接管資訊,而是當接管的服務掛掉的時候,他會再次接管,並且會顯示全部資訊 /etc/init.d/memcached  stop tomcat  和 memcache 是兩個服務 tomcat是上層服務,memcache是下層服務,上層互動利用下層,下層停掉了,才會在另一個機子中顯示