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 코헤런스 제품과 유사

2014년 2월 28일 금요일

Blogspot에 Facebook연동하여 덧글쓰게 하는방법

아래 사이트 참조

http://baksimgorkii.blogspot.kr/2012/01/blog-post.html

내 facebook 개발자정보

개발자 계정 생성후 app을 만들고나서 설정에 들어가서 App Domin을 넣고

아래쪽에 플랫폼추가를 눌러 꼭 사이트 정보를 등록해야 함 안그러면 App Domin에 오류가 뜨고 저장안됨  (플랫폼 정보를 참고하여 정보를 확인하는듯)

폭 사이즈는 내 블로그는 650으로 하면 대충 맞다.

모바일은 템플릿 수정이 불가능...웹 텝플릿을 자동생성 하는 방식이라 수정하는 곳이 없음.... (찾아봐야겠음)


주의사항

- Code 삽입시  br테그 삽입 주의

- Value 입력시  " 으로 들어가면 블로그스팟 코드에디터가 뽀개 먹는경우가 있으므로 ' 으로 변경하여 삽입

2014년 2월 24일 월요일

그날 보았던 꽃의 이름을 우리는 아직 모른다.

그날 보았던 꽃의 이름을 우리는 아직 모른다.
(아노하나)

あの日見た花の名前を僕達はまだ知らない。Anohana: The Flower We Saw That Day





음악 : Secret base  / TV 엔딩곡

오랜만에 소녀감성 돋는 재페니메이션

이렇게 보니 작가의 성장에 대한 통찰력이 대단한듯

쓸데없이 말랑 거리지도 않고

다섯명의 아이들을 통해 거칠지만 섬세하고

시크한척 하지만 여린 감성의 자라남을 잘 표현한것 같다.

이번에 극장판도 나왔다고 하니...

무라카미하루키의 『색채가 없는 다자키 쓰쿠루와 그가 순례를 떠난 해』를 읽은사람이라면 전체적인 컨셉이 많이 유사하다는 느낌을 받을것이다. (성장이란 뭔가 틀이 짜여진것일까?)

색채가 없는 다자키가 자신의 색을 찾기위한 여정이라면

아노하나의 진땅(주인공소년)은

자신이 스트레스와 트라우마라고 부르는(쿨하게 인정하는 이부분에서 마음에 들었다) 멘마의 소원-그들의 소원- 을 이루기 위한 여정을 보여준다.

이런 감성적인 내용의 책이나 만화를 볼때면 분석하거나 유아적취미라고 폄하하지 말고 그냥 보고 즐거우면 좋은거고 아니면 나랑 취향이 다른것이니 그냥 안보면 된다는.

가와이~ O.O



엔딩음악

음악 : Secret base  (10 years after Version)
 

2014년 2월 10일 월요일

문전박대


집에 앉아서 책읽고 인터넷하고....  엉덩이가 점점 무거워지는 기분

몇일전에 뒷산 다녀오고 어딜 가볼까 고민은 하고 있는데 아직 어쩔지 모르겠는상황

간만에 좀 걸어볼까해서 아침에 가방에 물한병 챙겨들고 집을 나섰다.

안양천을따라 걸어가길 두시간... 7Km를 걸어왔다.

출발할때 흩날리던 눈은 점점더해지더니 펑펑~! 쏟아진다는!!

기분 괜찮은거슬?

시흥역을 지난정도 였던것 같은데.... 점심때도 되었고 해서 안양천을 벗어나 

근처 순대국집을 들렀다. 두시간동안 강바람을 맞았더니 몸이 추웠나 보다 

따뜻한곳에 들어오니 손이 오글오글 하는구나..

따뜻한 밥을 먹고 돌아나오는길 걸어왔던 강변 건너편으로 집으로 걸어갈 요량으로 

건널목을 건너다 벽에 붙어 있는 투박한 걸림막을 보았다.

"재개발건으로 분쟁이 있는것일까?"

길건너 강변으로 내려가려다 말고 높지 않은 담을 넘어 안들 들여다 보았다.

아.... 옛날 돈암동에 살때 재개발 하기전 이런 집들이 모여 있던 동내가 있었는데...

낮은 지붕과 얼기설기 엮어만든... 재대로 지어진 집이라고 하기에는 좀 그런....

집들이 그렇게 많지는 않았다. 작은 공간에 푹 꺼진 집들이 담너머에 있었다.

출퇴근 하거나 놀러다녀올때 차로 많이 지나다니던 곳이였는데 이런 동내가 있는줄 걸어와서 처음 보았다.

강변이 아니라 작은 동내로 들어서는 골목길로 내려가 보았다.

입구에는 영업을 하는 집인가 싶을 정도로 허름하기는 하지만 

누군가 와서 그림을 그려주었는지 예쁘장하게 그림도 그려놓았다. 

마을 입구에 "어서 오세요" 라는 하트는 건물들이 허름하기는 하지만 나름 호감을 품고 있었다.


밖에서는 잘 안보이는데 몇미터 걸음만으로 이렇게 생각하지 못했던 풍경이 보여진다.


오랜만에 보는 집...

어렸을때 친구의 집이 그리 좋지 않았다.

친구는 집에 놀러 가자는 말에 한사코 손사래를 치곤했는데

어느날인가 친구가 가자는 말에 집에 들렀다가 살짝 놀라기는 했었다.

시맨트벽돌로 대충 올려놓은 낮은집....담은 오래되어 나무색이 모두 바랜 잿빗의 나무조각들이 엮어져 길과 집을 구분했었더랬다.

친구의 아빠는 택시기사로 일을 했고 우리가 갔을때 주무시고 계셔서 집 안에는 들어가다가 한소리 듣고 밖으로 나와야 했던

어릴적 기억이라 잘 모르겠지만 친구가 미안해 했던 기억이 남아있다.

나름 용기내서 불러 줬을 것인데...아빠가 야근근무였던지... 집에도 들어가지 못하고 문전박대를 당했으니 나보다 그 친구가 더 무안했을 것이다.


그 친구와 집 앞에서 뭔가를 하고 한참을 잘 놀았었는데...

이름도 기억나지 않는 그 친구는 지금 어떻게 살고 있으려는지


소하1동 이주민대책위원.... 뭐...라는 깃발이 나부낀다.

터전을 잡고 가족과 함께 살아가야 할 사람들이 이런저런 이유로 삶의 기반이 위협 받았을때의 모습은 애잔함에 미안함도 같이한다.


골목을 돌아 들어간길


갑자기 뒤에서 누군가 소리를 친다

뒤를 돌아 서둘러 이어폰을 빼니 인상을 잔뜩 찌푸린 아저씨 한명이

"뭐해요? 여기는 아무나 들어오는데 아니니까 빨리나가요!"

순간 당황스러운....  사람다니는 길이고 출입금지가 되어 있는것도 아닌...

사람사는 동내에 들어왔다고 이렇게 홀대를 받아야 하는것인지

순간 울컥하면서 또 순간 다른 기분도 들어 아무말 하지 않고

쓴웃음을 지으며 동내를 돌아 나왔다.



그네들의 삶에 노크도 없이 들어선 내가 낮설고 예의없는 길손이였겠지...

난 그냥 사람사는 동내라고 생각하고 옛날생각을 했을 뿐이지만

그 아저씨에게는 그런 문제가 아니였겠지...

이해 하려고 하면서도 돌아나오는길 뒷통수에 들리던 욕지꺼리가 돌아오는 내내 기분을 울적하게 한다.

비교적 먹고 살만한 놈이 알량한 자신의 추억으로 남의 영역에 침범한 나쁜놈인것일까...

사는게 힘들어 피해의식때문에 다른사람들을 받아들일줄 모르는 사람좁음이였을까...



사는데는 그저 눈감고 자기 할일이나 하고 살면 된다는 그런 호시절을 살고 있는 나다.



하루가 지난 오늘...

15Km 정도 걸었을뿐인데...

싸구려 조깅화 덕분에 발바닥에 물집이 잡혀 아침에 바늘에 실을끼워 바느질(?)을 하던중 생각이 나서 글을 써본다.

싸구려 동정일 지 모르겠지만 그래도 살아갈 준비가 될 수 있기를 바래본다.