所謂集群,就是把多台伺服器集合起來,對外提供乙個介面訪問,對使用者來說完全透明,常用的辦法就是前端放乙個伺服器,將使用者請求分發到不同的伺服器,大致有以下幾種方案
1)採取dns輪詢:將使用者的連線解析到不同的伺服器上,這會產生乙個問題,如果乙個伺服器宕掉,dns無法及時更新,就會出現問題
2)反向**伺服器:將使用者的連線**到不同的伺服器上,這有兩種方式,乙個是修改http頭,讓使用者的連線轉到固定的伺服器,以後不再和**伺服器互動,這會修改使用者瀏覽器裡的位址,可能會不怎麼友好;如果不修改位址,使用者總是通過**伺服器轉接,這個**伺服器可能會成為瓶頸。
3)mac位址**,所有的伺服器ip位址相同,通過裝置指向不同的機器。
對於**問題,會產生session共享的問題,有一種辦法就是針對特定使用者固定在一台伺服器上,這樣就不存在session共享的問題了,這種方法最簡單,但是其演算法效率比較重要,需要自己選擇。還有就是將所有伺服器的session共享,比如放在資料庫裡、共享目錄裡或者memcached裡等,但是這些實現方式都有一定的問題,比如儲存的資料需要序列化、共享伺服器會成為系統薄弱點;再有就是將session複製,讓所有的伺服器保持相同的session資訊,這種情況如果需要伺服器過多,會嚴重的影響效能。
系統配置
centos 7,192.168.1.14,apache 80, nginx 808, tomcat8 8081, tomcat8 8082
可選的方案
1)nginx:固定伺服器訪問,這個非常簡單,修改nginx.conf,採用ip_hash指令,如下
有時候會出現亂碼的問題,修改如下內容
在web.xml中加上如下
encoding
org.springframework.web.filter.characterencodingfilter
encoding
utf-8
forceencoding
true
上述配置適合解決method=post的問題,如果需要get方式支援中文,如form用get方式提交,或者點選鏈結支援中文,則需要修改 tomcat根目錄的 conf/server.xml檔案中,找,在裡面加
注意如果用於開發伺服器,需要找到正確的位置,如eclipse的servers下的配置檔案。
但是在位址列輸入中文,仍然無法支援,只能禁止這種方式。
在這種情況下,訪問
輸出為hello world!
the time on the server is 2023年8月6日 上午11時39分48秒, the host is , the host is 192.168.1.14:8081.
the name in session is 石永強.
jkmount /* worker3 #將根目錄**到worker3,worker3是乙個負載均衡伺服器,包含兩台apache伺服器
directoryindex index.jsp index.do
d)在conf目錄下建立workder.properties檔案,內容如下
worker.list = worker3
worker.worker1.type=ajp13
worker.worker1.host=localhost
worker.worker1.port=8009
worker.worker1.lbfactor=1
worker.worker1.connection_pool_timeout=600
worker.worker1.socket_keepalive=1
worker.worker1.socket_timeout=60
worker.worker2.type=ajp13
worker.worker2.host=localhost
worker.worker2.port=8010
worker.worker2.lbfactor=1
worker.worker2.connection_pool_timeout=600
worker.worker2.socket_keepalive=1
worker.worker2.socket_timeout=60
worker.worker3.type = lb
worker.worker3.balance_workers = worker1, worker2
可以看出worker1對應本機的8009埠,即前面配置過的tomcat8-1,worker2對應本機的8010埠,即之前配置過的tomcat8-2伺服器,worker3代表負載均衡伺服器,包括兩個成員worker1,worker2
e)配置tomcat
vim /work/tomcat8-1/conf/server.xml
修改如下內容,在engine標籤增加jvmroute="worker1"
vim /work/tomcat8-2/conf/server.xml
修改如下內容,在engine標籤增加jvmroute="worker2"
f)重啟apache和tomcat,瀏覽器中輸入可以看到類似的內容
the time on the server is 2023年8月6日 下午05時21分04秒, the host is , the host is 192.168.1.14:80.
the name in session is .
the session id is ae132d73152e74c043ed64ed6f27707e.worker2.
這裡有乙個有意思的事情,session id會增加乙個i額字尾,即worker1或者workder2,應該是jvmroute的作用,但本質來說還是乙個session
用mod_jk的乙個問題是不知道訪問的是哪台機器,因為顯示的apache的位址埠,通過session可以知道到底是哪台機器。
之前我們配置過nginx的均衡,瀏覽器輸入
會看到session id去掉字尾確實是一樣的,而且執行可以看到session資訊是共享的。
總體來說,用nginx配置負載均衡要容易的多,mod_jk要麻煩一些,tomcat的session複製也非常容易,只不過要記住配置防火牆,如果出現問題,要第一時間關掉防火牆,有可能就好了。
CentOS7基礎配置
預設centos7安裝將選擇最小安裝,完後是沒有任何配置的,需要手動配置需要的各種工具,同時dhcp也是出於關閉狀態,需要手動開啟。輸入命令vi etc sysconfig network scripts ifcfg eno16777736 type ethernet bootproto dhcp ...
CentOS 7 基礎配置
3 準備jdk和hadoop安裝包 centos7的靜態ip設定與以前版本的linux有細微的差別,這也是需要注意的地方。作者 為了配置 有效的靜態ip,嘗試了很多的方法。選擇虛擬機器的編輯選項 虛擬網路編輯器 管理員模式開啟 在上圖中已經標註出需要注意的地方,同時需要檢視nat設定 設定閘道器ip...
CentOS 7 配置網路
檢視ip位址 ip addr結果如下,可以看看網絡卡名稱 ens33 1 lo mtu 65536 qdisc noqueue state unknown qlen 1 link loopback 00 00 00 00 00 00 brd 00 00 00 00 00 00 inet 127.0....