2014년 3월 13일 목요일

JBoss EAP6.2 Standalone Install

  1. 용어정의
    1. Instance = Server : WAS (Web Application Server)의 실질적인 서비스를 처리하는 Process
    2. 비용(총소유비용 TCO) : 도입을 위한 직접비용(CApex)외 변경,관리, 운영을 위한 관리비용 등(Opex) 통칭
    3. Domain : EAP 6 Domain 구성 기본자료  참고
    4. Standalone (독립실행형 서버, 이하 std)
      1. WAS의 관리상의 구성방법으로 구분하자면 아래와 같다
        1. Domain
          1. WAS Instance들을 관리상의 개념으로 묶어서 관리하는 구성(weblogic, webspher, JBoss EAP6 등이 Managed Domain 지원)
        2. Standalone
          1. WAS Instance를 각각 독립적으로 관리하는 구성  (일반적인 여타 tomcat, resin 등 OSS WAS)
      2. recommend
        1. Domain Concept : 대용량 사이트에서 하나의 서비스에 다수의 Instance를 관리하는 곳, 또는 HA가 필요한 작은 서비스가 여러개 있어 전체 Instance가 많을때  Domain 형태가 권장됨
          1. 장점
            1. Web APP Deploy를 통합하여 관리하는 장점(한번의 Deploy, 타켓팅 추가로 WAS Instance에 반영가능)
            2. WAS Config의 형상관리 장점(한번의 수정으로 다수의 WAS에 적용, 물론 모든 속성이 다 되는것이 아니다. 일부)
            3. Logical한 구조를 형상화 했을때 관리적면에서 직관적임(장애, 서비스검토시 장점)
            4. HA 구성시 편의성
          2. 단점
            1. Std 보다 초기 구축에 노력이 더 필요함 (Domain 구조 설계, Domain Controller 구성, HostController 구성 등 엔지니어의 구축비용)
            2. Domain 관리 구조에 대한 이해가 필요(운영자의 초기 교육을 위한 비용)
            3. 추가 system resource 점유(std에 없는 관리를 위한 추가 process 구동필요,  운영상 영향이 있을 정도로 많지는 않음)
            4. Config가 공유되므로(WAS Booting시 Domain에서 Config를 참조하여 구동된다.) 잘못된 Config는 전체에 영향을 미칠 수 있다.
              ■ JBoss EAP6 초기 기동시 메모리 점유
              JVM옵션은 기본값 설정에서 RSS 기준
              아래값은 절대 값이 아님. JVM 옵션에 따라 변동이 있을 수 있음
              (예를들어 Xms와 Xmx를 동일하게 하는경우 설정된 값으로 RSS 소모됨)

              Process Controller : 50M (큰 변동 없을듯???)
              Domain Controller(MASTER) : 156M (관리대상 Slave가 많아지면 늘어날 수 있음)
              Host Controller(SLAVE) : 139M (관리 Instance가 많아지면 늘어날 수 있음)
              Instance : 417M (이놈은 서비스를 위해 지정한 대로 복불복임, 좌측 값은 설치시 만들어지는 sample instance의 점유값 임)
              top - 17:50:25 up 1 day, 7:47, 5 users, load average: 1.75, 0.54, 0.25
              Tasks: 108 total, 1 running, 105 sleeping, 2 stopped, 0 zombie
              Cpu(s): 62.9%us, 3.3%sy, 0.0%ni, 33.4%id, 0.3%wa, 0.0%hi, 0.0%si, 0.0%st
              Mem: 1922488k total, 1626496k used, 295992k free, 56976k buffers
              Swap: 835576k total, 1112k used, 834464k free, 291484k cached
              PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
              11970 jboss 20 0 2392m 417m 16m S 1.7 22.3 0:10.29 /jboss/jdk/bin/java -D[Server:server-one] -XX:PermSize=256m -XX:MaxPermSize=256m -Xms1303m -Xmx1303m -server -Djbo
              11997 jboss 20 0 2405m 353m 16m S 63.1 18.8 0:10.18 /jboss/jdk/bin/java -D[Server:server-two] -XX:PermSize=256m -XX:MaxPermSize=256m -Xms1303m -Xmx1303m -server -Djbo
              10589 jboss 20 0 1137m 156m 15m S 0.3 8.4 0:16.15 /jboss/jdk/bin/java -D[Host Controller] -Dorg.jboss.boot.log.file=/jboss/domains/master/log/host-controller.log -D
              11936 jboss 20 0 1098m 139m 14m S 0.3 7.4 0:05.40 /jboss/jdk/bin/java -D[Host Controller] -Dorg.jboss.boot.log.file=/jboss/domains/slave1/log/host-controller.log -D
              10575 jboss 20 0 1098m 51m 9908 S 0.7 2.8 0:03.31 /jboss/jdk/bin/java -D[Process Controller] -server -Xms64m -Xmx128m -XX:MaxPermSize=256m -XX:+PrintGCTimeStamps -X
              11922 jboss 20 0 1090m 50m 9952 S 0.7 2.7 0:00.85 /jboss/jdk/bin/java -D[Process Controller] -server -Xms64m -Xmx128m -XX:MaxPermSize=256m -Xss256k -XX:+PrintGCTime

        2. Standalone concept : 개발장비, 검증장비, 적은 사용량을 가지는  단순한 사이트, 포털, 쇼핑몰과 같이 대량의 WAS를 Clustering(HA)없이 flat하게 펼칠 경우 오히려 단독형으로 구성하는 것이 관리상 권장될 수 있음
          1. 장점
            1. 초기 구성이 단순하여 노력비용이 상대적으로 낮음 (긴급 증설시  WAS 구성을 잘 정리해 놓는다면 빠르게 작업 가능)
            2. 잘못된 Config등(실수) 으로 인한 문제 발생시 장애 확산범위가 적음  (Config등이 다른 장비나 Instance와 독립적이므로 해당 장비에만 국한됨)
            3. Domain으로 구성하지 않더라도 HA등 구성가능함 (기존의 EAP5 이하 버젼에서 하던 방식으로 구성하면 됨)
          2. 단점
            1. 각각 서버에 대한 관리를 수행해야 하므로 운영시 관리비용이 상대적으로 높음(ex : 10개의 인스턴스는 10번의 작업필요, 1개 APP 10회 배포)
              1. 독립서버를 선호하는 고객사의 특징은 해당 서비스를 오래 운영하여 노하우 및 숙련도가 높은 경우이다.(쉽게말해 손가락이 빠른사람)
              2. 인력중심으로 운영되는 사이트의 경우 Std 형태를 선호할 수 있고 
              3. 생산성을 중요시하는 사이트의 경우 Domain형태를 선호할 수 있다. 
              4. 결국 정답이 없으므로 가이드는 하되 고객사 원하는 방향으로 진행한다.  (Domain이냐 Std냐에 따라 안되지 않는다..다만 수족이 고생할 뿐)
            2. 숙련도에 따라 human fault 발생 위험이 존재하며 발생시 찾기가 쉽지 않다
              1. domain 역시 한번의 실수로 여러 서버에 장애를 유발시킬 위험은 상존한다. 다만 그만큼 찾기도 용의하다
              2. 독립서버에의 경우 실수한곳을 찾기 위한 시간이 숙련도에 따라 아주 작거나(장애아님으로 판단)  엄청나게 오래(장애로 판단)걸 릴 수 있다. 관리적으로 보았을때 어짜피 둘다 장애임
  2. 설치준비
    1. EAP6 설치본  (StandAlone 용 별도 버젼이 있는것이 아니다. Domain 구성할때와 같은 바이너리를 사용하면 된다.)
      1. jboss ORG http://www.jboss.org/products/eap ) org에서도 EAP 버젼 다운로드 가능함, 로그인 필요
      2. Redhat https://access.redhat.com/site/downloads/  (파트너 사이트)
    2. StandAlone 용 스크립트 (rockplace 미들웨어컨설팅본부에 요청)
    3. JDK 1.6 또는 1.7 (http://www.oracle.com/technetwork/java/index.html)
    4. Web Server 연동시 (이 문서에서는 WAS구성만 진행함, WEB Connection은 별도 문서 작성예정)
      1. WebServer(EWS 또는 ApacheORG) (http://apache.org/)
      2. WebServer Connector (Redhat https://access.redhat.com/site/downloads/ )
  3. 환경준비 (Domain 설치시 준비와 별반 차이 없음)
    1.  /etc/hosts 
      1. Loadbalance(web)/Cluster(was) 대상 서버가 많은경우 webserver/was 서버의 hosts에 등록하면 IP로 해깔리기 보다는 이름으로 지정하는것이 정책상 유리(고객사 선호도에 따라 다르므로 협의)

      1. 설치정보 제공 (고객사에 의사결정 요청)
        1. Basic
          1.  
        2. Account
          1. jboss 계정 및 그룹
          2. 필요시 sudo 구성 관련 협의 (1024Port 이하로 서비스 할 경우 root로 구동해야 하나 정책상 sudo 적용이 필요한 경우)
          3. Web GUI Admin ID 및 Password
        3. PATH
          1. EAP 설치위치
          2. log 파일 위치
          3. Deploy Document 위치 (NAS Mount Point 등)
        4. Port 정보 (가이드 제공후 확인받음, 구성전에 해당 포트들에 대한 테스트는 지원인력의 역할)
          1. Web server
            1. http port
            2. ssl port
          2. WEB <-->WAS Proxy
            1. ajp port or httpd port or 연결을 위한 포트 정보
          3. WAS
            JBoss는 기본 domain.xml에 정의된 서비스에 서버의 Off set 값을 더하여 서비스 Port가 결정됨
            인터뷰 전에 기본 설정값을 정의하고 협의
            1. http service 
            2. Admin httpd service
            3. ajp port 
            4. Multicast port
            5. 기타
              1. JMS 등 JBOSS External service(jboss에서는 subsystem이라고 부름) 사용시 
        5. Network
          1. /etc/hosts 등록확인 (필요시 요청, root제공시 직접 등록 등)
          2. Multicast 관련  (WAS Clustering 및 Web-WAS Proxy(mod_cluster) 구성시 필요
            1. UDP Multicast 사용가능 여부 (가이드 제공하여 확인받음)
              1. 고객이 모를 가능성 90%, WAS들이 같은 subnet 인지확인, 같은 subnet에 다른 Multicast사용 솔루션 존재 여부 등 인터뷰를 통하여 확인 필요
            2. Multicast 주소 확인(가이드 제공하여 확인받음
          3. Layer4 LB가 있을 경우
            1. VIP 확인 (고객사 담당 또는 N/W 담당에게 확인)
            2. VIP를 통한 HTTP, HTTPS 서비스 LB 정책 등록 확인(정책 등록이 안되면 웹서버 설치하고 접속이 안되고....여하간 테스트가 번거로움)
              1. Web Server 구성 후 Server Local에서 telnet으로 확인 후  (80, 443 telnet test)
              2. VIP로 접속하여 정상 접속 확인  (Web Server Accesslog를 tail 해 놓으면 어느 서버로 들어오는지 확인가능)
          4. Firewall 정책확인
            설치 후 테스트 진행시 접속이 안되서 웹페이지 확인이 안되거나 , DB 연결 테스트를 못하는 경우가 있음
            되도록 사전에 확인하는것이 좋기는 하나 일일이 챙기기 힘들면 방문시 이야기해서 해결
            1. External --> F/W --> WEB Zone : HTTP, HTTPS Port 정책 확인 (Web Zone 외부에서 Port TEST)
            2. WEB Zone --> F/W --> WAS Zone
              1. mod_jk, mod_Proxy 등은 TCP Port 접근 가능한지 여부 확인 
              2. mod_cluster의 경우 Multicast인 경우 정책상 안될 가능성 높으므로 TCP로 LB할 방안 필요
            3. WAS Zone --> F/W --> DB Zone
              1. WAS 장비에서 DB 장비의 LISTENER의 접속 포트테스트
  4. 설치순서
    1. JDK 설치
      1. 알아서 잘....
    2.  EAP 압축해제 (/jboss/jboss-eap-6.2)
      #unzip jboss-eap-6.2.0.zip
    3. Domain 폴더 복사 ( 독립실행형 서버의 껍대기 만들기)
      1. WAS 정보를 구성할 폴더, 필요하면 협의해서 임의지정  (문서 작성시 임의로 domains 폴더에 아래쪽에 구성하기는 하나 임의 지정가능함)
        #mkdir /jboss/domains
      2. 설치본에 있는 Template 폴더(/jboss/jboss-eap-6.2/standalone)를 복사하여 필요한만큼 생성한다.  (이 문서에서는 1개의 단독실행형 서버 구성까지만 다룬다.)
        [jboss@kwonHost jboss-eap-6.2]$ pwd
        /jboss/jboss-eap-6.2
        [jboss@kwonHost jboss-eap-6.2]$ cp -r ./standalone /jboss/domains/standalone1
        [jboss@kwonHost jboss-eap-6.2]$ cp -r ./standalone /jboss/domains/standalone2  (필요한 만큼)

        물리적인 장비와 가상화장비에서 WAS Instance의 갯수
        물리적 장비와 가상화 장비의 차이는 결국 장비에 보유/할당 된 CPU Processor (processor는 CPU를 의미한다)의 갯수에 따른 
        적정한 Process(WAS 구동시 ps 명령어로 확인되는)갯수에 대한 논의이다.
        과거 multi-core가 없던 시절 또는 Sun(Sparc), HP(PA-RISC), IBM(POWER) 등 RISC칩에서는 일반적으로 1Processor(CPU) 당 1Process(WAS Instance1개)가 정론 이였다.
        하지만 multi-core 기술이 발전하면서 의미가 복잡해 졌다. 아래와 같은 질문에 의견을 제시해본다.

        Q : CPU가 N개 입니다. WAS 인스턴스 몇 개나 띄워야 하나(또는 띄울수 있는가)
        기본적으로 대부분의 솔루션 Process의 구동은 물리적 CPU (Core, HT 논외) 당 1개의를 권장합니다.(WAS 역시 Java Process 이므로 동일함)
        하지만 이것은 Software 개발사 입장에서 러프하게(잘못되도 책임이 없을정도로....)잡은것이고
        운영자 입장에서는 이런 가이드를 그대로 따라했다가는 Over Sizing때문에 비용낭비가 발생합니다.
        하지만....사실 틀린말도 아니니 각자의 입장에서야 어쩔 수 없죠.... ^^;;

        멀티코어 기술이 발전하면 요즘은 1Core = 예전의 1CPU 로 생각하기때문에
        논리적으로 Processor(CPU) 2개 각 Processor 당 Core 4 인 1U 장비의 경우 
        기본은 2개(엔지니어입장), Core를 감안하여 최대 8개(운영자입장) 까지 가능 하겠다고 말할 수 있습니다.
        하지만
        최대 Core수의 70% (8Core * 0.7 = 5.6) 인 6개 Process를 최대로 권장합니다.

        이렇게 권장하는 근거는 1CPU와 Dual Core CPU 간의 성능 향상은 CPU 연산으로는 2배 수가 맞으나 
        Core의 증가로 인하여 core와 Memory 구간의 통신 bandwidth bottleneck(병목구간)이 증가합니다. 
        (H/W적으로 지속적인 개선이 되고 있으나 장비에 따라 다르므로 software측인 WAS입장에서 정확한 수치는 제공하기 어렵다)
        이에 따라 일반적으로 전체 Core수 만큰 WAS Process를 구동하는것은 권장되지 않습니다. (장비의 성능에 따라 모니터링을 통하여 관리 되어야 할 문제)
        특히나 GC 성능을 향상 시키기 위해 병렬(Para) 또는 실시간(CMS) 등의 GC 알고리즘을 적용하면 
        기본값은 OS상에서 확인되는 CPU 개수(=시스템의 Core개수)만큼의 Thread가 JVM 메모리 정리를 위하여 구동되므로(JVM Option으로 수동 조정가능)
        전체 Core 수의 70% 수준으로 WAS Process를 구동시킬 것을 권장합니다.

        Q : 2CPU 장비인 Dell 장비가 있다. CPU당 Core가 8개 짜리인데 인스턴스는 몇 개나 띄워야 하나
        위에서 말했듯이  8 * 2 = 16core
        16core * 0,7 = 11.2 으로 최대 11개정도가 가능하겠습니다. (메모리가 가능하다면...사실 이런 장비는 닥치고 가상화 하는겁니다.)
        튜닝 값에 절대 값은 없습니다. 운영상태를 모니터링해서 더 띄워도 됩니다만.... 
        역설적으로 더 구동해도 된다는것은 그만큼 트래픽이 적다는 의미 이므로
        차라리 서버수를 줄이는 통합 작업을 거치는 것이 좋은 방향일 수 있습니다.

        Q: Hyper-Threading(HT)을 켜면 CPU가 2배 많아진다.(보기에...) 그만큼 WAS를 더 띄워도 되나
        Hyper-Threading(이하 HT)는 로지컬하게 CPU로 들어오는 명령어를 CPU에 Mapping 하는것이 아니라
        가상의 Thread를(LWP : light-weight process 등으로 부름) CPU 같이 보이도록 하여 CPU를 최대한 활용하고자 하는 노력입니다.
        이러한 컨셉은 1개의 요청이 단순하다는 전제를 가집니다.
        일반 PC가 아닌 서버장비에서는 양적으로 엄청나게 많고... 복잡도 면에서 단순부터 복잡까지 다양한 형태의 작업이 수행됩니다.
        이로 인하여 CPU에서 작업을 처리하기 위한 요청이 많고 이는 잦은 Context Switching(이하 CTX)을 유발합니다.
        ctx는 1개의 CPU에 여러개의 작업이 순서대로 들어가 수행되기 위해 작업을 그때그때 교체하여 처리 하는것으로
        많아지면 전체적인 처리성능의 저하를 유발합니다. (EDPS 수업에서 CPU는 시분할 처리 방식이라고 했던 기억을 생각해 보시면....)

        예를 들어 내가 작업 세가지를 동시에 하는데 각 작업을 수행할때 책상을 정리해야 한다면
        몇개의 작업을 동시에 처리할때는 책상을 정리하는 시간이 큰 문제가 아니고 세가지를 순서대로 하는것 보다
        빨리 처리될 수 도 있겟지만 동시 작업량이 점점 늘어나 무한대로 진행하면
        결국 전체 작업시간에서 대부분을 책상을 정리하는 시간으로 소모하게 됩니다.(Over head라고 부르는)
        이러한 기본적인 상식선상에서
        WAS 장비에서 Hyper-Threading은 오히려 성능을 떨어트릴 수 있고
        일반적으로 Server 장비에서는 HT Off를 기본 권장하기도 합니다.
        (HT에 대한 지식수준에 따라 이 부분은 사람들 마다 다르게 생각합니다.... 결국은 고객사이트가 원하는대로 해주는게 진리)

        Q. 서버 가상화 환경에서 4Core를 할당한 VM에는 WAS를 몇개나 만들면 됩니까? (Production환경)
        기본은 위 연산과 동일하게 생각하면 됩니다.
        4 * 0.7 = 2.8 = 3개 이하로 운영하는겁니다.
        다만 가상화 장비에서 CPU를 Over Commit 하는등 Production에 어울리지 않게(?) 운영하고 있다면
        모니터링을 통해서 Bare-metal(물리적인 장비)의 CTX 값이나 CPU 상태를 보고 판단해야 합니다.
        예를들어
        32Core 장비에 WAS VM만 바쁘고 다른 VM이 다 놀고 있다면 전혀 이상이 없겠으나
        Load Avr이 50% 이상인 장비에서 WAS VM이 바쁘게 동작한다면 가상화 장비의 성능에 영향을 받을 수 있습니다.

        Software인 WAS입장에서 Physical 장비의 멀티코어, HT에 대한 가이드는 장비 특성에 너무 많이 의존적이라 사실 가이드를 하면 안됩니다.
        (약은 약사에게 병의 의사에게...를 기억합시다)
        거기다 가상화까지 해 놓는다면 이를 가이드 할 수 는 없습니다.
        다만 기준을 제시 할 수 있으나 절대적이지 않음을 주지시키면서 가이드를 제공해야 합니다.

        .....아.... 울 호갱님들이 내 사이트에 얼마나 들어올지
        일시킨 개발자가 짜놓은 APP 성능이 어떨지
        SQL이 얼마나 빨리 반응할지
        알!수!가! 없다!!
        대체 WAS가 얼마나 부하가 발생할지 사실 알게 무어냐!
        Open전 스트레스테스트와 모니터링만이 살길이다

      3. 구동 정지및 모니터링을 위한 쉡 스크립트를 복사하여 넣는다
        스크립트에 실행권한 추가 및 복사
        [jboss@kwonHost slave]$ pwd
        /jboss/EAP6_Standalone_Script
        [jboss@kwonHost slave]$ chmod +x ./*.sh
        [jboss@kwonHost slave]$ cp /jboss/EAP6_Standalone_Script/* /jboss/domains/standalone1

      4. 로그가 저장될 공간을 만들어준다. 폴더가 없으면 쌓이지 않는다. (스크립트 개선필요)
        cd /jboss/domains/standalone1
        mkdir -p ./log/controllerlog
        mkdir -p ./log/gclog
        mkdir -p ./log/nohup

    4. Standalone(독립실행형) 서버 구성
      1. env.sh 수정
        [jboss@kwonHost standalone1]$ cat env.sh
        #!/bin/sh
        DATE=`date +%Y%m%d%H%M%S`
        export JAVA_HOME=/jboss/jdk
        ##### JBOSS Directory Setup #####
        export JBOSS_HOME=/jboss/jboss-eap-6.2
        export DOMAIN_BASE=/jboss/domains
        export SERVER_NAME=standalone1

        ##### Configration File #####
        #Standalone으로 구성하되 프로파일에 따라 지원이 다름
        #standalone.xml : 지정하지 않으면 기본 적용되는 설정, HA나 추가 subsystem(JMS같은) 미포함
        #standalone-ha.xml : Cluster 및 Loadbalance 을 포함하여 구동됨, subsystem 미포함 <== Cluster 구성시 보통 이거
        #standalone-full.xml : HA는 미포함 sybsystem만 포함하여 구동
        #standalone-full-ha.xml : subsystem과 HA를 모두 포함하여 구동됨
        export CONFIG_FILE=standalone-ha.xml
        export HOST_NAME=standalone1
        export NODE_NAME=$SERVER_NAMEexport PORT_OFFSET=10
        export JBOSS_USER=jboss
        #WAS의 서비스 Port
        ##### Bind Address #####
        export BIND_ADDR=0.0.0.0
        export MGMT_ADDR=0.0.0.0
        #export MGMT_ADDR=127.0.0.1
        #Cluster 구성시 필요한 Muticast 정보
        #export MULTICAST_ADDR=230.1.0.1
        #export JMS_MULTICAST_ADDR=231.7.0.1
        #export MODCLUSTER_MULTICAST_ADDR=224.0.1.105

        #Admin GUI 접속을 위한 정보 (이 부분 검토해서 MGMT 부분하고 스크립트 통합 필요)
        #export CONTROLLER_IP=$MGMT_ADDR
        export CONTROLLER_IP=127.0.0.1
        let CONTROLLER_PORT=9999+$PORT_OFFSET
        export CONTROLLER_PORT
        export LAUNCH_JBOSS_IN_BACKGROUND=true
        export LOG_HOME=$DOMAIN_BASE/$SERVER_NAME/log
        #export LOG_HOME=/ctmsap_log
        ##### JBoss System module and User module directory #####
        export JBOSS_MODULEPATH=$JBOSS_HOME/modules:$JBOSS_HOME/modules.ext

        # JVM Options : Server
        export JAVA_OPTS="-server $JAVA_OPTS"
        # JVM Options : Memory
        export JAVA_OPTS=" $JAVA_OPTS -Xms2048m -Xmx2048m -XX:MaxPermSize=256m"
        export JAVA_OPTS=" $JAVA_OPTS -XX:+PrintGCTimeStamps "
        export JAVA_OPTS=" $JAVA_OPTS -XX:+PrintGCDetails "
        export JAVA_OPTS=" $JAVA_OPTS -Xloggc:$LOG_HOME/gclog/gc_$DATE.log "
        export JAVA_OPTS=" $JAVA_OPTS -XX:+UseParallelGC "
        #export JAVA_OPTS=" $JAVA_OPTS -XX:+UseConcMarkSweepGC "
        export JAVA_OPTS=" $JAVA_OPTS -XX:+ExplicitGCInvokesConcurrent "
        export JAVA_OPTS=" $JAVA_OPTS -XX:-HeapDumpOnOutOfMemoryError "
        export JAVA_OPTS=" $JAVA_OPTS -XX:HeapDumpPath=$LOG_HOME/gclog/java_pid.hprof"
        #JAVA_OPTS="$JAVA_OPTS -Djboss.jvmRoute=jvm1"
        # mod_cluster.jvmroute
        #JAVA_OPTS="$JAVA_OPTS -Djboss.mod_cluster.jvmRoute=node1"
        # Linux Large Page Setting
        #export JAVA_OPTS=" $JAVA_OPTS -XX:+UseLargePages "
        export JAVA_OPTS=" $JAVA_OPTS -verbose:gc"
        export JAVA_OPTS=" $JAVA_OPTS -Xloggc:$LOG_HOME/gclog/gc.log"
        export JAVA_OPTS=" $JAVA_OPTS -Djava.net.preferIPv4Stack=true"
        export JAVA_OPTS=" $JAVA_OPTS -Dorg.jboss.resolver.warning=true"
        export JAVA_OPTS=" $JAVA_OPTS -Dsun.rmi.dgc.client.gcInterval=3600000 "
        export JAVA_OPTS=" $JAVA_OPTS -Dsun.rmi.dgc.server.gcInterval=3600000"
        export JAVA_OPTS=" $JAVA_OPTS -Djboss.modules.system.pkgs=org.jboss.byteman"
        export JAVA_OPTS=" $JAVA_OPTS -Djava.awt.headless=true"
        export JAVA_OPTS=" $JAVA_OPTS -Djboss.server.base.dir=$DOMAIN_BASE/$SERVER_NAME"
        export JAVA_OPTS=" $JAVA_OPTS -Djboss.socket.binding.port-offset=$PORT_OFFSET"
        export JAVA_OPTS=" $JAVA_OPTS -Djboss.node.name=$NODE_NAME"
        export JAVA_OPTS=" $JAVA_OPTS -Djboss.bind.address.management=$MGMT_ADDR"
        export JAVA_OPTS=" $JAVA_OPTS -Djboss.bind.address=$BIND_ADDR"
        #export JAVA_OPTS=" $JAVA_OPTS -Djboss.bind_addr=$MULTICAST_ADDR"
        #export JAVA_OPTS=" $JAVA_OPTS -Djboss.default.jgroups.stack=tcp"
        export JAVA_OPTS=" $JAVA_OPTS -Djboss.default.multicast.address=$MULTICAST_ADDR"
        export JAVA_OPTS=" $JAVA_OPTS -Djboss.messaging.group.address=$JMS_MULTICAST_ADDR"
        export JAVA_OPTS=" $JAVA_OPTS -Djboss.modcluster.multicast.address=$MODCLUSTER_MULTICAST_ADDR"
        export JAVA_OPTS=" $JAVA_OPTS -Dserver.mode=local"
        # Use log4j in application
        export JAVA_OPTS=" $JAVA_OPTS -Dorg.jboss.as.logging.per-deployment=false "
        export JAVA_OPTS=" $JAVA_OPTS -Djboss.server.log.dir=$LOG_HOME"
        echo "================================================"
        echo "JBOSS_HOME=$JBOSS_HOME"
        echo "DOMAIN_BASE=$DOMAIN_BASE"
        echo "SERVER_NAME=$SERVER_NAME"
        echo "CONFIG_FILE=$CONFIG_FILE"
        echo "BIND_ADDR=$BIND_ADDR"
        echo "PORT_OFFSET=$PORT_OFFSET"
        echo "MULTICAST_ADDR=$MULTICAST_ADDR"
        echo "CONTROLLER=$CONTROLLER_IP:$CONTROLLER_PORT"
        echo "================================================"

    5. Admin Console User 생성
      1. Standalone mode로 기동하면 Admin Console(GUI)가 Instance 상에서 기동된다.
      2. 계정을 아래와 같이 생성합니다.
        #add-user.sh [id] [password]
        !! Password가 너무 쉬운경우 생성안됨. 아래쪽 볼드체 부분이 출력되는지 꼭 확인할것 (8자이상 & 영문자 1개이상 & 특수문자1개이상 )
        [jboss@kwonHost standalone1]$ ./add-user.sh admin 123456a!
        ================================================
        JBOSS_HOME=/jboss/jboss-eap-6.2
        DOMAIN_BASE=/jboss/domains
        SERVER_NAME=standalone1
        CONFIG_FILE=standalone-ha.xml
        BIND_ADDR=0.0.0.0
        PORT_OFFSET=10
        MULTICAST_ADDR=
        CONTROLLER=127.0.0.1:10009
        ================================================
        Added user 'admin' to file '/jboss/domains/standalone1/configuration/mgmt-users.properties'
        Added user 'admin' to file '/jboss/jboss-eap-6.2/domain/configuration/mgmt-users.properties'



    6. 기동 스크립트 실행
      /jboss/domains/standalone1/start.sh

      [jboss@kwonHost standalone1]$ ./start.sh
      ================================================
      JBOSS_HOME=/jboss/jboss-eap-6.2
      DOMAIN_BASE=/jboss/domains
      SERVER_NAME=standalone1
      CONFIG_FILE=standalone-ha.xml
      BIND_ADDR=0.0.0.0
      PORT_OFFSET=10
      MULTICAST_ADDR=
      CONTROLLER=127.0.0.1:10009
      ================================================
      -server -Xms256m -Xmx512m -XX:MaxPermSize=128m -XX:+PrintGCTimeStamps -XX:+PrintGCDetails -Xloggc:/jboss/domains/standalone1/log/gclog/gc_20140313013825.log -XX:+UseParallelGC -XX:+ExplicitGCInvokesConcurrent -XX:-HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/jboss/domains/standalone1/log/gclog/java_pid.hprof -verbose:gc -Xloggc:/jboss/domains/standalone1/log/gclog/gc.log -Djava.net.preferIPv4Stack=true -Dorg.jboss.resolver.warning=true -Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=3600000 -Djboss.modules.system.pkgs=org.jboss.byteman -Djava.awt.headless=true -Djboss.server.base.dir=/jboss/domains/standalone1 -Djboss.socket.binding.port-offset=10 -Djboss.node.name=standalone1 -Djboss.bind.address.management=0.0.0.0 -Djboss.bind.address=0.0.0.0 -Djboss.default.multicast.address= -Djboss.messaging.group.address= -Djboss.modcluster.multicast.address= -Dserver.mode=local -Dorg.jboss.as.logging.per-deployment=false -Djboss.server.log.dir=/jboss/domains/standalone1/log
      01:36:08,665 INFO [org.jboss.as] (Controller Boot Thread) JBAS015951: Admin console listening on http://0.0.0.0:10000
      01:36:08,665 INFO [org.jboss.as] (Controller Boot Thread) JBAS015874: JBoss EAP 6.2.0.GA (AS 7.3.0.Final-redhat-14) started in 8681ms - Started 131 of 247 services (115 services are passive or on-demand)
      01:38:17,163 INFO [org.apache.coyote.http11] (MSC service thread 1-1) JBWEB003075: Coyote HTTP/1.1 pausing on: http-/0.0.0.0:8090
      01:38:17,164 INFO [org.apache.coyote.http11] (MSC service thread 1-1) JBWEB003077: Coyote HTTP/1.1 stopping on : http-/0.0.0.0:8090
      01:38:17,281 INFO [org.apache.catalina.core] (MSC service thread 1-2) JBWEB001079: Container org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/] has not been started
      01:38:17,270 INFO [org.jboss.modcluster] (ServerService Thread Pool -- 54) MODCLUSTER000002: Initiating mod_cluster shutdown
      01:38:17,287 INFO [org.jboss.as.connector.subsystems.datasources] (MSC service thread 1-1) JBAS010409: Unbound data source [java:jboss/datasources/ExampleDS]
      01:38:17,304 INFO [org.apache.coyote.ajp] (MSC service thread 1-2) JBWEB003048: Pausing Coyote AJP/1.3 on ajp-/0.0.0.0:8019
      01:38:17,305 INFO [org.apache.coyote.ajp] (MSC service thread 1-2) JBWEB003051: Stopping Coyote AJP/1.3 on ajp-/0.0.0.0:8019
      01:38:17,350 INFO [org.jboss.as] (MSC service thread 1-2) JBAS015950: JBoss EAP 6.2.0.GA (AS 7.3.0.Final-redhat-14) stopped in 160ms
      nohup: redirecting stderr to stdout
      01:38:26,531 INFO [org.jboss.modules] (main) JBoss Modules version 1.3.0.Final-redhat-2
      01:38:27,096 INFO [org.jboss.msc] (main) JBoss MSC version 1.0.4.GA-redhat-1
      01:38:27,277 INFO [org.jboss.as] (MSC service thread 1-2) JBAS015899: JBoss EAP 6.2.0.GA (AS 7.3.0.Final-redhat-14) starting
      01:38:27,287 DEBUG [org.jboss.as.config] (MSC service thread 1-2) Configured system properties:
      SERVER = standalone1
      [Standalone] =
      file.encoding = UTF-8
      file.encoding.pkg = sun.io
      file.separator = /
      java.awt.graphicsenv = sun.awt.X11GraphicsEnvironment
      java.awt.headless = true
      java.awt.printerjob = sun.print.PSPrinterJob
      java.class.path = /jboss/jboss-eap-6.2/jboss-modules.jar
      java.class.version = 50.0
      java.endorsed.dirs = /jboss/jdk1.6.0_45/jre/lib/endorsed
      java.ext.dirs = /jboss/jdk1.6.0_45/jre/lib/ext:/usr/java/packages/lib/ext
      java.home = /jboss/jdk1.6.0_45/jre
      java.io.tmpdir = /tmp
      java.library.path = /jboss/jdk1.6.0_45/jre/lib/amd64/server:/jboss/jdk1.6.0_45/jre/lib/amd64:/jboss/jdk1.6.0_45/jre/../lib/amd64:/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib
      java.net.preferIPv4Stack = true
      java.runtime.name = Java(TM) SE Runtime Environment
      java.runtime.version = 1.6.0_45-b06
      java.specification.name = Java Platform API Specification
      java.specification.vendor = Sun Microsystems Inc.
      java.specification.version = 1.6
      java.util.logging.manager = org.jboss.logmanager.LogManager
      java.vendor = Sun Microsystems Inc.
      java.vendor.url = http://java.sun.com/
      java.vendor.url.bug = http://java.sun.com/cgi-bin/bugreport.cgi
      java.version = 1.6.0_45
      java.vm.info = mixed mode
      java.vm.name = Java HotSpot(TM) 64-Bit Server VM
      java.vm.specification.name = Java Virtual Machine Specification
      java.vm.specification.vendor = Sun Microsystems Inc.
      java.vm.specification.version = 1.0
      java.vm.vendor = Sun Microsystems Inc.
      java.vm.version = 20.45-b01
      javax.management.builder.initial = org.jboss.as.jmx.PluggableMBeanServerBuilder
      javax.xml.datatype.DatatypeFactory = __redirected.__DatatypeFactory
      javax.xml.parsers.DocumentBuilderFactory = __redirected.__DocumentBuilderFactory
      javax.xml.parsers.SAXParserFactory = __redirected.__SAXParserFactory
      javax.xml.stream.XMLEventFactory = __redirected.__XMLEventFactory
      javax.xml.stream.XMLInputFactory = __redirected.__XMLInputFactory
      javax.xml.stream.XMLOutputFactory = __redirected.__XMLOutputFactory
      javax.xml.transform.TransformerFactory = __redirected.__TransformerFactory
      javax.xml.validation.SchemaFactory:http://www.w3.org/2001/XMLSchema = __redirected.__SchemaFactory
      javax.xml.xpath.XPathFactory:http://java.sun.com/jaxp/xpath/dom = __redirected.__XPathFactory
      jboss.bind.address = 0.0.0.0
      jboss.bind.address.management = 0.0.0.0
      jboss.default.multicast.address =
      jboss.home.dir = /jboss/jboss-eap-6.2
      jboss.host.name = kwonhost
      jboss.messaging.group.address =
      jboss.modcluster.multicast.address =
      jboss.modules.dir = /jboss/jboss-eap-6.2/modules
      jboss.modules.system.pkgs = org.jboss.byteman
      jboss.node.name = standalone1
      jboss.qualified.host.name = kwonhost
      jboss.server.base.dir = /jboss/domains/standalone1
      jboss.server.config.dir = /jboss/domains/standalone1/configuration
      jboss.server.data.dir = /jboss/domains/standalone1/data
      jboss.server.deploy.dir = /jboss/domains/standalone1/data/content
      jboss.server.log.dir = /jboss/domains/standalone1/log
      jboss.server.name = kwonhost
      jboss.server.persist.config = true
      jboss.server.temp.dir = /jboss/domains/standalone1/tmp
      jboss.socket.binding.port-offset = 10
      line.separator =
      logging.configuration = file:/jboss/domains/standalone1/configuration/logging.properties
      module.path = /jboss/jboss-eap-6.2/modules:/jboss/jboss-eap-6.2/modules.ext
      org.apache.catalina.connector.URI_ENCODING = UTF-8
      org.apache.catalina.connector.USE_BODY_ENCODING_FOR_QUERY_STRING = true
      org.apache.coyote.ajp.DEFAULT_CONNECTION_TIMEOUT = 60000
      org.apache.coyote.http11.DEFAULT_CONNECTION_TIMEOUT = 60000
      org.apache.coyote.http11.Http11Protocol.MAX_HEADER_SIZE = 8192
      org.jboss.as.logging.per-deployment = false
      org.jboss.boot.log.file = /jboss/domains/standalone1/log/server.log
      org.jboss.resolver.warning = true
      org.xml.sax.driver = __redirected.__XMLReaderFactory
      os.arch = amd64
      os.name = Linux
      os.version = 2.6.32-431.el6.x86_64
      path.separator = :
      server.mode = local
      sun.arch.data.model = 64
      sun.boot.class.path = /jboss/jdk1.6.0_45/jre/lib/resources.jar:/jboss/jdk1.6.0_45/jre/lib/rt.jar:/jboss/jdk1.6.0_45/jre/lib/sunrsasign.jar:/jboss/jdk1.6.0_45/jre/lib/jsse.jar:/jboss/jdk1.6.0_45/jre/lib/jce.jar:/jboss/jdk1.6.0_45/jre/lib/charsets.jar:/jboss/jdk1.6.0_45/jre/lib/modules/jdk.boot.jar:/jboss/jdk1.6.0_45/jre/classes
      sun.boot.library.path = /jboss/jdk1.6.0_45/jre/lib/amd64
      sun.cpu.endian = little
      sun.cpu.isalist =
      sun.io.unicode.encoding = UnicodeLittle
      sun.java.command = /jboss/jboss-eap-6.2/jboss-modules.jar -mp /jboss/jboss-eap-6.2/modules:/jboss/jboss-eap-6.2/modules.ext -jaxpmodule javax.xml.jaxp-provider org.jboss.as.standalone -Djboss.home.dir=/jboss/jboss-eap-6.2 -Djboss.server.base.dir=/jboss/domains/standalone1 -DSERVER=standalone1 -P=/jboss/domains/standalone1/env.properties -c standalone-ha.xml
      sun.java.launcher = SUN_STANDARD
      sun.jnu.encoding = UTF-8
      sun.management.compiler = HotSpot 64-Bit Tiered Compilers
      sun.os.patch.level = unknown
      sun.rmi.dgc.client.gcInterval = 3600000
      sun.rmi.dgc.server.gcInterval = 3600000
      user.country = KR
      user.dir = /jboss/domains/standalone1
      user.home = /jboss
      user.language = ko
      user.name = jboss
      user.timezone = ROK
      01:38:27,293 DEBUG [org.jboss.as.config] (MSC service thread 1-2) VM Arguments: -D[Standalone] -XX:+UseCompressedOops -Xms256m -Xmx512m -XX:MaxPermSize=128m -XX:+PrintGCTimeStamps -XX:+PrintGCDetails -Xloggc:/jboss/domains/standalone1/log/gclog/gc_20140313013825.log -XX:+UseParallelGC -XX:+ExplicitGCInvokesConcurrent -XX:-HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/jboss/domains/standalone1/log/gclog/java_pid.hprof -verbose:gc -Xloggc:/jboss/domains/standalone1/log/gclog/gc.log -Djava.net.preferIPv4Stack=true -Dorg.jboss.resolver.warning=true -Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=3600000 -Djboss.modules.system.pkgs=org.jboss.byteman -Djava.awt.headless=true -Djboss.server.base.dir=/jboss/domains/standalone1 -Djboss.socket.binding.port-offset=10 -Djboss.node.name=standalone1 -Djboss.bind.address.management=0.0.0.0 -Djboss.bind.address=0.0.0.0 -Djboss.default.multicast.address= -Djboss.messaging.group.address= -Djboss.modcluster.multicast.address= -Dserver.mode=local -Dorg.jboss.as.logging.per-deployment=false -Djboss.server.log.dir=/jboss/domains/standalone1/log -Dorg.jboss.boot.log.file=/jboss/domains/standalone1/log/server.log -Dlogging.configuration=file:/jboss/domains/standalone1/configuration/logging.properties
      01:38:29,941 INFO [org.xnio] (MSC service thread 1-1) XNIO Version 3.0.7.GA-redhat-1
      01:38:29,960 INFO [org.jboss.as.server] (Controller Boot Thread) JBAS015888: Creating http management service using socket-binding (management-http)
      01:38:29,962 INFO [org.xnio.nio] (MSC service thread 1-1) XNIO NIO Implementation Version 3.0.7.GA-redhat-1
      01:38:29,988 INFO [org.jboss.remoting] (MSC service thread 1-1) JBoss Remoting version 3.2.18.GA-redhat-1
      01:38:30,037 ERROR [org.jboss.as.controller.management-operation] (Controller Boot Thread) JBAS014613: Operation ("add") failed - address: ([
      ("socket-binding-group" => "standard-sockets"),
      ("socket-binding" => "jgroups-mping")
      ]) - failure description: "JBAS014704: '' is an invalid value for parameter multicast-address. Values must have a minimum length of 1 characters"
      01:38:30,042 ERROR [org.jboss.as.controller.management-operation] (Controller Boot Thread) JBAS014613: Operation ("add") failed - address: ([
      ("socket-binding-group" => "standard-sockets"),
      ("socket-binding" => "jgroups-udp")
      ]) - failure description: "JBAS014704: '' is an invalid value for parameter multicast-address. Values must have a minimum length of 1 characters"
      01:38:30,094 INFO [org.jboss.as.clustering.infinispan] (ServerService Thread Pool -- 31) JBAS010280: Activating Infinispan subsystem.
      01:38:30,116 INFO [org.jboss.as.clustering.jgroups] (ServerService Thread Pool -- 35) JBAS010260: Activating JGroups subsystem.
      01:38:30,186 INFO [org.jboss.as.naming] (ServerService Thread Pool -- 41) JBAS011800: Activating Naming Subsystem
      01:38:30,169 INFO [org.jboss.as.jsf] (ServerService Thread Pool -- 38) JBAS012605: Activated the following JSF Implementations: [main, 1.2]
      01:38:30,247 INFO [org.jboss.as.security] (ServerService Thread Pool -- 46) JBAS013171: Activating Security Subsystem
      01:38:30,300 INFO [org.jboss.as.webservices] (ServerService Thread Pool -- 50) JBAS015537: Activating WebServices Extension
      01:38:30,548 INFO [org.jboss.as.connector.logging] (MSC service thread 1-2) JBAS010408: Starting JCA Subsystem (IronJacamar 1.0.23.Final-redhat-1)
      01:38:30,664 INFO [org.jboss.as.connector.subsystems.datasources] (ServerService Thread Pool -- 27) JBAS010403: Deploying JDBC-compliant driver class org.h2.Driver (version 1.3)
      01:38:30,718 INFO [org.jboss.as.naming] (MSC service thread 1-2) JBAS011802: Starting Naming Service
      01:38:30,722 INFO [org.jboss.as.security] (MSC service thread 1-1) JBAS013170: Current PicketBox version=4.0.19.SP2-redhat-1
      01:38:30,980 INFO [org.jboss.as.mail.extension] (MSC service thread 1-1) JBAS015400: Bound mail session [java:jboss/mail/Default]
      01:38:31,580 INFO [org.apache.coyote.ajp] (MSC service thread 1-1) JBWEB003046: Starting Coyote AJP/1.3 on ajp-/0.0.0.0:8019
      01:38:31,573 INFO [org.apache.coyote.http11] (MSC service thread 1-2) JBWEB003001: Coyote HTTP/1.1 initializing on : http-/0.0.0.0:8090
      01:38:31,598 INFO [org.apache.coyote.http11] (MSC service thread 1-2) JBWEB003000: Coyote HTTP/1.1 starting on: http-/0.0.0.0:8090
      01:38:32,134 INFO [org.jboss.modcluster] (ServerService Thread Pool -- 52) MODCLUSTER000001: Initializing mod_cluster ${project.version}
      01:38:32,297 INFO [org.jboss.modcluster] (ServerService Thread Pool -- 52) MODCLUSTER000032: Listening to proxy advertisements on /224.0.1.105:23364
      01:38:32,395 INFO [org.infinispan.configuration.cache.EvictionConfigurationBuilder] (ServerService Thread Pool -- 31) ISPN000152: Passivation configured without an eviction policy being selected. Only manually evicted entities will be passivated.
      01:38:32,504 INFO [org.infinispan.configuration.cache.EvictionConfigurationBuilder] (ServerService Thread Pool -- 31) ISPN000152: Passivation configured without an eviction policy being selected. Only manually evicted entities will be passivated.
      01:38:33,038 INFO [org.jboss.ws.common.management] (MSC service thread 1-1) JBWS022052: Starting JBoss Web Services - Stack CXF Server 4.2.3.Final-redhat-1
      01:38:33,397 INFO [org.jboss.as.connector.subsystems.datasources] (MSC service thread 1-1) JBAS010400: Bound data source [java:jboss/datasources/ExampleDS]
      01:38:33,755 INFO [org.jboss.as.remoting] (MSC service thread 1-2) JBAS017100: Listening on 0.0.0.0:10009
      01:38:33,820 INFO [org.jboss.as.server.deployment.scanner] (MSC service thread 1-2) JBAS015012: Started FileSystemDeploymentService for directory /jboss/domains/standalone1/deployments
      01:38:33,828 INFO [org.jboss.as.remoting] (MSC service thread 1-2) JBAS017100: Listening on 0.0.0.0:4457
      01:38:34,177 INFO [org.jboss.as] (Controller Boot Thread) JBAS015961: Http management interface listening on http://0.0.0.0:10000/management
      01:38:34,178 INFO [org.jboss.as] (Controller Boot Thread) JBAS015951: Admin console listening on http://0.0.0.0:10000
      01:38:34,182 INFO [org.jboss.as] (Controller Boot Thread) JBAS015874: JBoss EAP 6.2.0.GA (AS 7.3.0.Final-redhat-14) started in 8244ms - Started 131 of 247 services (115 services are passive or on-demand)

    7. 확인
    8. 웹 콘솔에 접속
    9. 서비스 포트에 접속

여기 까지 했다면 


2014년 3월 12일 수요일

EAP6 Domain 구성으로 설치

  1. 용어정의 (이 문서를 볼때 참조)
    1. EAP : Enterprise Application Platform  라고 쓰고 제이보스 와스라고 한다.
    2. AP : EAP의 커뮤니티버젼 (지원 없음, 무료로 사용하는 버젼)
      1. Icon
        AP는 Version 7 까지 http://jboss.org로 진행되었으며
        2013년 11월 WildFly로 별도 분리됨 (http://wildfly.org/)
        2014년 WildFly 8 버젼을 발표로 본격적으로 EAP 와 AP는 분리되어 진행
    3. EWS : Enterprise Web Server 라고 쓰고 제이보스 웹서버 라고 한다. 내부적으로 Apache + HA가 제거된 tomcat 과 Proxy Module이 공식적으로 제공된다.
    4. Master = DomainController = Admin Server  : 도메인내의 slave들과 통신하면서 통합 관리함 (설치는 임의의 서버 한곳에 구성, 필요시 HA 구성 가능함)
    5. Slave = HostController : 서버 벌로 구성되며 상위 Master와 통신하며 하위 Server들을 관리한다. (Production의 경우 일반적으로 서버당 하나)
    6. server = Instance : 실제 WAS 서비스를 제공하는 Process
    7. proxy module : web Server에 인입된 사용자 요청을 WAS에 LoadBalance(LB) 하거나 WAS 장애시 Fail Over 하는 기능을 담당하는 모듈(mod_jk, mod_proxy, mod_cluster)을 통칭
       
  2. 설치준비
    1. EAP6 설치본 
      1. jboss ORG http://www.jboss.org/products/eap ) org에서도 EAP 버젼 다운로드 가능함, 로그인 필요
      2. Redhat https://access.redhat.com/site/downloads/  (파트너사 사이트)
    2. Domain, Std 용 스크립트 
    3. JDK 1.6 또는 1.7 (http://www.oracle.com/technetwork/java/index.html)

  1. 설치순서
    1. JDK 설치
      1. 알아서 잘....
    2.  EAP 압축해제 (/jboss/jboss-eap-6.2)
      #unzip jboss-eap-6.2.0.zip
    3. 2.3 Domain 폴더 복사 (DomainController와 HostContoller 껍대기 만들기)
      1. 도메인 정보를 구성할 폴더, 필요하면 협의해서 임의지정
        #mkdir /jboss/domains 
      2. 설치본에 있는 Template 폴더(/jboss/jboss-eap-6.2/domain)를 복사하여 필요한만큼 생성한다.
        #cp -R /jboss/jboss-eap-6.2/domain /jboss/domains/master (Domain Controller이므로 Domain중 1개만 구성한다. HA가능)
        #cp -R /jboss/jboss-eap-6.2/domain /jboss/domains/slave (HostController 는 서버당 1개씩 구성한다.)
        Icon
        master 또는 DomainController 라고 부르는 서버는
        같은 도메인내의 Slave(Host Controller)와 통신하며
        정책 및 배포 등을 중앙집중적으로 관리할 수 있도록 한다. (Weblogic의 AdminServer와 유사함)
        바이너리는 Master나 Slave나 차이가 없으나(설치본에서 domain 이라는 폴더를 복사하여 사용한다)
        폴더안에 host-master.xml 과 host-slave.xml중 어떤 config를 사용하느냐에 따라 동작이 결정된다.

        slave 또는 HostController 라고 부르는 서버는 
        물리서버(또는 가상화서버)당 1개를 구성하고 
        해당 Slave HostController에 설정파일에 구성정보를 추가함으로써
        하위에 Server(Weblogic의 Managed Server)를 구성하는 형태이다. 
        Weblogic은 Admin - Instance(Managed Server), 
        Jboss는 Master(DomainContoller) - Slave(HostController) - Instance(Server) 구조
        Instance 부분이 weblogic에서 Managed Server이다. ( Jboss는 hostController Process가 각각 서버에 하나씩 추가된다)
      3. 구동 정지및 모니터링을 위한 쉡 스크립트(rockplace 자체제작)를 복사하여 넣는다
        스크립트에 실행권한 추가
        #chmod +x /jboss/EAP6_Domain_Script/master/*
        #chmod +x /jboss/EAP6_Domain_Script/slave/*
      4. master 폴더의 스크립트 : domain Cotroller용으로 사전준비된 스크립트
        slave 폴더의 스크립트 : Managed Server용으로 사전준비된 스크립트
        stendalone 폴더의 스크립트 : Domain이 구성없이 단독 서버 구성용으로 사전준비된 스크립트

        #cp /jboss/EAP6_Domain_Script/master/* /jboss/domain/master
        #cp /jboss/EAP6_Domain_Script/slave/* /jboss/domains/slave

      5. 로그가 저장될 공간을 만들어준다. 폴더가 없으면 쌓이지 않는다. (스크립트 개선필요)
        cd /jboss/domains/master
        mkdir -p ./log/controllerlog
        mkdir -p ./log/gclog

    4. 2.4 Master(DomainController) 구성
      1. 2.4.1 Domain env.sh 수정 
        env.sh는 domain.xml 및 host-master.xml에 분산된 설정정보를 환경변수에 넣어주는 역할을 한다.
        여기저기 흩어진 config를 하나의 환경변수에서 수정함으로써 관리편의를 높이기 위해서이다.

        domain.xml에 정의 되어 있더라도 java -D 옵션으로 추가되는 env.sh의 정보가 우선순위가 높다.

        ex : setenv.sh HOST_NAME 은 host-master.xml 의 <host name="master" xmlns="urn:jboss:domain:1.5"> 에서 name attr에 대응된다.

        Jboss 기동시 환경변수를 지정하는곳이다. JDK 및 Master 또는 Slave Config 위치등을 지정한다.
        /jboss/domains/master/env.sh
        Icon
        [jboss@kwonHost master]$ cat env.sh
        #!/bin/sh
        DATE=`date +%Y%m%d%H%M%S`
        ##### JBOSS Directory Setup #####
        #JDK의 위치
        export JAVA_HOME=/jboss/java/jdk1.6.0_45#JBoss 설치본의 위치 (모듈 및 공통 Jar등의 위치참조시 이곳이 필요)
        export JBOSS_HOME=/jboss/jboss-eap-6.2#Domain 즉 Domain Controller나 HostController 등을 구성한 Home위치를 지정
        #설치 후에는 실제 이곳에서 기동 및 정지 작업을 수행한다.
        export DOMAIN_BASE=/jboss/domains#서버 Name을 지정한다. 이곳에 지정한 이름은 환경변수에 포함되며 하위 Config인 host-master.xml에 정의된 server name보다 우선한다.
        export SERVER_NAME=DomainController
        export DOMAIN_BASE_DIR=$DOMAIN_BASE/$SERVER_NAME
        #log파일의 위치를 지정한다.
        export LOG_HOME=$DOMAIN_BASE_DIR/log#Application Deploy 위치를 지정한다. 폴더 없으면 안뜬다.
        export DEPLOY= /jboss/deploy
        ##### Configration File ######Domain Controller의 경우 아래와 같이 domain.xml과 host-mater.xml을 참고하도록 한다.
        export DOMAIN_CONFIG_FILE=domain.xmlexport HOST_CONFIG_FILE= host-master.xml
        # 서버의 이름
        export HOST_NAME=master
        #노드의이름
        export NODE_NAME= $SERVER_NAME
        #jboss를 기동 정지 할 계정을 지정한다. 다른 계정으로 구동/정지 되지 않도록 체크한다.
        export JBOSS_USER= jboss
        ##### Bind Address #####
        #Listener의 바인드 IP를 지정한다 0.0.0.0 이면 모든 NIC IP에 매핑되어 서비스 된다.
        #간혹 OS특성이나 NIC구성차이로 접속이 되지않는 경우
        (NIC가 여러개 이고 OS 구성이 잘못되어 요청에 대합 답이 이상한 NIC로 돌아 나오는 경우가 있음)
        #서버의 특정 IP로만 서비스하고자 하는 경우 IP를 지정할 수 있다.
        export BIND_ADDR=0.0.0.0
        # Cluster구성시 JBoss가 다른 WAS를 찾아내거나 JMS 메시지 분산등을 위해사용하는 MiltiCast 주소대역정보
        # 멀티케스트는 224.0.1.0 ~ 238.255.255.255 까지 범위를 가진다.(TCP Specification)
        # 주의 : 서버에 여러 NIC가 있고 네트워크 구조상 망분리 형태라면 클러스터 구성시 문제가 될 수 있다.
        # 멀티케스트 처리는 보통 OS에 첫번째로 등록되는 NIC를 사용한다.
        # eth0는 web 스위치, eth1은 was 스위치 등 구분 될 경우 서버의 NIC 순서가 다를 경우 통신이 안될 수 있음
        #어떤놈은 WEB switch로 날리고 어떤놈은 WAS Switch로 멀티케스트할 경우 서로를 못찾을 수 있고
        #망분리의 목적이 트레픽을 분리하기 위한 것인데 클러스터 트레픽은 WAS 트레픽인데 WEB Switch를 타고 구성될 경우 관리상 복잡도가 상승할 수 있다.
        #멀티케스트 구성시에는 기본값이라고 그냥 버려두면 안되고 되도록 망관리자에게 어드바이스를 받거나 기본값 사용가능 여부를 확인 받아야 할 필요

        #WAS Clustering 시 사용할 멀티케스트 주소
        export MULTICAST_ADDR=230.1.0.1
        export MULTICAST_PORT= 55200
        #JMS 클러스터링용 멀티케스트 정보
        export JMS_MULTICAST_ADDR= 231.7.0.1#Apache mod_cluster 통신용 멀티케스트 주소
        #Apache mod_cluster.conf 설정시 같은 서비스끼리 잘 맞추어야 한다.
        #잘못하면 이상한 WAS로 서비스를 전달하여 오류발생가능
        export MODCLUSTER_MULTICAST_ADDR= 224.0.1.105
        #스스로도 DomainController(MASTER)에 접속할 수 있는 정보를 알아야 한다.
        #Domain 구성시에 MASTER를 담당하는 evn.sh 는 자신의 주소와 자신의 포트를 등록
        export DOMAIN_MASTER_ADDR= 127.0.0.1#CLI binding IP
        export DOMAIN_MASTER_PORT= 9999 #CLI binding port (브라우져로 접속하면 파일 다운로드 됨 지정 포트 9990에접속
        #Local HostController 바인드용 IP / 0.0.0.0 전체 IP에 바인딩 / 자기자신을 제어하는것이므로 궂이 IP를 박을 필요 없다는
        #127.0.0.1로 바인딩하면 slave들 뿐 아니라 자기자신도(domainIP를 지정한경우) 접속이 안될 수 있으므로 주의
        #DomainContoller는 역할일뿐 자기자신이 HostController역할을 수행한다. (바이너리는 동일하다 역할만 다를뿐)
        export MGMT_ADDR=0.0.0.0
        # Master(DomainController)설정에서는 DomainController이자 HostController이다.
        export HOST_CONTROLLER_PORT= 9999
        export LAUNCH_JBOSS_IN_BACKGROUND= true
        ##### JBoss System module and User module directory #####
        export JBOSS_MODULEPATH= $JBOSS_HOME/modules:$JBOSS_HOME/modules.ext
        # JVM Options : Server
        export JAVA_OPTS= "-server $JAVA_OPTS"
        # Domain Controller의 메모리 설정이다. 관리대상 서버가 늘어나면 모니터링후 조정 필요
        # JVM Options : Memory
        export JAVA_OPTS=" $JAVA_OPTS -Xms64m -Xmx128m -XX:MaxPermSize= 256m"
        export JAVA_OPTS=" $JAVA_OPTS -XX:+PrintGCTimeStamps "
        export JAVA_OPTS=" $JAVA_OPTS -XX:+PrintGCDetails "
        export JAVA_OPTS=" $JAVA_OPTS -Xloggc:log/gclog/gc_$DATE.log "
        export JAVA_OPTS=" $JAVA_OPTS -XX:+UseParallelGC "
        #export JAVA_OPTS=" $JAVA_OPTS -XX:+UseConcMarkSweepGC "
        export JAVA_OPTS=" $JAVA_OPTS -XX:+ExplicitGCInvokesConcurrent "
        export JAVA_OPTS= " $JAVA_OPTS -XX:-HeapDumpOnOutOfMemoryError "
        # Linux Large Page Setting
        #export JAVA_OPTS= " $JAVA_OPTS -XX:+UseLargePages "
        #export JAVA_OPTS=" $JAVA_OPTS -verbose:gc"
        export JAVA_OPTS=" $JAVA_OPTS -Djava.net.preferIPv4Stack=true"
        export JAVA_OPTS=" $JAVA_OPTS -Dorg.jboss.resolver.warning=true"
        export JAVA_OPTS=" $JAVA_OPTS -Dsun.rmi.dgc.client.gcInterval=3600000 "
        export JAVA_OPTS=" $JAVA_OPTS -Dsun.rmi.dgc.server.gcInterval=3600000"
        export JAVA_OPTS=" $JAVA_OPTS -Djboss.modules.system.pkgs=org.jboss.byteman"
        export JAVA_OPTS=" $JAVA_OPTS -Djava.awt.headless= true"
        export JAVA_OPTS=" $JAVA_OPTS -Djboss.domain.default.config=$DOMAIN_CONFIG_FILE"
        export JAVA_OPTS=" $JAVA_OPTS -Djboss.host.default.config=$HOST_CONFIG_FILE"
        export JAVA_OPTS=" $JAVA_OPTS -Djboss.domain.base.dir=$DOMAIN_BASE_DIR"
        export JAVA_OPTS=" $JAVA_OPTS -Djboss.domain.master.address=$DOMAIN_MASTER_ADDR"
        export JAVA_OPTS=" $JAVA_OPTS -Djboss.domain.master.port=$DOMAIN_MASTER_PORT"
        export JAVA_OPTS=" $JAVA_OPTS -Djboss.node.name=$NODE_NAME"
        export JAVA_OPTS=" $JAVA_OPTS -Djboss.bind.address.management=$MGMT_ADDR"
        export JAVA_OPTS=" $JAVA_OPTS -Djboss.bind.address=$BIND_ADDR"
        export JAVA_OPTS=" $JAVA_OPTS -Djboss.management.native.port=$HOST_CONTROLLER_PORT"
        #export JAVA_OPTS=" $JAVA_OPTS -Djava.nio.channels.spi.SelectorProvider=sun.nio.ch.KQueueSelectorProvider"
        export JAVA_OPTS=" $JAVA_OPTS -Djboss.default.multicast.address=$MULTICAST_ADDR"
        export JAVA_OPTS=" $JAVA_OPTS -Djboss.default.multicast.port=$MULTICAST_PORT"
        export JAVA_OPTS=" $JAVA_OPTS -Djboss.messaging.group.address=$JMS_MULTICAST_ADDR"
        export JAVA_OPTS=" $JAVA_OPTS -Djboss.modcluster.multicast.address=$MODCLUSTER_MULTICAST_ADDR"
        #export JAVA_OPTS=" $JAVA_OPTS -Djboss.default.jgroups.stack= tcp"< BR> # Use log4j in application
        export JAVA_OPTS=" $JAVA_OPTS -Dorg.jboss.as.logging.per-deployment=false "
        export JAVA_OPTS=" $JAVA_OPTS -Djboss.server.log.dir= $LOG_HOME/serverlog "
        # Deploy Directory Setting
        export JAVA_OPTS=" $JAVA_OPTS -Djboss.domain.deployment.dir= $DEPLOY "

        echo "================================================"
        echo "JBOSS_HOME=$JBOSS_HOME"
        echo "DOMAIN_BASE=$DOMAIN_BASE"
        echo "SERVER_NAME=$SERVER_NAME"
        echo "DOMAIN_CONFIG_FILE=$DOMAIN_CONFIG_FILE"
        echo "HOST_CONFIG_FILE=$HOST_CONFIG_FILE"
        echo "DOMAIN_CONTROLLER=$DOMAIN_MASTER_ADDR:$DOMAIN_MASTER_PORT"
        echo "================================================"<  


    5. 2.4.2 Admin 계정 생성 (Admin Console에 접속하기 전에 꼭 계정을 만들고 접속한다.)
      1. Console 접속용 Admin 계정을 생성한다. 복사해 넣은 관리 스크립트 중에서 add-user.sh를 사용하면된다.
        #add-user.sh [id] [password]

      2. !! Password가 너무 쉬운경우 생성안됨. 아래쪽 볼드체 부분이 출력되는지 꼭 확인할것


        Icon
        [jboss@kwonHost master]$ ./add-user.sh admin P@ssw0rd
        ================================================
        JBOSS_HOME=/jboss/jboss-eap-6.2
        DOMAIN_BASE=/jboss/domains
        SERVER_NAME=master
        DOMAIN_CONFIG_FILE=domain.xml
        HOST_CONFIG_FILE=host-master.xml
        DOMAIN_CONTROLLER=192.168.56.101:9999
        ================================================
        JAVA_OPTS: -server -Xms64m -Xmx128m -XX:MaxPermSize=256m -XX:+PrintGCTimeStamps -XX:+PrintGCDetails -Xloggc:log/gclog/gc_20140311155028.log -XX:+UseParallelGC -XX:+ExplicitGCInvokesConcurrent -XX:-HeapDumpOnOutOfMemoryError -Djava.net.preferIPv4Stack=true -Dorg.jboss.resolver.warning=true -Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=3600000 -Djboss.modules.system.pkgs=org.jboss.byteman -Djava.awt.headless=true -Djboss.domain.default.config=domain.xml -Djboss.host.default.config=host-master.xml -Djboss.domain.base.dir=/jboss/domains/master -Djboss.domain.master.address=192.168.56.101 -Djboss.domain.master.port=9999 -Djboss.node.name=master -Djboss.bind.address.management=0.0.0.0 -Djboss.bind.address=0.0.0.0 -Djboss.management.native.port=9999 -Djboss.default.multicast.address=230.1.0.1 -Djboss.default.multicast.port=55200 -Djboss.messaging.group.address=231.7.0.1 -Djboss.modcluster.multicast.address=224.0.1.105 -Dorg.jboss.as.logging.per-deployment=false -Djboss.server.log.dir=/jboss/domains/master/log/serverlog -Djboss.domain.deployment.dir=/jboss/deploy -Djboss.server.config.user.dir=/jboss/domains/master/configuration
        Updated user 'admin' to file '/jboss/domains/master/configuration/mgmt-users.properties'



    6. MASTER(Domain Controller) 구동 및 접속확인 
      1. /jboss/domains/master/start.sh 수행
        아래는 정상로그 출력
        Icon
        [jboss@kwonHost master]$ ./start.sh
        ================================================
        JBOSS_HOME=/jboss/jboss-eap-6.2
        DOMAIN_BASE=/jboss/domains
        SERVER_NAME=master
        DOMAIN_CONFIG_FILE=domain.xml
        HOST_CONFIG_FILE=host-master.xml
        DOMAIN_CONTROLLER=192.168.56.101:9999
        ================================================
        -server -Xms64m -Xmx128m -XX:MaxPermSize=256m -XX:+PrintGCTimeStamps -XX:+PrintGCDetails -Xloggc:log/gclog/gc_20140311155748.log -XX:+UseParallelGC -XX:+ExplicitGCIn vokesConcurrent -XX:-HeapDumpOnOutOfMemoryError -Djava.net.preferIPv4Stack=true -Dorg.jboss.resolver.warning=true -Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.d gc.server.gcInterval=3600000 -Djboss.modules.system.pkgs=org.jboss.byteman -Djava.awt.headless=true -Djboss.domain.default.config=domain.xml -Djboss.host.default.con fig=host-master.xml -Djboss.domain.base.dir=/jboss/domains/master -Djboss.domain.master.address=192.168.56.101 -Djboss.domain.master.port=9999 -Djboss.node.name=mast er -Djboss.bind.address.management=0.0.0.0 -Djboss.bind.address=0.0.0.0 -Djboss.management.native.port=9999 -Djboss.default.multicast.address=230.1.0.1 -Djboss.defau lt.multicast.port=55200 -Djboss.messaging.group.address=231.7.0.1 -Djboss.modcluster.multicast.address=224.0.1.105 -Dorg.jboss.as.logging.per-deployment=false -Djbos s.server.log.dir=/jboss/domains/master/log/serverlog -Djboss.domain.deployment.dir=/jboss/deploy
        mkdir: `nohup' 디렉토리를 만들 수 없습니다: 파일이 있습니다
        mv: cannot move `master.out' to `./log/nohup/master.out.20140311155748': 그런 파일이나 디렉터리가 없습니다
        nohup: redirecting stderr to stdout
        JBOSS_HOME: /jboss/jboss-eap-6.2
        JAVA: /jboss/jdk/bin/java
        JAVA_OPTS: -server -Xms64m -Xmx128m -XX:MaxPermSize=256m -XX:+PrintGCTimeStamps -XX:+PrintGCDetails -Xloggc:log/gclog/gc_2014031115 5748.log -XX:+UseParallelGC -XX:+ExplicitGCInvokesConcurrent -XX:-HeapDumpOnOutOfMemoryError -Djava.net.preferIPv4Stack=true -Dorg.jboss.resolver.warning=true -D sun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=3600000 -Djboss.modules.system.pkgs=org.jboss.byteman -Djava.awt.headless=true -Djboss.domain. default.config=domain.xml -Djboss.host.default.config=host-master.xml -Djboss.domain.base.dir=/jboss/domains/master -Djboss.domain.master.address=192.168.56.101 -Djb oss.domain.master.port=9999 -Djboss.node.name=master -Djboss.bind.address.management=0.0.0.0 -Djboss.bind.address=0.0.0.0 -Djboss.management.native.port=9999 -Djboss .default.multicast.address=230.1.0.1 -Djboss.default.multicast.port=55200 -Djboss.messaging.group.address=231.7.0.1 -Djboss.modcluster.multicast.address=224.0.1.105 -Dorg.jboss.as.logging.per-deployment=false -Djboss.server.log.dir=/jboss/domains/master/log/serverlog -Djboss.domain.deployment.dir= /jboss/deploy
        =========================================================================
        15:57:49,328 INFO [org.jboss.modules] (main) JBoss Modules version 1.3.0.Final-redhat-2
        15:57:49,546 INFO [org.jboss.as.process.Host Controller.status] (main) JBAS012017: Starting process 'Host Controller'[Host Controller] 15:57:50,376 INFO [org.jboss.modules] (main) JBoss Modules version 1.3.0.Final-redhat-2
        [Host Controller] 15:57:50,517 INFO [org.jboss.msc] (main) JBoss MSC version 1.0.4.GA-redhat-1
        [Host Controller] 15:57:50,645 INFO [org.jboss.as] (MSC service thread 1-1) JBAS015899: JBoss EAP 6.2.0.GA (AS 7.3.0.Final-redhat-14) starting
        [Host Controller] 15:57:51,745 INFO [org.xnio] (MSC service thread 1-2) XNIO Version 3.0.7.GA-redhat-1
        [Host Controller] 15:57:51,767 INFO [org.xnio.nio] (MSC service thread 1-2) XNIO NIO Implementation Version 3.0.7.GA-redhat-1
        [Host Controller] 15:57:51,791 INFO [org.jboss.as] (Controller Boot Thread) JBAS010902: Creating http management service using network interface (management) port ( 9990) securePort (-1)
        [Host Controller] 15:57:51,825 INFO [org.jboss.remoting] (MSC service thread 1-2) JBoss Remoting version 3.2.18.GA-redhat-1
        [Host Controller] 15:57:51,973 INFO [org.jboss.as.remoting] (MSC service thread 1-2) JBAS017100: Listening on 0.0.0.0:9999[Host Controller] 15:57:54,411 INFO [org.jboss.as] (Controller Boot Thread) JBAS015961: Http management interface listening on http://0.0.0.0:9990/management
        [Host Controller] 15:57:54,413 INFO [org.jboss.as] (Controller Boot Thread) JBAS015951: Admin console listening on http://0.0.0.0:9990
        [Host Controller] 15:57:54,414 INFO [org.jboss.as] (Controller Boot Thread) JBAS015874: JBoss EAP 6.2.0.GA (AS 7.3.0.Final-redhat-14) (Host Controller) started in 4 797ms - Started 12 of 12 services (0 services are passive or on-demand)
      2. 접속확인
        http://192.168.56.101:9990/ (아래 로그인 창 안나오고 welcom 화면 나오면 계정이 없는것이므로 계정을 추가한다.)
      3. 정상 로그인 화면

    7. 2.5 Slave 설정
      1. 2.5.1 slave env.sh 수정 
        /jboss/domains/slave/env.sh
      2. DomainController(Master)의 env.sh와 거의 유사하나 조금다르다 볼드 부분주의
        Icon
        [jboss@kwonHost slave]$ cat env.sh
        #!/bin/sh
        DATE=`date +%Y%m%d%H%M%S`
        ##### JBOSS Directory Setup #####
        export JAVA_HOME=/jboss/java/jdk1.6.0_45
        export JBOSS_HOME=/jboss/jboss-eap-6.2
        export DOMAIN_BASE=/jboss/domains
        #아래 이름은 domain path정보와 연결된다. /jboss/domains/slave1 으로 구성해야함
        export SERVER_NAME=slave1 
        export DOMAIN_BASE_DIR=$DOMAIN_BASE/$SERVER_NAME
        ##### Configration File #####
        export HOST_CONFIG_FILE=host-slave.xml
        export HOST_NAME=slave1
        export NODE_NAME=$SERVER_NAME
        export JBOSS_USER=jboss
        ##### Bind Address #####
        export BIND_ADDR=0.0.0.0
        export MULTICAST_ADDR=230.1.0.1
        export JMS_MULTICAST_ADDR=231.7.0.1
        export MODCLUSTER_MULTICAST_ADDR=224.0.1.105
        #Domain Controller(Production이라면 원격)의 IP와 포트를 적어준다.
        export DOMAIN_MASTER_ADDR=192.168.56.101 #${jboss.domain.master.address}
        export DOMAIN_MASTER_PORT=9999 #${jboss.domain.master.port:9999}
        #Slave 역할인 HostController 자기자신에 접근하기위한 IP를 등록한다. 이건 사실 무엇때문에 속성을 관리하는지 모를일....
        #0.0.0.0 은 모든 소켓에 바인딩 되므로 서버에 할당된 모든 IP로 CLI 수행가능
        #x.x.x.x 특정 IP할당시 해당 IP로 접근하여 CLI 접속가능
        #127.0.0.1 은 Local 바인딩이므로 자기 서버에서만 CLI 수행 가능
        #remote에서 CLI를 수행해야 한다면 0.0.0.0 이나 IP를 지정해야한다.
        export MGMT_ADDR=127.0.0.1 #Local CLIIP# slave로 동작하는 서버 자기자신도 HostController를 가지고 있으므로 해당 포트를 넣어준다.
        export HOST_CONTROLLER_PORT= 19999 #Local CLI PORT
        export LAUNCH_JBOSS_IN_BACKGROUND=true
        ##### JBoss System module and User module directory #####
        export JBOSS_MODULEPATH=$JBOSS_HOME/modules:$JBOSS_HOME/modules.ext
        # JVM Options : Server
        export JAVA_OPTS="-server $JAVA_OPTS"
        # JVM Options : Memory
        export JAVA_OPTS=" $JAVA_OPTS -Xms64m -Xmx128m -XX:MaxPermSize=256m -Xss256k"
        export JAVA_OPTS=" $JAVA_OPTS -XX:+PrintGCTimeStamps "
        export JAVA_OPTS=" $JAVA_OPTS -XX:+PrintGCDetails "
        export JAVA_OPTS=" $JAVA_OPTS -Xloggc:log/gclog/gc_$DATE.log "
        export JAVA_OPTS=" $JAVA_OPTS -XX:+UseParallelGC "
        #export JAVA_OPTS=" $JAVA_OPTS -XX:+UseConcMarkSweepGC "
        export JAVA_OPTS=" $JAVA_OPTS -XX:+ExplicitGCInvokesConcurrent "
        export JAVA_OPTS=" $JAVA_OPTS -XX:-HeapDumpOnOutOfMemoryError "
        # Linux Large Page Setting
        #export JAVA_OPTS=" $JAVA_OPTS -XX:+UseLargePages "
        #export JAVA_OPTS=" $JAVA_OPTS -verbose:gc"
        export JAVA_OPTS=" $JAVA_OPTS -Djava.net.preferIPv4Stack=true"
        export JAVA_OPTS=" $JAVA_OPTS -Dorg.jboss.resolver.warning=true"
        export JAVA_OPTS=" $JAVA_OPTS -Dsun.rmi.dgc.client.gcInterval=3600000 "
        export JAVA_OPTS=" $JAVA_OPTS -Dsun.rmi.dgc.server.gcInterval=3600000"
        export JAVA_OPTS=" $JAVA_OPTS -Djboss.modules.system.pkgs=org.jboss.byteman"
        export JAVA_OPTS=" $JAVA_OPTS -Djava.awt.headless=true"
        export JAVA_OPTS=" $JAVA_OPTS -Djboss.domain.default.config=$DOMAIN_CONFIG_FILE"
        export JAVA_OPTS=" $JAVA_OPTS -Djboss.host.default.config=$HOST_CONFIG_FILE"
        export JAVA_OPTS=" $JAVA_OPTS -Djboss.domain.base.dir=$DOMAIN_BASE_DIR"
        export JAVA_OPTS=" $JAVA_OPTS -Djboss.domain.master.address=$DOMAIN_MASTER_ADDR"
        export JAVA_OPTS=" $JAVA_OPTS -Djboss.domain.master.port=$DOMAIN_MASTER_PORT"
        export JAVA_OPTS=" $JAVA_OPTS -Djboss.node.name=$NODE_NAME"
        export JAVA_OPTS=" $JAVA_OPTS -Djboss.bind.address.management=$MGMT_ADDR"
        export JAVA_OPTS=" $JAVA_OPTS -Djboss.bind.address=$BIND_ADDR"
        export JAVA_OPTS=" $JAVA_OPTS -Djboss.management.native.port=$HOST_CONTROLLER_PORT"
        #export JAVA_OPTS=" $JAVA_OPTS -Djava.nio.channels.spi.SelectorProvider=sun.nio.ch.KQueueSelectorProvider"
        export JAVA_OPTS=" $JAVA_OPTS -Djboss.default.multicast.address=$MULTICAST_ADDR"
        export JAVA_OPTS=" $JAVA_OPTS -Djboss.messaging.group.address=$JMS_MULTICAST_ADDR"
        #export JAVA_OPTS=" $JAVA_OPTS -Djboss.modcluster.multicast.address=$MODCLUSTER_MULTICAST_ADDR"
        #export JAVA_OPTS=" $JAVA_OPTS -Djboss.default.jgroups.stack=tcp"
        # Use log4j in application
        export JAVA_OPTS=" $JAVA_OPTS -Dorg.jboss.as.logging.per-deployment=false "

        echo "================================================"
        echo "JBOSS_HOME=$JBOSS_HOME"
        echo "DOMAIN_BASE=$DOMAIN_BASE"
        echo "SERVER_NAME=$SERVER_NAME"
        echo "DOMAIN_CONFIG_FILE=$DOMAIN_CONFIG_FILE"
        echo "HOST_CONFIG_FILE=$HOST_CONFIG_FILE"
        echo "DOMAIN_CONTROLLER=$DOMAIN_MASTER_ADDR:$DOMAIN_MASTER_PORT"
        echo "================================================"
다 되었음
띄우고 Admin Console에서 서버들의 정보가 정상적으로 올라오는지 확인
아래 보면 
Master(Domain Controller)
kwonhost(Host Controller)  : 구성시 jboss.host.name 속성 (domains/master/configuration/host-master.xml 의 host Element) 이 없으면 OS $HOSTNAME을 들고 올라온다. 필요시 지정(스크립트에서 지정하도록 변경 예정임)
server-one(Instance) : 초기 제공되는 Config 파일에 sample로 등록되어 있는 Instance 삭제해도 무방하다
server-two(Instance) : 초기 제공되는 Config 파일에 sample로 등록되어 있는 Instance 삭제해도 무방하다
가 구성된 것을 확인할 수 있다.

끝.  

2014년 3월 5일 수요일

JBoss 그사이 많이 컸내....




JBOSS (Enterprise Java Bean Open Source Software)

1999년 Marc Fleury가 OSS로 프로젝트 시작
2001년 JBoss Group LLC법인설립
2002년 JBoss 2.4버젼이 Java world 잡지에서 Best AS상을 수상하면서 유명해짐
2004년 JBoss Inc로 사명변경
2006년 RedHat JBoss Inc인수
2007년 RedHat에서 기업용품질유지를 위한 JBoss Enterprise Application Server(EAP) 서비스
2014년 커뮤니티 버젼은 WildFly라고 해서 분리함, EAP는 향후 JBoss로 통일

커뮤니티버젼(공짜,지원없음,쓰는건 니 맘대로, 문제는 너님이해결)은 AS
엔터프라이즈버젼 EAP(배포는 무료, 서비스 받으려면 1년단위 라이선스 subscription 가입) 로 불리기 시작

EAP는 AS보다는 버져닝이 느리다(테스트및 안정화를 거친 버젼이 EAP로 제공된다)
예를들어 AS 7버젼은 테스트를 거친 후 EAP 6으로 발표된다.
wildFly로 분리 되므로 앞으로는 이 관계가 더 느슨해질듯


버젼의 종류
3.x, 4.x
JMX based kernel providing loose coupling of services and standardised management interfaces.
5.x,6.x
JBoss Microcontainer based kernel providing POJO injection between services for fine-grained dependencies and tighter integration. Management interfaces exposed by services.
7.x
JBoss Modular Service Container based kernel providing auto-wiring of services based on dependency definitions. Domain model management interface to hide service implementation details and allow easier configuration of clusters.
Our willingness and ability to periodically redesign the kernel around the latest concepts and techniques allows us to provide a modern, lightweight application server that gives the benefits of integrated services without sacrificing simplicity, testability and performance. Coupled with an operations friendly approach to management JBoss AS gives you everything you need to build, deploy and manage Java EE applications in a flash.

버젼의 상세
JBoss AS 4.0 J2EE 1.4 기반, Apache Tomcat 5.5 servlet container.
JBoss AS 4.2 J2EE 1.4 기반, Apache Tomcat 5.5 servlet container.
but deploys Enterprise JavaBeans 3.0 by default.
It requires the Java Development Kit version 5

JBoss AS 5.1, 2009년, Java EE 5(2006년5월)기반 + EE6 일부
It is a minor update of the major release JBoss AS 5.0,
which was in development for at least three years
and was built on top of a new JBoss microcontainer.[6]
JBoss AS 5.1 contains a preview of some elements from the Java EE 6 specification.[7]

JBoss AS 6.0, 2010년 12월28일, Java EE 6(2009년12월)기반,
not support the full Java EE 6 stack,
it chose not to support this officially
by obtaining an official certification from Oracle.
It does, however, officially support the Java EE 6 Web Profile.

JBoss AS 7, 2011년 7월 12일, Java EE 6기반,
6개월만에 메이저업데이트
기존메이져는 JVM Spec 변경에 버젼이 따르는 경향이 있었으나 이 버젼은 좀 달랐다
여전히 J2EE 6기반이였고 메이져 업데이트가 된 이유는 다른많은 부분이 변경되면서 이다.
예를들어 JMS를 위한 MDB가  포함 되었고
(JMS Spec전체를 지원한 것은 아니지만 어쨌든 web spec에 인증되었다)
6.0버젼보다 반정도의 작은 용량을 가지게 되었고
구동시간도 10배 개선되었다. (증말????)

JBoss AS 7.1, 2012년 2월 Java EE 6 전체스펙을 구현하였고 인증되었다.

WildFly 8 2013년 5월 알파버젼, 2014년 2월(Final Stable Release), J2EE 7(13년Q2) 기반,
JBoss AS 프로젝트의 이름이 바뀐것이다.
2012년 작명 컨테스트를 통하여 준비를 한듯
(http://www.redhat.com/about/news/press-archive/2013/4/red-hat-reveals-plans-for-its-next-generation-java-application-server-project?utm_source=feedly)
공식적인 성명은 .... 개드립같고
레드헷 정책상 Open Source는 WildFly로 분리하여
Enterprise 버젼(EAP)에 대한 가치상승을 노린것 같다.
JBoss.org 가 있는데 WildFly.org로 옮겨간다
내부적으로 repository의 was 소스코드는 동일(2013년기준)
wildfly에서는 내부적으로 pkg위치를 refactoring 하는등 분리를위한 노력중인듯
하지만 pkg변경등으로 인하여 기존 JBoss의 업그레이드시 문제 발생위험에  노출


JBOSS Project
Enterprise Application Platform(EAP) - enhances JBoss Application Server to provide a complete solution for Java applications.
기업용 JBoss...돈주고 사는거

Enterprise Web Platform(EW) - a lightweight platform for building light and rich Java applications
EAP의 서브셋으로 구성되어 있고 개발컴포넌트(하이버네이트같은)들이 포함 되어 있음
EJB Profile은 제거 되어 있음

Enterprise Web Server(EWS) - a single solution for large scale websites and simple web applications.
(Apache+Tomcat으로 서블릿만 운영하는 중소규모 사이트용 like Sun Web Server
tomcat은 클러스터를 제거하여 제공된다.)
https://access.redhat.com/site/articles/111723

정리 :
EAP는 Full 버젼, 돈되는고객,
EW은 EJB불필요 + EAP 보다는 작으나 물리적 3Tier구성을 요구하는 중형, (거의 비지니스 없는듯)
EWS는 EJB불필요 + 로지컬 3Tier이나 WAS별도 구성보다는 대규모 단순트레픽 대응 용

Enterprise Communications Platform - a development platform for the telecommunications industry.
https://access.redhat.com/site/documentation/en-US/JBoss_Communications_Platform/
The JBoss Communications Platform (JBCP) is an open source VoIP platform certified
for JAIN SLEE 1.1 and SIP Servlets 1.1 compliance.
뭐임....VOIP 서버도 있음????

Enterprise Portal Platform - to build and deploy portals for SOA user interaction and personalized presentation.
말그대로 표준을 따라서 만드는 포탈...
우리나라 사람들은 맘대로 만드는거 좋아하니...표준따라 만든 생산성있는 포탈보다
안 예쁘면 쓰레기 취급이므로 기업기간시스템 아니면 적용하기 어렵고
웬만큼 큰 기업 아니면 단독으로 사업하기란 안되는게 맞을것 같음

SOA Platform - integrates applications and orchestrates services to automate business processes in a service-oriented architecture.
ESB, jBPM, Drools,EAP, MQ, 등등...
기업내부 데이터통합을 위한 모든 단위 솔루션을 뭉뜽그려놓은 제품
아래것들은 엔진수준으로 이해함

Business Rules Management System (BRMS) - enables business policy and rules development, access, and change management.
BPM등에서 이벤트 발생시 이벤트를 미리정의된 정책을 기반으로 처리하기위해 별도 고안됨
BRMS(Bisiness rule management system) 정책기반관리시스템
BRE(Business Rule Engine) 정책관리를 위해 사용되는 엔진
룰엔진 : RHEL Drools

Data Services - a management system to work with data across diverse systems
옛날에 DB Middleware와 유사한..다양한 레거시DB와 연결하여 표준화된 스키마제공이 목적

JBoss Hibernate - industry-leading[citation needed] O/R mapping and persistence
개발 프레임워크, 좋다고 말은 많지만 쓰는곳 한번도 못본...
우리는 스프링+iBatis+Dbcache에 편중된 환경이라....
이미 사용중인 프레임워크변경은 문화를 바꾸는수준으로 보아야할듯...

JBoss Seam - for simplifying web 2.0 application development
JBoss Web Framework Kit - for building light and rich Java applications
JBoss RichFaces - adding Ajax capabilities to the JavaServer Faces web application framework.
제품이라고 하기에는...
프로그레밍모델, 울나라 개발자들 스프링에 종신계약했듯이 이거쓰면 RHEL하고

JBoss Operations Network - a customizable management-platform for JBoss deployments
JBoss가 설치된 팜에서 WAS를 모니터링하기 위한 솔루션, 배포나 스넵샷등은 긍정적이나 모니터링성능은 고려필요
국산 EMS업체나 제니퍼와같이 전문 APM과는 비교어렵다.

JBoss Developer Studio - offers developers an environment for building rich web applications, transactional enterprise applications, and SOA-based integration applications.
이클립스기반 IDE...돈주고 사는사람은 없을듯



JBoss Fuse Service Works 6
ESB와 프레임워크통합 솔루션, 메시징 기반 데이터 교환의 확장형태

Red Hat JBoss Data Virtualization 6

Red Hat JBoss Data Grid 6.2
VM가상화, 세션및 데이터케싱등...오라클 FusionMiddleware 코헤런스 제품과 유사