最近幾天公司一直做nginx的負載均衡,折騰了將近一週,在網上查了很多資料,終於在今天將一系列的流程及功能跑通。在學習的過程中,發現網上大多數資料都寫的很籠統,或者就是寫的讓新手迷迷糊糊,似懂非懂,很多的配置參數等都不是很明白,配置的時候也就造成很多地方不確切。現在我對我這幾天的配置學習予以總結,從下載到安裝、環境的搭建,以及負載均衡的配置,參數的詳細解釋,以及memcached的session共享,都會一一介紹,並保證所用的代碼和配置都經過本人的測試並實現功能,希望給予對亟需解決linux+tomcat+nginx+memcached實現負載均衡以及session共享的同行特別是新手有一些幫助。
一、環境的介紹:
操作系統採用: CentOS-5.6-i386
項目部署在:tomcat6.0,tomcat一共有兩個,分別命名爲tomcat6.0_1、tomcat.0_2.這兩臺機器都運行在一臺服務器上,IP爲192.168.128.129
負載均衡採用版本:nginx-1.2
session的管理:memcached-1.4.15
由於資源有限,所有的程序安裝測試均在一臺服務器上完成。
二、jdk的環境的搭建tomcat的安裝與項目的部署:
1、具體的部署請參考我前兩天的文章:http://blog.csdn.net/jessonlv/article/details/7987434,所有的代碼都通過測試。按照上面的方式分別安裝部署兩個tomcat,並分別命名爲tomcat6.0_1、tomcat6.0_2.
2、這裏重點說下文章之外的配置:由於兩個tomcat運行在一臺服務器上,所以要分別修改tomcat的端口,故修改/conf/server.xml,讓其能在一臺機器上運行。具體代碼如下:
tomcat6.0_1配置:
tomcat6.0_2配置:
至此,一臺服務器上的兩個tomcat配置完畢。
三、nginx的安裝及負載均衡的配置:
nginx的安裝一般採用兩種方式,一種是yum命令的安裝,第二種是下載tar.gz包,採用編譯的方式安裝。
第一種比較簡單,但是一般服務器都不支持yum命令,在此做簡單介紹:
01.1、rpm -Uvh http://nginx.org/packages/centos/5/noarch/RPMS/nginx-release-centos-5-0.el5.ngx.noarch.rpm
01.2、執行安裝:yum安裝nginx:
yum --disablerepo=* --enablerepo=base --enablerepo=nginx install nginx
此安裝方式有可能需要安裝gcc編譯器:gcc安裝:下載:http://www.linuxfromscratch.org/blfs/view/5.1/general/gcc2.html
安裝命令:yum install gcc gcc-c++ kernel-devel
第二種安裝方式是重點:
01、下載所需的安裝包:
下載nginx:http://nginx.org/en/download.html
下載pcre,安裝pcre,nginx支持重寫:ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/
下載zlib:http://download.csdn.net/detail/jessonlv/4603322
下載gcc:http://download.csdn.net/detail/jessonlv/4603333
Nginx依賴一些其他PCRE、openssl(依賴libssl-dev),甚至是zlib、gcc等,下面我們簡單說下如何安裝PCRE:
測試pcre是否安裝成功:
返回安裝的pcre的版本好則表示成功。或者:
也是成功。
安裝nginx時如需其他依賴庫,上面都注有下載地址,安裝方式大致相同,在此不再都一一贅述。
02、安裝完成後,接下來所要做的就是nginx最核心的負載均衡的配置:
配置目錄是nginx安裝目錄下的/conf/nginx.conf文件。下面張貼我的配置文件:
關於gzip的各個參數的具體含義請參考我的另一篇文章:http://blog.csdn.net/jessonlv/article/details/8016284
各個模塊參數含義請參考;http://wiki.nginx.org/NginxChs
或者參考我的資源:http://download.csdn.net/detail/jessonlv/4603422 這上面有關於nginx各個參數的詳細解釋.
至此,nginx的安裝及配置算是基本完成。下面進行測試:
03、測試:
啓動tomcat6.0_1和tomcat6.0_2.具體命令在此不再贅述,相信大家都很熟悉,不然就別做Java了。
啓動nginx:
上面試測試時nginx的安裝路徑,啓動時注意你自己的安裝路徑。沒有報錯即爲啓動成功。
查看nginx進程:
在瀏覽器輸入:http://192.168.128.129 訪問項目主頁。
至此,linux下tomcat+nginx的負載均衡是做好了。但是這纔是個開始,memcached的session共享纔是重中之重。
四、memcached的下載安裝及完成session共享的配置
1、memcached管理session共享:
安裝memcached一般需要安裝libevent支持組件。
服務器端主要是安裝memcache服務器端,目前的最新版本是 memcached-1.4.5
官網下載:http://memcached.org/
另外,Memcache用到了libevent這個庫用於Socket的處理,所以還需要安裝libevent,libevent的最新版本是libevent-2.0.20。(如果你的系統已經安裝了libevent,可以不用安裝)官網下載:http://libevent.org/
1.先安裝libevent。這個東西在配置時需要指定一個安裝路徑,即./configure --prefix=/usr;然後make;然後make install;
2.再安裝memcached,只是需要在配置時需要指定libevent的安裝路徑即./configure --with-libevent=/usr;然後make;然後make install;
這樣就完成了Linux下Memcache服務器端的安裝。詳細的方法如下:
測試libevent是否安裝成功:
測試memcached是否安裝成功:
memcached必須啓動才能完成服務,啓動memcached:
具體各個參數的含義請看:
2、配置
memcached有多種session管理方式,這裏採用官網稱最有效率的一種kryo。
附各種方式所需要的jar包:
各種方式的序列化方案以及jar的下載請參考gong1208的文章:http://gong1208.iteye.com/blog/1596120以及chenzhou123520的文章:http://chenzhou123520.iteye.com/blog/1650212 寫的相當的不錯,對我有很大幫助。
不管你選擇哪種序列化策略,你都需要 memcached-session-manager-${version}.jar ,如果你使用的是tomcat6,則還需要下載 memcached-session-manager-tc6-${version}.jar ,如果使
用的是tomcat7則下載 memcached-session-manager-tc7-${version}.jar 。同時還需要下載 spymemcached-2.7.3.jar.下載這完這些jar包後把jar包放到 $CATALINA_HOME/lib/目錄
在此特別需要注意的是:jar包的版本非常重要,不然容易造成jar之間的互相沖突,造成非配置性的錯誤。
在此我使用的是:
spymemcached-2.7.1.jar下載:http://download.csdn.net/detail/jessonlv/4603643
reflectasm-1.01.jar下載:http://download.csdn.net/detail/jessonlv/4603628
msm-kryo-serializer-1.6.3.jar下載:http://download.csdn.net/detail/jessonlv/4603638
minlog-1.2.jar下載:http://download.csdn.net/detail/jessonlv/4603636
memcached-session-manager-tc6-1.6.3.jar下載:http://download.csdn.net/detail/jessonlv/4603633
memcached-session-manager-1.6.3.jar下載:http://download.csdn.net/detail/jessonlv/4603632
kryo-serializers-0.10.jar下載:http://download.csdn.net/detail/jessonlv/4603628
kryo-1.04.jar下載:http://download.csdn.net/detail/jessonlv/4603624
asm-3.2.jar下載:http://download.csdn.net/detail/jessonlv/4603621
尤其注意的是我之前安裝的是memcached-1.2.0不能與各個jar包很好的兼容,造成session共享的失敗,換成memcached-1.4.15之後,兼容報錯問題也就隨之解決。
我們還需要修改 $CATALINA_HOME/conf/context.xml文件中Context節點下的內容,添加memcached-session-manager配置。
這裏我們採用非粘性session管理配置:
tomcat6.0_2的配置與此相同。
至此,memcached的配置也完畢,啓動兩個tomcat,再啓動nginx,再啓動memcached,進行與session有關的操作,然後可以關掉其中任意一臺tomcat查看sessionid,之後同樣的方法測試另外一臺,可以發現,不管是那個tomcat在運行,sessionid的值是相同的。
到此,已經完成了負載均衡以及session的全部配置。希望對大家有所幫助。
轉載請標明:blog.csdn.net/code_my_dream/