轉載請註明出處: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教程有興趣的朋友有所協助。