Nginx+Tomcat+Memcached負載平衡叢集服務搭建

來源:互聯網
上載者:User
轉載請註明出處:http://blog.csdn.net/l1028386804/article/details/48289765

作業系統:CentOS6.5

本文檔主要講解,如何在CentOS6.5下搭建Nginx+Tomcat+Memcached負載平衡叢集伺服器,Nginx負責負載平衡,Tomcat負責實際服務,Memcached負責同步Tomcat的Session,達到Session共用的目的。

1.安裝Nginx

Nginx官網:http://nginx.org/

下載最新穩定版本。在安裝Nginx之前,需要先安裝gcc、 openssl、 pcre和zlib軟體庫。

1.1安裝gcc、gcc-c++

安裝命令:

#sudo yum install gcc# sudo yum install gcc-c++

1.2安裝openssl

openssl官網:http://www.openssl.org/

安裝版本:openssl-1.0.1i.tar.gz

安裝命令:

#tar -zxvf openssl-1.0.1i.tar.gz#cd openssl-1.0.1i#sudo ./config --prefix=/usr/local/openssl-1.0.1i    #prefix指定安裝目錄#sudo make#sudo make install

【注意】:此處使用的是config命令,而不是平常的configure命令

安裝完成後,到/usr/local/下查看是否安裝成功。如果安裝出錯,需要重新加壓縮,重新安裝。

1.3安裝pcre

pcre官網:http://www.pcre.org/

安裝版本:pcre-8.35.tar.gz

安裝命令:

#tar -zxvf pcre-8.35.tar.gz#cd pcre-8.35#sudo ./configure --prefix=/usr/local/pcre-8.35    #prefix指定安裝目錄#sudo make#sudo make install

安裝完成後,到/usr/local/下查看是否安裝成功。如果安裝出錯,需要重新加壓縮,重新安裝。

【注意】:如果沒有安裝c++編譯器,這個軟體的安裝會報錯!

1.4安裝zlib

zlib官網:http://www.zlib.net/

安裝版本:zlib-1.2.8.tar.gz

安裝命令:

#tar -zxvf zlib-1.2.8.tar.gz#cd zlib-1.2.8#sudo ./configure --prefix=/usr/local/zlib-1.2.8    #prefix指定安裝目錄#sudo make#sudo make install

安裝完成後,到/usr/local/下查看是否安裝成功。如果安裝出錯,需要重新加壓縮,重新安裝。

1.5安裝Nginx

安裝版本:nginx-1.6.1.tar.gz

安裝命令:

#tar -zxvf nginx-1.6.1.tar.gz#cd nginx-1.6.1#sudo ./configure--prefix=/usr/local/nginx-1.6.1                #prefix指定安裝目錄--with-openssl=/home/zht/src/openssl-1.0.1i    #指的是openssl源碼路徑--with-pcre=/home/zht/src/pcre-8.3.5          #指的是pcre的源碼路徑--with-zlib=/home/zht/src/zlib-1.2.8           #指的是zlib 的源碼路徑--with-http_ssl_module#sudo make#make install

安裝完成後,到/usr/local/下查看是否安裝成功。如果安裝出錯,需要重新加壓縮,重新安裝。

1.5.1 配置Nginx

設定檔目錄:/usr/local/nginx-1.6.1/conf/nginx.conf

# cd /usr/local/nginx-1.6.1/conf# sudo vi nginx.conf

【修改後的設定檔如下】:

#建立進程的使用者和使用者組user      zht zht;#服務進程數量,一般等於CPU數量worker_processes 1;#全域錯誤記錄檔定義,建議開啟error層級日誌.[ debug | info | notice | warn | error | crit ]error_log logs/error.log error;#error_log logs/error.log  notice;#error_log logs/error.log  info; #記錄進程ID的檔案#pid       logs/nginx.pid;  events {    #epoll是多工IO(I/O Multiplexing)中的一種方式,但是僅用於linux2.6以上核心,可以大大提高nginx的效能.Linux建議使用epoll,FreeBSD建議使用kqueue.    useepoll;    #一個worker_processe允許的最近並發串連數量   worker_connections  1024;}  http {   include       mime.types;   default_type application/octet-stream;    #log_format  main  '$remote_addr - $remote_user [$time_local]"$request" '    #                  '$status $body_bytes_sent"$http_referer" '    #                  '"$http_user_agent""$http_x_forwarded_for"';     #access_log  logs/access.log  main;    sendfile        on;   #tcp_nopush     on;     #http串連的期間   keepalive_timeout  65;     #gzip壓縮設定    gzip  on;           #開啟gzip   gzip_min_length 1k;  #最小壓縮檔大小   gzip_buffers 4 16k;  #壓縮緩衝區    #http的協議版本(1.0/1.1),預設1.1,前端如果是squid2.5請使用1.0   gzip_http_version 1.1;    #gzip壓縮比,1壓縮比最小處理速度最快,9壓縮比最大但處理速度最慢(傳輸快但比較消耗cpu)   gzip_comp_level 2;       #和http頭有關係,加個vary頭,給Proxy 伺服器用的,有的瀏覽器支援壓縮,有的不支援,所以避免浪費不支援的也壓縮,所以根據用戶端的HTTP頭來判斷,是否需要壓縮    gzip_varyon;    #gzip壓縮類型,不用添加text/html,否則會有警告資訊   gzip_types text/plain text/javascript text/css application/xmlapplication/x-javascript application/json;     #設定負載平衡的伺服器列表,可以設定多個upstream,但mysvr名字要區分    upstreammyClusterServer1 {       #weigth參數表示權值,權值越高被分配到的幾率越大        #本機上的Squid開啟3128連接埠       server 127.0.0.1:8081  weight=5;       server 127.0.0.1:8082  weight=5;       server 127.0.0.1:8083  weight=5;    }     server {       #nginx監聽的連接埠號碼       listen       80;        #網域名稱可以有多個,用空格隔開       server_name  127.0.0.1;               #字元編碼方式       charset utf-8;         #設定本虛擬機器主機的訪問日誌。關閉日誌可以減少IO,提高效能。       #access_log logs/host.access.log  main;         #預設請求       location / {            #定義伺服器的預設網站根目錄位置           root   html;            #定義首頁索引檔案的名稱           index  index.html index.htmindex.jsp;            #請求轉向mysvr 定義的伺服器列表           proxy_pass    http://myClusterServer1;           proxy_redirect default;            #跟Proxy 伺服器串連的逾時時間,必須留意這個time out時間不能超過75秒,當一台伺服器當掉時,過10秒轉寄到另外一台伺服器。           proxy_connect_timeout 10;        }        #error_page  404              /404.html;         #redirect server error pages to the static page /50x.html        #       error_page   500 502 503 504  /50x.html;       location = /50x.html {           root   html;        }         #proxy the PHP scripts to Apache listening on 127.0.0.1:80        #       #location ~ \.php$ {       #    proxy_pass   http://127.0.0.1;        #}         #pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000        #       #location ~ \.php$ {       #    root           html;       #    fastcgi_pass   127.0.0.1:9000;       #    fastcgi_index  index.php;       #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;       #    include        fastcgi_params;        #}         #deny access to .htaccess files, if Apache's document root        #concurs with nginx's one        #       #location ~ /\.ht {       #    deny  all;        #}    }      # anothervirtual host using mix of IP-, name-, and port-based configuration    #    #server {    #    listen      8000;    #    listen      somename:8080;    #    server_name somename  alias  another.alias;     #    location / {    #        root  html;    #        index index.html index.htm;    #    }    #}      # HTTPSserver    #    #server {    #    listen      443 ssl;    #    server_name localhost;     #    ssl_certificate      cert.pem;    #    ssl_certificate_key  cert.key;     #    ssl_session_cache    shared:SSL:1m;    #    ssl_session_timeout  5m;     #    ssl_ciphers  HIGH:!aNULL:!MD5;    #    ssl_prefer_server_ciphers  on;     #    location / {    #        root  html;    #        index index.html index.htm;    #    }    #} }
1.5.2啟動與關閉Nginx

(1)啟動

# sudo  /usr/local/nginx-1.6.1/sbin/nginx

確保系統的 80 連接埠沒被其他程式佔用

重啟:

# sudo  /usr/local/nginx-1.6.1/sbin/nginx  -s  reload

(2)關閉:

ps -ef | grep nginx

找到主進程ID,然後kill即可,如:

# kill -9 [進程號]


(3)檢查是否啟動成功:

netstat -ano | grep80

有結果輸入說明啟動成功

開啟瀏覽器訪問此機器的 IP,如果瀏覽器出現Welcome to nginx! 則表示 Nginx 已經安裝並運行成功。如果已經配置了負載平衡伺服器,則會看Tomcat中的網站頁面,如:

2. Memcache安裝

Memcached官網:http://memcached.org/

安裝memcached需要先安裝libevent,libevent官網:http://libevent.org/

本次安裝版本:

memcached-1.4.20.tar.gz

libevent-2.0.21-stable.tar.gz

2.1安裝livevent

查看是否已安裝:# rpm qa | grep libevent

如果已安裝且版本低於1.3,則先通過:

# rpm -e libevent --nodeps

進行卸載。

# tar zxvf libevent-2.0.21-stable.tar.gz# cd libevent-2.0.21-stable# sudo ./configure --prefix=/usr/local/libevent-2.0.21-stable      #prefix指定安裝路徑# sudo make# sudo make install

安裝完成後,到prefix指定的目錄下,看看是否存在libevent-2.0.21-stable目錄,如所示。

2.2安裝Memcached

# tar zxvf memcached-1.4.20.tar.gz# cd memcached-1.4.20# sudo ./configure--prefix=/usr/local/memcached-1.4.20--with-libevent=/usr/local/libevent-2.0.21-stable# sudo make# sudo make install

2.2.1檢查看裝情況

安裝完成後,到prefix指定的目錄下查看是否有memcached-1.4.20目錄,如所示。

2.2.2查看memcached和libevent版本資訊

首先定位到Memcached的bin目錄下:

# cd /usr/local/memcached-1.4.20/bin

執行命令:

# sudo ./memcached -i

2.2.3啟動memcached

# sudo ./memcached -d -v -p 12000 -m 512 -u zht

解釋:-d表示以守護進程方式運行memcached;-v表示輸出浸膏和錯誤資訊;-p指定監聽的連接埠號碼;-m指定能使用的最大記憶體,單位MB;-u指定運行memcached的賬戶,非root使用者。

使用# ps -ef | grep memcached查看進程。

關注基本選項:

說明

-p

監聽的TCP連接埠 (預設: 11211)

-d

以守護進程方式運行memcached

-u

運行memcached的賬戶,非root使用者

-m

最大的記憶體使用量,單位是MB,預設是 64 MB

-c

軟串連數量,預設是1024(最大並發串連數)

-v

輸出警告和錯誤資訊

-vv

列印用戶端的請求和返回資訊

-h

列印協助資訊

-i

列印memcached和libevent的著作權資訊

2.2.4使用telnet驗證服務是否可用

Win7安裝telnet:控制台-> 程式和功能->開啟或安裝Windows功能->勾選Telnet服務端、Telnet用戶端。


CentOS安裝telnet用戶端:

# sudo yum install telnet

Windows命令:

CentOS(Linux)下命令:

# telnet 127.0.0.1 12000

Trying 127.0.0.1...

Connected to localhost (127.0.0.1).

Escape character is '^]'.

串連成功後,手動輸入命令:stats

即可看到如下資訊:


手動輸入:quit //退出

Connection closed by foreign host


2.2.5停止memcached服務

# ps -ef | grep memcached

找到memcached進程ID號,然後強制殺死:

kill - 9 2439

3.安裝Tomcat+配置memcached

Tomcat官網:http://tomcat.apache.org/

3.1安裝Tomcat

本次使用Tomcat版本:apache-tomcat-7.0.55.tar.gz

將Tomcat解壓到任意目錄下。

3.2為Tomcat配置memcached

3.2.1為Tomcat添加庫檔案

Tomcat要支援memcached管理Session,需要調用一些jar庫檔案:

添加mem和msm的依賴jar包:

couchbase-client-1.2.2.jar

javolution-5.4.3.1.jar

kryo-1.03.jar

kryo-serializers-0.10.jar

memcached-session-manager-1.6.5.jar

memcached-session-manager-tc6-1.6.5.jar

minlog-1.2.jar

msm-kryo-serializer-1.6.5.jar

reflectasm-0.9.jar

spymemcached-2.10.2.jar

【注意】:

msm1.6.5依賴了Couchbase,需要添加couchbase-client的jar包,否則啟動會報:java.lang.NoClassDefFoundError:com/couchbase/client/CouchbaseClient。

Tomcat6和Tomcat7使用不同msm支援包:memcached-session-manager-tc6-1.6.5.jar和memcached-session-manager-tc7-1.6.5.jar,只可選一,否則啟動報錯。

msm源碼中的lib包版本太低:spymemcached需要使用2.10.2,否則啟動tomcat報錯:

java.lang.NoSuchMethodError:net.spy.memcached.MemcachedClient.set(Ljava/lang/String;ILjava/lang/Object;)Lnet/spy/memcached/internal/OperationFuture;

atde.javakaffee.web.msm.BackupSessionTask.storeSessionInMemcached(BackupSessionTask.java:227)

kryo-serializers需要使用0.10版本,否則報錯:

Caused by:java.lang.ClassNotFoundException: de.javakaffee.kryoserializers.DateSerializer

部分檔案下載地址:http://code.google.com/p/memcached-session-manager/downloads/list

其他的檔案自己找。

下載後,將這些庫檔案放到tomcat\lib目錄下。

3.2.2為Tomcat配置memcached

設定檔目錄:tomcat\conf\context.xml

開啟設定檔,在...節點中添加如下內容:

 

【參數說明】:

docBase:與中的appBase一致,網站部署目錄。

memcachedNodes:memcached伺服器資訊,多個伺服器時,使用空格分開,如:

n1:127.0.0.1:12001 n2:127.0.0.1:12002 n3:127.0.0.1:12003

設定檔如所示:

還有在server.xml中配置節點的appBase="部署目錄"

3.2.3測試Session共用

測試JSP代碼如下:index.jsp

同時啟動多個Tomcat,我部署了3個,開啟瀏覽器去訪問第一個Tomcat,然後在訪問第二個和第三個Tomcat,頁面Session資訊如下:


由圖可以看到,三個Tomcat的SessionID都是一樣的:5FBF6D6B6F37BE8248ED965536427005-n1,只要不關閉瀏覽器,不管怎麼重新整理,SessionID都是不變了。由此可以,三個Tomcat通過memcached實現了Session資訊共用。

4.安裝Samba共用檔案服務

查看是否已經安裝samba:

# rpm -qa | grep samba

4.1安裝samba

使用網路安裝快速方便,命令如下:

# sudo yum install samba samba-client

4.2配置共用資料夾

(1)修改設定檔:

# sudo vi /etc/samba/smb.conf

[SharedFolder]

path = /home/zht/SharedFolder          #共用目錄的路徑writeable = yes                       #是否允許寫browsable = yes                      #是否允許以瀏覽目錄內容valid user = zht                       #訪問目錄的賬戶名

(2)添加賬戶

添加zht賬戶:

# sudosmbpasswd -a zht

按照提示輸出訪問密碼。

4.3開啟連接埠號碼

Port 137 (UDP)  --NetBIOS name server and nmbdPort 138 (UDP) --NetBIOS datagram servicePort 139 (TCP) --File and printer sharing and smbdPort 389 (TCP) --for LDAP(Active Directory Mode)Port 445 (TCP) --NetBIOS was moved to 445 after 2000 and beyond(CIFS)Port 901 (TCP) --for SWAT

(1) CentOS使用圖形化添加連接埠號碼:sudo setup;

(2) 使用以下命令開啟:

# iptables -I INPUT -p udp --dport [連接埠號碼] -j ACCEPT# iptables -I INPUT -p tcp --dport [連接埠號碼] -j ACCEPT

儲存:

# sudo service iptables save

4.4關閉SELinux

查看狀態:

# getenforce

關閉:

# setenforce 0

SELinux幾種狀態:

enforcing:強制模式,代表SELinux運行中且正確限制;

permissive:寬容模式,代表SELinux運行中,不過僅有警告資訊,並不實際限制;

disable:關閉,SELinux未運行。

永久關閉方法:

# sudo vi /etc/selinux/config# SELINUX = enforcing          注釋掉# SELINUXTYPE = targeted      注釋掉

在末尾添加一行:

SELINUX = disable

儲存關閉:

:wq

重啟系統

4.5啟動與停止服務

(1)查看運行狀態:

# sudo service smb status

(2)啟動和停止服務:

# sudo /etc/init.d/smb   start/stop/restart

或者

# sudo service smb    start/stop/restart

(3)設定開啟啟動:

# sudo chkconfig --level 35 smb on

在3,5層級上自動運行smb服務

(4)驗證服務

# smbclient -L //192.168.101.249 -U rxyy

或者

# smbclient //192.168.101.249/sharedFolder -U rxyy

5安裝配置JDK

本次使用JDK版本為:jdk-7u60-linux-x64.tar.gz

5.1卸載已安裝的JDK

查看已經安裝的JDK

# rpm -qa | grep jdk*

卸載JDK:

# sudo yum -y remove [包名]

如所示:

安裝新的JDK:將jdk-7u60-linux-x64.tar.gz解壓縮到指定目錄下即可。


5.2配置Java環境變數

# sudo vi /etc/profile

在末尾添加:

#JDK

exportJAVA_HOME=/home/zht/BalanceServer/Java/jdk1.7.0_60export JRE_HOME=$JAVA_HOME/jreexport CLASSPATH=$CLASSPATH:.:$JRE_HOME/lib:$JAVA_HOME/libexport PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin

如所示:

6安裝MySQL資料庫

6.1卸載已安裝的mysql

查看已經安裝的mysql資料庫:

# rpm -qa | grep mysql

卸載已安裝的mysql資料庫:

# rpm -e [包名]                //普通卸載,可能因為依賴無法卸載# rpm -e --nodeps [包名]         //強制卸載,有依賴也能卸載

或者

# yum -y remove [包名]         //卸載時自動處理依賴

6.2安裝mysql

安裝MySQL資料庫需要安裝4個組件:mysql--shared-compat 、mysql-server、mysql-client和mysql-workbench,安裝方法如下。

(1)安裝mysql共用庫:

# rpm -ivh MySQL-shared-compat-5.6.20-1.el6.x86_64.rpm

(2)安裝mysql服務端::

# rpm -ivh MySQL-server-5.6.20-1.el6.x86_64.rpm

(3)安裝mysql用戶端:

# rpm -ivh MySQL-client-5.6.20-1.el6.x86_64.rpm

(4)安裝mysql-workbench工具:

# rpm -ivh mysql-workbench-community-6.1.7-1.el6.x86_64.rpm

【說明】:RPM安裝包,在CentOS下可以直接雙擊運行安裝,系統會自動處理依賴。

另附:yum安裝方法

查看yum上可安裝的版本:

# yumlist | grep mysql

安裝:

# yum install -y mysql-server mysql mysql-devel

6.3配置mysql

設定檔目錄:

/usr/my.cnf或者/etc/mysql/my.cnf

開啟檔案後,在[mysqld]後面添加如下配置:

#字元編碼

character-set-server=utf-8

#儲存引擎

default-storage-engine=INNODBinnodb_flush_log_at_trx_commit=2

#緩衝池

innodb_additiinnodb_buffer_pool_size=1024M

#最大串連數

max_c/pre>

#允許的最大包大小(例如一個Blob欄位)

max_allowed_packet=16M

6.4啟動mysql

(1)啟動mysql:

# sudo service mysql  start/stop/restart

# sudo /etc/rc.d/init.d/mysql  start/stop/restart

(或 # sudo /etc/rc.d/init.d/mysqld start/stop/restart)

啟動mysql出錯時,請到/var/liv/mysql/xxx.err查看錯誤資訊。


(2)登入MySQL

# mysql -u root -p# 輸入密碼# mysql> show databases;# mysql> show variables like '%character_set%'# mysql> ...

(3)建立遠端連線使用者

啟用sxzl使用者在本地(localhost)的登入許可權,密碼hymmldr.

# mysql> grant all privileges on *.* tosxzl@localhost identified by 'hymmldr.' with grant option;

啟用sxzl使用者遠程(%)登入許可權,密碼hymmldr.

# mysql> grant all privileges on *.* to sxzl@"%"identified by 'hymmldr.' with grant option;

重新整理許可權

# mysql> flush privileges;

第一次安裝需要重設mysql密碼,詳見如下。

6.5重設mysql密碼(官網方法)

啟動mysql,然後執行如下命令:

# ps -ef | grep -i mysql

查看mysqld_safe的路徑,例如:/usr/bin/mysqld_safe


停止mysql,然後以安全方式啟動mysql:

# sudo  /usr/bin/mysqld_safe  --skip-grant-tables  >/dev/null 2>&1  &

5秒鐘後執行:

# sudo /usr/bin/mysql -u root mysql

重設root使用者的密碼:

# mysql> update user SET PASSWORD=PASSWORD('root')where user='root'

重新整理許可權

# mysql> flush privileges;# mysql> exit;

接著再次登入mysql:

# mysql -u root -p

# 輸入密碼

然後執行:

# mysql> show databases;

報錯:You must SET PASSWORD before executing thisstatement.

解決辦法,重設一次密碼:

# mysql> SET PASSWORD=PASSWORD('root');# mysql> flush privileges;

設定完畢後,就可以開啟mysql-workbench串連到資料庫了。

7命令說明:yum

yum安裝選項說明:

yum -y install 包名(支援*) :自動選擇y,全自動yum install 包名(支援*) :手動選擇y or nyum -y remove [package name] :自動處理依賴yum remove 包名(不支援*)rpm -ivh 包名(支援*):安裝rpm包

著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

以上就介紹了Nginx+Tomcat+Memcached負載平衡叢集服務搭建,包括了方面的內容,希望對PHP教程有興趣的朋友有所協助。

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.