Linux下Apache+Tomcat搭建負載均衡伺服器叢集
這篇文章主要講解關於如何在Linux下搭建Apache+tomcat負載均衡伺服器叢集的過程。
負載均衡叢集配置(1):Tomcat的配置
修改“ tomcat/conf/server.xml ”檔案
編輯server.xml檔案,找到“<Connector>
”元素節點,在server.xml檔案裡面未註釋掉的有兩個<Connector>
元素節點。找到第二個也就是上面一行註釋為
<!-- Definean AJP 1.3 Connector on port 8009 -->
的節點。將其修改為
<!-- Define an AJP 1.3 Connector on port 8009 --> <Connector port="8009" protocolhandlerclassname="org.apache.jk.server.jkcoyotehandler" protocol="AJP/1.3" redirectPort="8443" />
注意:如果是在一臺PC上同時執行多個tomcat,須將每個tomcat對的server.xml檔案裡面的“<Connector>
”元素節點裡面的port(埠號)設定為不同的值。這裡不同上面只改第二個,而是兩個“<Connector>
”元素節點都須要修改。
負載均衡叢集配置(2):
接下來繼續修改這個檔案,找到“<Connector>
”元素節點下面的註釋如下
!-- An Engine represents the entry point (within Catalina) that processes every request. The Engine implementation for Tomcat stand alone analyzes the HTTP headers included with the request, and passes them on to the appropriate Host (virtual host). Documentation at /docs/config/engine.html --> <!-- You should set jvmRoute to support load-balancing via AJP ie : <Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1"> -->
裡面有
<Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1">
將其註釋開啟。這裡進行tomcat的命名,即修改jvmRoute的值為tomcat例項名,不同的tomcat設定不同的值(這裡不管是否是同一PC都須不同)。比如我的修改為tomcat1和tomcat2
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1" >
負載均衡叢集配置(3):
接下來還是操作tomcat的server.xml檔案,在<Engine>
或<Host>
元素節點下新增以下內容
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"> <Manager className="org.apache.catalina.ha.session.BackupManager" expireSessionsOnShutdown="false" notifyListenersOnReplication="true" mapSendOptions="6"/> <!-- <Manager className="org.apache.catalina.ha.session.DeltaManager" expireSessionsOnShutdown="false" notifyListenersOnReplication="true"/> --> <Channel className="org.apache.catalina.tribes.group.GroupChannel"> <Membership className="org.apache.catalina.tribes.membership.McastService" address="228.0.1.99" port="45564" frequency="500" dropTime="3000"/> <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver" address="192.168.11.128" port="4002" autoBind="100" selectorTimeout="100" maxThreads="6"/> <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter"> <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/> </Sender> <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/> <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/> </Channel> <Valve className="org.apache.catalina.ha.tcp.ReplicationValve" filter=""/> <Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/> <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer" tempDir="/tmp/war-temp/" deployDir="/tmp/war-deploy/" watchDir="/tmp/war-listen/" watchEnabled="false"/> <ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/> <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/> </Cluster>
上述新增的程式碼的用處請繼續看第4步。
負載均衡叢集配置(4):
這裡還是繼續操作tomcat的server.xml檔案
找到剛剛新增的一長串程式碼中的<Cluster>
元素節點,下面開始修改,程式碼意義見其中的註釋解釋
<Membership className="org.apache.catalina.tribes.membership.McastService" address="228.0.1.99" port="45564" frequency="500" dropTime="3000"/> <!-- 解釋上一句程式碼. 如果主機有vpn-虛擬專用網路,需要要bind下,即新增 bind="127.0.0.1" 在Membership元素節點裡面作為屬性。如果沒有的話可以不用加bind,否則會導致session無法複製. address的值表示廣播地址,同一組tomcat搭建的叢集配置須一樣。 port埠號,同一組tomcat搭建的叢集配置須一樣。 --> <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver" address="192.168.11.128" port="4002" autoBind="100" selectorTimeout="100" maxThreads="6"/> <!-- 解釋上一句程式碼. address的值表示本機IP地址,須設定為本機IP地址。 port埠號(tomcat預設可以檢測到4000~4100之間的埠)。如果是在同一臺PC上配置負載均衡則需要修改,使用不同的埠號,否則會因為埠衝突而失效。 -->
負載均衡叢集配置(5):專案部署檔案的配置
修改待發布專案的web.xml
找到專案的web.xml檔案,開啟修改,在<web-app>
元素節點結束標籤上面一行新增
<distributable/>
從而確保session能夠複製。
負載均衡叢集配置(6):Apache的配置
接下來進行Apache配置檔案的修改,找到Apache安裝資料夾下面的conf資料夾裡面的httpd.conf檔案開啟並進行修改,在最後面加上一下內容
#載入mod_jk Module LoadModule jk_module modules/mod_jk.so <Ifmodule mod_jk.c> #指定workers.properties檔案路徑 JkWorkersFile /usr/local/apache2/conf/workers.properties #指定jk logs檔案存放位置 JkLogFile /usr/local/apache2/logs/mod_jk.log #Set the jk log level [debug/error/info] JkLogLevel info #Select the log format JkLogStampFormat "[%a %b %d%H:%M:%S %Y]" #JkOptions indicate to send SSL KEYSIZE, JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories #JkRequestLogFormat set the requestformat JkRequestLogFormat "%w %V %T %q %U%R" #JkShmFile to put logs JkShmFile /usr/local/apache2/logs/mod_jk.shm </IfModule> #指定哪些請求交給tomcat處理,哪些請求交給apache處理 #注意:" loadbalancer "為在workers.propertise裡指定的負載分配控制器 JkMount /*.jsp loadbalancer #所有的jsp都交給tomcat處理
負載均衡叢集配置(7):
在上一步中新增的httpd.conf檔案的最後新增的配置中的workers.properties檔案是不存在的,需要我們在指定的位置建立一個,檢視上一步可以發現檔案在 /usr/local/apache2/conf/路徑下面建立。
workers.properties檔案用於對負載均衡的負載器worker(即tomcat)進行具體的登記,此處的2個tomcat就作為2個worker被登記在這個檔案中。
workers.properties具體配置如下:
#workers.properties # # in unix, weuse forward slashes: ps=/ # workers 列表 worker.list=tomcat1,tomcat2,tomcat3,loadbalancer,status #-------------------------------------------------------------------- # 第一個tomcat #-------------------------------------------------------------------- worker.tomcat1.port=8009 #對應tomcat的server.xml中配置的ajp13埠號 worker.tomcat1.host=127.0.0.1 #tomcat1的主機地址,如不為本機,請填寫IP地址 worker.tomcat1.type=ajp13 #定向包協議 worker.tomcat1.lbfactor=1 #server的負載分配權重,值越高,分得的請求越多 #以下為非必要配置,這部分配置tomcat2的配置同tomcat1 #worker.tomcat1.cachesize=1000 #配置tomcat的jk連線快取大小 (非必要) #worker.tomcat1.cachesize_timeout=600 # (非必要) #worker.tomcat1.reclycle_timeout=300 # (非必要) #worker.tomcat1.socket_keepalive=1 #防止防火牆切斷未啟用的網路連線(非必要) #worker.tomcat1.socket_timeout=300 #(非必要) #worker.tomcat1.local_worker=1 # (非必要) #worker.tomcat1.retries=3 # (非必要) #---------------------------------------------------------------------- # 第二個tomcat #---------------------------------------------------------------------- worker.tomcat2.port=8809 worker.tomcat2.host=127.0.0.1 #tomcat2的主機IP地址 worker.tomcat2.type=ajp13 worker.tomcat2.lbfactor=1 #--------------------------------------------------------------------- #第三個tomcat,使用其他ip對應的tomcat #--------------------------------------------------------------------- worker.tomcat3.port=8009 worker.tomcat3.host=192.168.11.128 worker.tomcat3.type=ajp13 worker.tomcat3.lbfactor=1 #---------------------------------------------------------------------- # load balancerworker -負載均衡控制器 # -------------------------------------------------------------------- worker.loadbalancer.type=lb worker.loadbalancer.balanced_workers=tomcat1,tomcat2,tomcat3 #指定分擔請求的tomcat worker.loadbalancer.sticky_session=1 #設定為粘性session worker.loadbalancer.sticky_session_force=0 #設定當多次請求未響應,請求將轉發 worker.status.type=status # # end workers.properties
負載均衡叢集配置(8):
修改Apache安裝陌路下的conf資料夾裡的httpd.conf檔案。
開啟httpd.conf檔案並修改。找到DocumentRoot和Directory並修改,將檔案訪問路徑定位到tomcat的webapps資料夾,即待發布專案的存放位置
# # DocumentRoot: The directory out of which you will serve your # documents. By default, all requests are taken from this directory, but # symbolic links and aliases may be used to point to other locations. # DocumentRoot "/usr/local/tomcat1/webapps" <Directory "/usr/local/tomcat1/webapps"> Require all granted Orderallow,deny Allow from all </Directory>
到此配置基本完成。
下面就是測試的環節了。在此就不多說了。
相關文章
- Linux環境搭建Nginx+Tomcat負載均衡叢集LinuxNginxTomcat負載
- 負載均衡叢集負載
- dubbo叢集和負載均衡負載
- haproxy(單機)+mysql叢集負載均衡MySql負載
- orleans叢集及負載均衡實現負載
- centos7下配置nginx反向代理負載均衡叢集CentOSNginx負載
- linux搭建LVS+keepalive+nginx實現叢集高效能負載均衡配置詳解LinuxNginx負載
- 3.RabbitMQ高階叢集搭建(Haproxy負載均衡、Keepalived高可用)MQ負載
- kubernetes叢集內排程與負載均衡負載
- 負載均衡 - MQTT Broker 叢集詳解(一)負載MQQT
- Haproxy+Keepalived高可用負載均衡叢集負載
- linux下搭建ZooKeeper叢集(偽叢集)Linux
- 叢集,lvs負載均衡的四種工作模式負載模式
- Apache+tomcat實現應用伺服器叢集ApacheTomcat伺服器
- Linux下搭建ZooKeeper叢集Linux
- LNMP 分散式叢集(一):Nginx+PHP平臺搭建與負載均衡配置LNMP分散式NginxPHP負載
- docker初體驗:docker部署nginx負載均衡叢集DockerNginx負載
- LVS+Keepalive 實現負載均衡高可用叢集負載
- Linux環境下Nginx及負載均衡LinuxNginx負載
- Linux LVS 負載均衡Linux負載
- mysql負載均衡搭建(haproxy)MySql負載
- 叢集、負載均衡、分散式的區別與聯絡負載分散式
- 粘性會話負載均衡 - MQTT Broker 叢集詳解(二)會話負載MQQT
- 10分鐘學會windows中iis搭建伺服器叢集實現負載均衡和nginx代理轉發Windows伺服器負載Nginx
- 伺服器負載均衡伺服器負載
- 搭建網路負載均衡(叢集nlb)和WDS映像檔案安裝win7負載Win7
- RabbitMQ(四):使用Docker構建RabbitMQ高可用負載均衡叢集MQDocker負載
- Dubbo學習筆記(四)叢集容錯與負載均衡筆記負載
- 使用Redis儲存Nginx+Tomcat負載均衡叢集的SessionRedisNginxTomcat負載Session
- Dapr + .NET Core實戰(十一)單機Dapr叢集負載均衡負載
- 藉助 TCP 負載均衡和 Galera 叢集擴充套件 MySQLTCP負載套件MySql
- 負載均衡簡介與搭建負載
- linux下Mongodb叢集搭建:分片+副本集LinuxMongoDB
- mariadb叢集與nginx負載均衡配置–centos7版本Nginx負載CentOS
- Nginx多種負載均衡策略搭建Nginx負載
- Nginx搭建反向代理負載均衡和web快取伺服器Nginx負載Web快取伺服器
- Java程式設計解密-Dubbo負載均衡與叢集容錯機制Java程式設計解密負載
- 淺談達夢DSC叢集以及負載均衡實現與驗證負載
- windows伺服器第四層負載均衡_基於NLB負載均衡詳解Windows伺服器負載