jboss5 配置簡介

jboss5 配置簡介
2012-02-12 12:04:25

1. 下載解壓的版本:沒有安全設置,開發設置全開(熱部署等),生產版本需要修改
2. probe.sh?
3. jboss根目錄:
    client用於遠程客戶端;
    lib用於啓動jboss核心,不應該放入任何其他lib;
    server下的每個目錄都叫一個server配置,每個配置包含一套服務和應用
4. server配置目錄下的四個主目錄:conf/deploy/deployers/lib 啓動後新建目錄:data log tmp work
    conf:只在啓動時掃描一次,修改後需要重啓server
        bootstrap.xml: 核心的microcontainser服務
        jboss-service.xml: 核心JMX服務
        jboss-log4j.xml:
        login-config.xml:驗證授權模塊
        standerjboss.xml: 各種ejb容器
    deploy:應用與服務的部署目錄
    deployers:存放所有的jboss服務(用於分辨、部署不同的應用)
    lib:一個server配置裏所有服務、應用都共享的lib
    新建的目錄:
    data:服務和應用用於存放臨時文件 而向文件系統寫入的數據
    log:boot.log(log服務啓動前的日誌), server.log, audit.log
    tmp:各種服務用的臨時文件夾
    work:web server使用的存放編譯後的jsp和其他臨時數據
5. -c命令改變啓動配置 ./run.sh -c all,使用all配置啓動

管理配置
1. 早期使用JMX(Java Management Extension),service以MBean方式提供 可以容易的插入/移出JMX kenel
    從JBoss4.0.3開始使用microcontainer,可以使用POJO代替MBean,但是現在MBean仍然起着十分重要的作用
2. microcontainer:類似spring的依賴注入系統,可以做如下工作
    聲明初始化對象
    初始化時提供構造參數
    設置屬性
    對象依賴:對象A引用對象B,需要在B初始化後在初始化
    
    並不是所有service都移植到了microcontainer,所以JMX仍然很重要(JMS JNDI)
    
    在server/default/config目錄配置,大部分*-jboss-beans.xml,profile.xml是一個例外
    
3. JMX: 初始化MBean通過jboss-service.xml及其他*-service.xml
4. MBean name:domain:key,key

除了基於JMX標準的mbean實現方案,JBoss還支持用一個xml文件描述的方式將普通的Java對象開放爲一個mbean,即 XMBean。在service描述文件裏可以用xmbean-dd屬性指明一個外部的XMBean定義,或者將xmbean-dd屬性賦值爲"",在 mbean標籤中內嵌xmbean的內容說明。XMBean的優勢在於a)不需要目標Java對象實現任何JMX有關的接口;b)相對Standard MBean可以在xmbean-dd的xml內提供豐富的元數據描述信息。


5. JMX kernel描述文件:server/xxx/conf/jboss-service.xml 
6. 除了定義MBean的配置文件,也有Mbean使用的配置文件
    bootstrap.xml:初始化POJO的主文件
    jacorb.properties:用於配置Java Object Request Broker (JacORB)服務, 配置應用集羣會使用到
    jax-ws-catalog.xml:將xml metadata名字映射到本地metadata描述文件,支持jax-ws需要
    jbossjta-properties.xml:已過期,使用
    jbossts-properties.xml:
    jboss-log4j.xml:
    jboss-minimal.xml:最小的應用配置,不會使用
    jboss-service.xml:JMX kernel使用
    jndi.properties:JNDI service用於定義默認屬性
    login-config.xml:Security service用於定義login model
    standardjboss.xml :ejb用於定義設置
    standardjbosscmp-jdbc.cmp:當使用ejb2.x cmp,用於ejb爲各種數據庫定義類型映射
7. 配置目錄
    jboss.home.dir
    jboss.server.base.dir
    
    run.sh -Djboss.server.log.dir=d:/log
    如果同時有url/dir,兩個都要修改
8. 常用Mbean
    jboss:type=Service,name=SystemProperties
    jboss:service=JNDIView
    jboss.system:type=Log4jService,service=Logging
    !jboss.system:service=ThreadPool
    jboss.system:type=Server,  jboss.system:type=ServerConfig,jboss.system:type=ServerInfo
    
部署
1. 熱部署缺點:任何應用的狀態,包括session的狀態都會丟失,
    如何熱部署deploy\hdscanner-jboss-beans.xml,HDScanner scanEnabled
2. 新的class loader基於VFS:Virtual File System:簡化、統一應用server的文件處理
3. 多class loader
    應用服務器使用多CL,每個load特定class,用於分隔部署的不同的應用
    Server跟蹤CL,不僅定義那個CL加載那個class,而且定義規則一個CL是否能夠訪問其他CL、是否對其他CL可建
4. 數據源docs/examples/jca:*-ds.xml,部署後創建的Mbean:
    DataSourceBinding:管理 javax.sql.DataSource
    LocalTxCM:管理ConnectionManager,管理連接池,可以管理本地分佈事務,比如定義timeout時間
    XATxCM:同上 管理XA
    NoTxCM:同上
    ManagedConnectionFactory:管理connection factory,創建db 連接
    ManagedConnectionPool:管理db 連接池,監控活動連接,修改最大最小連接數量
    
集羣
1. 添加節點不需要管理,節點之間相互發現(哪些屬性相同的節點可以認爲是一個集羣?如何相互發現,僅限於局域網?)    
2. jboss提供一個複雜的分佈式cache 實現有狀態組件在節點之間複製狀態信息
3. homogenous cluster:應用、服務都相同
   heterogeneous cluster : 部署應用不同你
4. cluster不存在時,第一個啓動的節點建立cluster,並作爲協調者(coordinator),管理其他節點加入cluster
5. 自動發現功能是基於組通知機制:multicast(發送者只發送消息一次,並且不需要知道接受者的list),只要接受者監聽channel,就能收到信息
    多播的channel包含 地址和端口
6. jboss使用JGroups作爲點對點的通信工具,JGroups是一個穩定的多播通信工具
7. fault-tolerant: 一臺服務器down,用戶的狀態信息能保存在另一臺服務器,繼續操作
8. state replication:jboss使用cluster cache複製各個node的狀態信息
    需要犧牲性能,只有複製完成,才能給用戶回覆
9. TOTAL VERSUS BUDDY:前者集中,資源消耗大,後者環狀結對
10. Session passivation:用戶存儲長期沒響應的session,可能存於disk,db
11.    JGroups的兩個組件:channel和protocal stack
12. 組成集羣需要:
    多播地址:all\deploy\cluster\..\jgroups-channelfactory-stacks
    多播端口:all\deploy\cluster\..\jgroups-channelfactory-stacks
    clusterName/partitionName: all\deploy\cluster\hapartition-jboss-beans.xml
13. 各種j2ee組件對集羣和複製的需要
            Load Balance    StateReplication
    JSP        Y                Y
    slsb    Y                N
    sfsb    Y                Y
    entity    N                Y
    MDB        Y                N
    JNDI    Y                Y
14. 如果應用是無狀態的 沒有必要用集羣,只用load balance就行
    即使有狀態,也不一定非要集羣,除非需要fault-tolerant
15. 軟件負載均衡可以用tomcat 也可以通過ajp協議使用本地web server
    AJP協議是專門用於與類似jboss web app通信的機遇TCP的二進制協議
16. apache有個插件mod_proxy:http ajp負載均衡都支持
17. 實現sticky-session:客戶端瀏覽器始終訪問同一個server:修改deploy/jbossweb.sar/server.xml
    添加jvmRoute,名字在集羣中必須是唯一的
    <Service name="jboss.web">
    <Connector .../>
    <Connector .../>
    <Engine name="jboss.web" 
            defaultHost="localhost" 
            jvmRoute="node1">
            
session複製        
18. session複製: WEB-INF/web.xml,http的session會加入到分佈式cache
    <web-app>
        <distributable/>
        ...
    </web-app>         
    http session cache:standard-session-cache在這個文件中,有一些可配置的參數:
    /all/deploy/cluster/jboss-cache-manager.sar/META-INF/jboss-cache-configs.xml
19. session複製的配置在應用程序的WEB-INF/jboss-web.xml:
    <jboss-web>
        <replication-config>
            <replication-trigger>
                SET_AND_NON_PRIMITIVE_GET
            </replication-trigger>
        </replication-config>
    </jboss-web>
    
    是整個sessin都複製 還是隻複製修改的屬性
    <jboss-web>
       <replication-config>
          <replication-granularity>SESSION</replication-granularity>
       </replication-config>
    </jboss-web>
    可選session/attribute/field, standard-session-cache to field-granularity-session-cache默認field,還有replication-field-batch-mode表示是否立即複製,true的意思是request結束馬上執行
20. jboss-cache-configs.xml的CacheLoaderConfig
    passivation:控制cache與cacheloader的相互關係,true僅當從內存刪除時才使用cacheLoader寫入二級存儲,false立即寫入
    
    server的cacheLoader配置完,在應用的META-INF/jboss-web.xml 中配置如下才會啓用passivation
    <max-active-sessions>20</max-active-sessions>
    <passivation-config>
      <use-session-passivation>TRUE</use-session-passivation>
      <passivation-min-idle-time>5</passivation-min-idle-time>
      <passivation-max-idle-time>10</passivation-max-idle-time>
    </passivation-config>

Jboss cache

HA Partition Cache:deploy/cluster/cluster-jboss-beans.xml 
Stateful session bean cache:deploy/ejb3-interceptors-aop.xml
Entity bean cache :deployers/ejb3.deployer/META-INF/persistence.properties
HTTP session cache ;deployers/jbossweb.deployer/META-INF/war-deployers-jboss-beans.xml
HTTP single-sign-on cache :Hardcoded to clustered-sso, which is aliased to ha-partition in the jboss-cache-manager-jboss-beans.xml


21. SFSB的狀態複製
/all/deploy/cluster/jboss-cache-manager.sar/META-INF/jboss-cache-configs.xml:sfsb-cache 
22. session bean client端得動態代理可以實現負載均衡
23. jboss使用hibernate作爲其jpa實現
24. HA-JNDI service
    負載均衡和fail-over
    查詢每個server的本地jndi
    自動發現naming server
    複製cache
    
    每臺server同時有local和HA jndi服務,HA通過JGroups通信
    綁定到HA的對象纔會在server之間複製,綁定到local不會
    
    配置文件/all/deploy/cluster/hajndi-jboss-beans.xml
    jndi配置文件jndi.properties

調試
1. 32 or 64位
    32:如果只運行jboss,2GRAM足夠,可以分配一個1.4G的heap;再打怕是也沒有,OS需要2G
    64:通常4G足夠,越大的heap垃圾回收越慢,回收時應用程序可能長時間等待
2. OS
    CPU最好50-80,80以上就太高了
3. processor affinity
    processor affinity:大多數支持多cpu的系統都提供一個功能,限制一個給定的進程使用的cpu
    原因:cpu執行一個進程中的線程時,會將其數據和code緩存到cpu的cache,如果時間片段用完或等待資源,cpu執行其他線程,如果cpu cache夠大,原線程在重新執行時有很大可能性其code和數據還在cpu的cache中(如果不在需要從ram讀取,要慢很多)
    
    並不是說java不能用多cpu,有獨立線程的應用可能很好的使用64個甚至更多的cpu,但是App server中每個線程的工作不是專門用於某個工作,所以很難使用4個以上的cpu
    
    如果有8個cpu,可以利用這個特性啓動4個server,每個server使用兩個cpu
4. JVM參數
    建議heap的最大最小值相同:-Xms -Xmx:否則每次GC之後都會花費時間判斷是否調整大小
    建議young generation最大最小值相同:-XX:NewSize -XX:MaxNewSize=<size>
    建議young generation爲heap的1/4到1/3
5. GC兩種:minor major
    minor:the young generation
    major:tenured generation and the young generation
    
    收集YG的時候,沒有被回收的存於suvior space,收集結束,YG和suvivor space清空;過程中YC滿了,
    
生產環境
1. 組件server:JBOSS web server;ejb server;messaging server;web service container
2. JBoss Enterprise Application Platform:收費的企業版,包含各種經過測試的service的打包
    JBoss AS 
    JBoss Web Server 
    JavaServer Faces 
    JBoss Clustering 
    JBoss Cache 
    JBoss Messaging 
    JBoss Transactions JTA 
    Hibernate 
    JBoss Seam
3. 一臺機器運行多個instance
    使用兩個配置,各自擁有自己的目錄
    避免port衝突:server\default\conf\bindingservice.beans\META-INF\bindings-jboss-beans.xml;
    可以使用jboss.service.binding.set改變端口
    
    虛擬ip地址:windows裏設置指定ip,高級裏新建ip
4. 刪除不需要的service
    原因:安全,刪除了一個對外的端口;消耗內存、cpu
    可以通過刪除file和目錄刪除的服務:
        mail:mail-service.xml 
        Scheduler:scheduler-service.xml  schedule-manager-service.xml 
        Monitoring:monitoring-service.xml 
        Messaging (JMS):/messaging jms-ra.rar 
        Unique ID key generator:uuid-key-generator.sar 
        Home page:ROOT.war
        JMX Console:jmx-console.war
        Web Console:management
        Quartz:quartz-ra.rar
5. 應用安全:  JMX Console, the Web Console, and the root web application
    刪除
    添加安全驗證
    只允許本地訪問
6. 修改默認數據庫
    Login modules :    conf/login-config.xml
    CMP-EJB 2.x:        conf/standardjbosscmp-jdbc.xml
    Timer service-ejb2     deploy/ejb2-timer-service.
    Timer service-ejb3     deploy/ejb3-timer-service.xml
    Schedule manager     deploy/schedule-manager-service.xml
    Messaging             deploy/messaging/hsqldb-persistence-service.xml 
                        deploy/messaging/messaging-jboss-beans.xml
    UDDI                deploy/juddi-service.sar/juddi.war/WEB-INF/jboss-web.xml    
    SNMP Adaptor        deploy/snmp-adaptor.sar/attributes.xml
    UUID                deploy/uuid-key-generator.sar/META-INF/jboss-service.xml
    
    刪除hsqldb-ds.xml,xxx/lib/hsqldb*.jar
7. jsp預編譯
    不預編譯兩個缺點:第一個訪問者慢;一直檢查是否有更新
    server/xxx/deployers/jbossweb.deployer/web.xml
        development:如果true,檢查jsp修改的間隔爲modificationTestInterval
        checkInterval:如果develop是false,這個值大於0,會啓動後臺編譯,單位秒 檢查jsp是否需要重新編譯
        modificationTestInterval:0表示每次訪問都檢查是否有更新,默認值4

from  http://yingtju.blog.51cto.com/3760152/777857

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章