Apache與jboss集羣配置

 

Apache與jboss集羣配置,實現負載均衡與容錯的功能。Apache做爲軟件負載均衡器,負責請求的分發。Jboss做爲應用服務器,利用jgroup協議,處理容錯及狀態複製與轉移。

 

一 apache的配置

 

a. 將下載的apache mod_jk重命名爲mod_jk.so,複製到APACHE_HOME/modules/中,修改 APACHE_HOME/conf/httpd.conf  ,在文件末添加:Include conf/mod-jk.conf

 

b. 在APACHE_HOME/conf/目錄創建新文件mod-jk.conf,內容如下:

                            # Load mod_jk module  

                            # Specify the filename of the mod_jk lib  

                            LoadModule jk_module modules/mod_jk.so  

                            # Where to find workers.properties  

                            JkWorkersFile conf/workers.properties  

                            # Where to put jk logs  

                            JkLogFile 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 indicates to send SSK KEY SIZE  

                            JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories  

                            # JkRequestLogFormat  

                            JkRequestLogFormat "%w %V %T" 

                            # Mount your applications  

                            JkMount /application/* loadbalancer  

                            # You can use external file for mount points.  

                            # It will be checked for updates each 60 seconds.  

                            # The format of the file is: /url=worker  

                            # /examples/*=loadbalancer  

                            JkMountFile conf/uriworkermap.properties  

                            # Add shared memory.  

                            # This directive is present with 1.2.10 and  

                            # later versions of mod_jk, and is needed for  

                            # for load balancing to work properly  

                            JkShmFile logs/jk.shm  

                            # Add jkstatus for managing runtime data  

                            <Location /jkstatus/>  

                                     JkMount status  

                                     Order deny,allow  

                                     Deny from all  

                                     Allow from 127.0.0.1 

                            </Location>  

 

         JkMount: 連接你的Web應用上下文, 比如:JkMount /cluster-test/* loadbalancer

        

c. 在 在APACHE_HOME/conf/目錄創建新文件uriworkermap.properties,置爲空,這個文件主要是做url 路由的,來配置哪些請求由JK處理哪些請求讓APACHE處理. 基本格式爲/url=worker_name;

                            /jmx-console=loadbalancer  

                            /jmx-console/*=loadbalancer  

                            /web-console=loadbalancer  

                            /web-console/*=loadbalancer 

 

d. 在 APACHE_HOME/conf/目錄創建新文件workers.properties,內容如下:

                            # Define list of workers that will be used  

                            # for mapping requests  

                            worker.list=loadbalancer,status  

                            # Define Node1  

                            # modify the host as your host IP or DNS name.  

                            worker.node1.port=8009 

                            worker.node1.host=node1.mydomain.com  

                            worker.node1.type=ajp13  

                            worker.node1.lbfactor=1 

                            worker.node1.cachesize=10 

                            # Define Node2  

                            # modify the host as your host IP or DNS name  

                            worker.node2.port=8009 

                            worker.node2.host= node2.mydomain.com  

                            worker.node2.type=ajp13  

                            worker.node2.lbfactor=1 

                            worker.node2.cachesize=10 

                            # Load-balancing behaviour  

                            worker.loadbalancer.type=lb  

                            worker.loadbalancer.balance_workers=node1,node2  

                            worker.loadbalancer.sticky_session=1 

                            #worker.list=loadbalancer  

                            # Status worker for managing load balancer  

                            worker.status.type=status  

        

上面的文件中配置了兩個節點,name分別爲node1,node2,指定兩個節點的IP,並在worker.loadbalancer.balance_workers中指定所有的node列表,worker.loadbalancer.sticky_session設置是否啓用“粘着的”Session,sticky session是指來自同一IP的請求將被髮送到同一個Jboss節點,sticky session設爲0的話同一session的不同請求會被負載均衡分發到不同的jboss節點上。

 

二JBoss節點配置

a. 修改JBOSS_HOME/server/all/deploy/jboss-web.deployer/server.xml文件

         註釋掉http connector(8080)

        

b. 修改JBOSS_HOME/server/all/deploy/jboss-web.deployer/server.xml文件,AJP13 connector:

         將Engine 修改如下:

                            <Engine defaultHost="localhost" jvmRoute="node1">  

                            ...  

                            </Engine>

 

         node1和node2分別對應相應ip的jboss;

 

c. 修改 JBOSS_HOME/server/all/deploy/ jboss-web.deployer /META-INF/jboss-service.xml,找到<attribute>該爲:<attribute>true</attribute>

 

/********************** 說明 begin *****************************/

snapshotMode: 複製髒會話的時機

“instant”: 在每個請求處理之後(缺省值)

“interval”: 間隔複製。異步會話複製消息每隔X毫秒發送;在該模式下,強制保持會話粘性保持

snapshotInterval: 當snapshotMode爲”interval”時,使用該設置的值,單位爲毫秒。缺省值爲1000ms

cacheName: JBossCache服務的JMX名字,缺省爲"jboss.cache:service=TomcatClusteringCache“

useJK: 如果使用mod_jk作爲負載均衡器則設爲true

/********************** 說明 end ******************************/

三 設置Session同步

a. 編輯JBOSS_HOME/server/all/deploy/jbossweb-cluster.sar/META-INF/jboss-service.xml,找到<attribute>,有udp和tcp兩種方式,UDP採用多播方式,但問題比較多,所以採用TCP方式。

找到<config> <tcp,將><config>到</config>生效.並對該部分進行以下修改:

將全部down_thread和up_thread的false都改爲true. windows平臺lookloop = true

將bind_addr改爲本機ip,<tcpping initial_hosts 值設爲:node1 IP[7810],node2 IP[7810] ;

 

/********************** 說明 begin *****************************/

用於JBossWeb集羣的TreeCache服務在deploy/jboss-web-cluster.sar下的META-INF/jboss-service.xml文件中配置

CacheMode屬性

REPL_ASYNC(缺省)

複製消息被異步發送()發完即丟失

提高應用的響應性

REPL_SYNC

複製消息被同步發送

如果不保持會話粘性可使用此模式

JGroups協議棧配置

/********************** 說明 end ******************************/

 

b. 修改應用程序的web.xml文件,如下所示:

 

 

                   <?xml version="1.0" encoding="UTF-8"?> 

                   <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" 

                            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 

                            xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee     http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd "> 

                            <distributable /> 

                    ...   

                   </web-app>

 

/********************** 說明 begin *****************************/

會話複製在每個Web應用的WEB-INF/web.xml中使能

加入空的<distributable/>元素

/********************** 說明 end ******************************/

                  

c. 在web-inf中添加jboss-web.xml文件,內容如下:

                   <?xml version="1.0" encoding="UTF-8"?> 

                   <!DOCTYPE jboss-web PUBLIC  

                            "-//JBoss//DTD Web Application 4.2//EN"  

                            "http://www.jboss.org/j2ee/dtd/jboss-web_4_2.dtd"> 

                   <jboss-web> 

                            <replication-config> 

                                     <replication-trigger>SET_AND_NON_PRIMITIVE_GET</replication-trigger> 

                                               <replication-granularity>SESSION</replication-granularity> 

                                               <replication-field-batch-mode>true</replication-field-batch-mode> 

                            </replication-config> 

                            <context-root>/</context-root> 

                   </jboss-web>

                  

/********************** 說明 begin *****************************/

針對每一個Web應用配置會話複製WEB-INF/jboss-web.xml

“replication-config”元素:複製粒度

Session, Attibute,Field

“replication-trigger”元素:決定一個髒會話的條件

“SET_AND_GET”:任何屬性被訪問時標記爲髒會話

“SET_AND_NON_PRIMITIVE_GET“:任何返回非原始值的屬性被訪問時標記爲髒會話。爲缺省值

“SET”: 任何屬性被修改時標記爲髒會話

“replicationFieldBatchMode”

如果爲True, 對每個請求的所有Fied修改以批處理方式複製

僅在複製粒度爲Fied時有效

 

/********************** 說明 end ******************************/

四 啓動負載均衡器apache

 

         在/usr/local/apache2/bin目錄下執行./httpd –k start

 

         在/usr/local/apache2/logs/mod_jk.log中,看到apache初始化mod_jk的日誌:

         [Wed Aug 01 10:36:11 2007][6636:63168] [info] init_jk::mod_jk.c (2743): mod_jk/1.2.23 initialized

         [Wed Aug 01 10:36:11 2007][6637:63168] [info] init_jk::mod_jk.c (2743): mod_jk/1.2.23 initialized

         後面如有錯誤信息,是因爲集羣中的節點尚未啓動,暫時忽略。

 

         啓動Jboss節點

         在集羣各機器的/usr/local/jboss/bin,分別執行/run.sh –c all -b ip

 

 

發佈了88 篇原創文章 · 獲贊 0 · 訪問量 26萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章