블로그 이미지
올해목표 // 10월 어학연수 떠나자~ 자수씨

카테고리

전체글 (1457)
Brand New! (28)
주절주절 (213)
MOT (11)
해외쇼핑 (49)
쇼핑노트 (150)
취미생활 (94)
iPhone (4)
Eclipse (121)
Google (83)
Spring (31)
JAVA (176)
JavaScript (59)
WEB (49)
HTML (2)
CSS (4)
Web Browser (6)
JBossAS (27)
Weblogic (1)
GlassFish (2)
Database (20)
OS (26)
Tools (8)
Tips (26)
IT정보 (1)
Book (21)
Programming (37)
외부행사 (43)
주변인들 (17)
여행노트 (60)
학교생활 (30)
회사생활 (52)
사회생활 (5)
외국어공부 (12)
잡동사니 (30)
Total
Today
Yesterday
 
05-09 20:27
 

달력

« » 2024.5
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
 

최근에 올라온 글

최근에 달린 댓글


[root@qa bin]# ./run.sh -b 0.0.0.0
: command not found
: command not found
: command not found
: command not found
: command not found
: command not found
: command not found
-bash: run.conf: line 52: syntax error: unexpected end of file


컹;;; JBoss 설치판을 만들면서 run.conf 를 원하는 값으로 변경하려고 하는데 위와 같은 오류가 발생합니다.

열심히 캐 삽질한 결과 원인을 발견했습니다.

UNIX/LINUX 의 쉘 스크립트에서는 개행 시에 Carriage return (OD) + Linefeed (OA) 가 있을 경우 위와 같이 정상적으로 읽어들이지 못하는 문제가 있습니다.

변환하는 프로그램에서 뉴 라인을 CR + LF 조합으로 쓰다보니 문제가 발생하는 것이였습니다.


String line = null;
while ((line = reader.readLine()) != null ) {
    fileContents.append(line).append("\r\n");
}
>>
String line = null;
while ((line = reader.readLine()) != null ) {

    fileContents.append(line).append("\n");
}


프로그램을 수정하는 것으로 문제는 해결될... 것으로 생각됩니다.

JBoss 를 다루다가 발생한 문제라 카테고리는 JBoss 쪽으로 ㅎㅎㅎ

Posted by 자수씨
, |

15:50:25,406 ERROR [AbstractKernelController] Error installing to Start: name=jboss.remoting:protocol=rmi,service=JMXConnectorServer state=Create mode=Manual requiredState=Installed
java.net.MalformedURLException: Bad URL path: _oracle/jndi/rmi://ccu_oracle:1090/jmxconnector
        at javax.management.remote.JMXServiceURL.validate(JMXServiceURL.java:365)
        at javax.management.remote.JMXServiceURL.<init>(JMXServiceURL.java:225)


왠일인지 로컬 테스트용 JBoss 가 안 뜹니다... 오라클만 시키는대로 설치했을 뿐인데...

원인은 컴퓨터 이름에 언더바가 들어가면 어떠한 버그로 인해 처리가 안되는 것 이였습니다. (위에 보시면 컴퓨터 이름이 ccu_oracle 인데, Bad URL Path: _oracle 이라고 나옵니다. 언더바로 split 하는 로직이 있나봅니다.)

/etc/sysconfig/network 에서 HOSTNAME 을 언더바가 없는 이름으로 설정합니다.

그 후에는 재부팅합니다.


Posted by 자수씨
, |

$JBOSS_HOME/bin/jbossctl.sh
#!/bin/sh
#
# JBoss Controller
# created by vicki
#
ARGV="$@"
JBOSS_RUN="./run.sh"
JBOSS_SHUTDOWN="./shutdown.sh"

case $ARGV in
start)
    $JBOSS_RUN -b 0.0.0.0 &
    ERROR=$?
    ;;
stop)
    $JBOSS_SHUTDOWN -s 0.0.0.0 -S
    ERROR=$?
    ;;
kill)
    ps -ef | grep "bin/run.jar org.jboss.Main" | grep -v grep | awk '{ printf("ProcessID %s Terminated.\n", $2); }'
    ps -ef | grep "bin/run.jar org.jboss.Main" | grep -v grep | awk '{ printf("kill -9 %s\n", $2); }' > tmp.$$
    sh tmp.$$
    rm -f tmp.$$
    ;;
*)
    echo "Invalid parameter [$ARGV]"
    echo "Usage) jbossctl.sh [start|stop|kill]"
    ;;
esac

exit $ERROR


사용법은 간단합니다.

시작: $JBOSS_HOME/bin/jbossctl.sh start
종료: $JBOSS_HOME/bin/jbossctl.sh stop
프로세스 종료: $JBOSS_HOME/bin/jbossctl.sh kill

정상적으로 jboss 가 시작되지 않았을 경우 stop 으로는 되지 않기 때문에 kill 을 통해 프로세스를 종료시킬 수 있도록 만들어보았습니다.

Posted by 자수씨
, |

$JBOSS_HOME/server/default/conf/props/jmx-console-users.properties 파일을 수정합니다.

# A sample users.properties file for use with the UsersRolesLoginModule
admin=새로운패스워드


JBossAS 5 버전 기준입니다.
 

Posted by 자수씨
, |

JBossWS를 이용하여 웹 서비스를 배포하면 편한 점도 있지만 치명적인 단점도 포함하고 있습니다.

JBossWS 의 soap:address location 은 JBoss 를 띄운 서버의 리얼 IP 를 이용하여 배포를 하게 되는 것입니다. 만약 서버의 리얼 IP가 10.101.111.135 라면 아래와 같은 형태로 wsdl 이 배포될 것 입니다.


위와 같이 배포된 웹 서비스가 문제를 일으킬 수 있는 환경은 다음과 같습니다.
1. 내부 보안 정책 상 80 포트만 열려 있고 8080 포트가 막힌 경우
2. L4 를 통하여 로드벨런싱으로 구성된 멀티 서버의 경우 (1번과 같이 8080 포트가 오픈되지 않을 확률이 높음)
3. 리얼 IP 와 외부로 노출된 IP 가 다른 경우


이럴 경우 아래와 같이 별도의 jsp 를 만들어서 배포하는 것이 좋습니다.


80 포트가 열려있는 상태에서 AJP 를 통해 정상적으로 JBoss 쪽으로 요청만 넘겨진다면 정상적으로 웹 서비스를 사용할 수 있을 것 입니다.



Posted by 자수씨
, |


Windows 2007 서버에 JBoss 5.1 을 인스톨하고 그냥 띄우면 문제가 없는제 "-b" 옵션을 주고 띄우면 아래와 같은 오류가 발생합니다.

java.net.BindException: Address already in use: JVM_Bind


원인은 8083 을 해당 서버에서 사용하고 있기 때문입니다... 어떤 프로그램인지 찾기 보다는 JBoss 의 설정을 바꾸는 것이 훨씬 편한 작업입니다.

해당 서버에서 포트를 사용하는 경우도 있지만... 외부에 공개된 아이피와 실제 머신의 아이피가 달라서 발생한 문제였습니다.
실제로 포트를 사용하는 경우라면 아래의 방법을 사용하시면 되고, 외부 아이피와 실제 아이피가 다른 경우에는 "-b" 옵션의 인자 값을 실제 아이피로 설정하시면 문제가 해결됩니다.


<JBOSS_HOME>\server\<CONFIGURATION>\conf\bindingservice.beans\META-INF\bindings-jboss-beans.xml

<!-- Remote classloading service -->
<bean class="org.jboss.services.binding.ServiceBindingMetadata">
   <property name="serviceName">jboss:service=WebService</property>
   <!--property name="port">8083</property-->
   <property name="port">9083</property>

   <property name="description">Socket for dynamic class and resource loading</property>
</bean>


위의 파일을 열면 여러가지 포트들이 있습니다. 우리가 변경해야 하는 8083 을 찾아서 만만한 9083 으로 변경을 합니다.

JBoss 를 재시작해서 정상적으로 뜨면 문제 해결!!!


Posted by 자수씨
, |

기본 환경의 시작 스크립트
#!/bin/sh
############################################
## On default, to launch JBoss
############################################
nohup ./run.sh -b 192.168.0.11 > /dev/null &

기본 환경의 종료 스크립트
#!/bin/sh
############################################
## On default, to kill JBoss
############################################
ps -ef | grep "/usr/local/jboss5/bin/run.jar" | grep -v grep | awk '{ printf("ProcessID %s Terminated.\n", $2); }'
ps -ef | grep "/usr/local/jboss5/bin/run.jar" | grep -v grep | awk '{ printf("kill -9 %s\n", $2); }' > tmp.$$
sh tmp.$$
rm -f tmp.$$



클러스터링 환경의 시작 스크립트
#!/bin/sh
############################################
## On node1, to launch JBoss
############################################
nohup ./run.sh -c node1 -g vickiPartition -u 239.255.100.100 -b 192.168.0.11 -Djboss.messaging.ServerPeerID=1 -Djboss.service.binding.set=ports-default -Djboss.server.log.dir=/home/vicki/logs/node1 > /dev/null &


클러스터링 환경의 종료 스크립트
#!/bin/sh
############################################
## On node1, to kill JBoss
############################################
ps -ef | grep "ServerPeerID=1" | grep -v grep | awk '{ printf("ProcessID %s Terminated.\n", $2); }'
ps -ef | grep "ServerPeerID=1" | grep -v grep | awk '{ printf("kill -9 %s\n", $2); }' > tmp.$$
sh tmp.$$
rm -f tmp.$$

클러스터링 환경에서는 프로세스가 두 개가 뜨기 때문에 종료 스크립트가 있는 것이 편리합니다. 그렇지 않고 JBoss 에서 제공되는 종료 스크립트를 이용할 경우 바로 프로세스가 떨어지지 않아 사용자의 요청이 종료 중이 프로세스로 갈 수도 있습니다. 바로 프로세스를 죽이는 것이 운영 중에는 좋습니다.

클러스터링 환경에서 시작 스크립트 테스트
[root@localhost bin]# ./run.node1.sh
[root@localhost bin]# ps -ef | grep jboss
root      3123     1  0 11:32 pts/0    00:00:00 /bin/sh ./run.sh -c node1 -g vickiPartition -u 239.255.100.100 -b 192.168.0.11 -Djboss.messaging.ServerPeerID=1 -Djboss.service.binding.set=ports-default -Djboss.server.log.dir=/home/vicki/logs/node1
root      3146  3123 60 11:32 pts/0    00:00:01 java -Dprogram.name=run.sh -server -Xms128m -Xmx512m -XX:MaxPermSize=256m -Dorg.jboss.resolver.warning=true -Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=3600000 -Djava.net.preferIPv4Stack=true -Djava.endorsed.dirs=/usr/local/jboss5/lib/endorsed -classpath /usr/local/jboss5/bin/run.jar org.jboss.Main -c node1 -g vickiPartition -u 239.255.100.100 -b 192.168.0.11 -Djboss.messaging.ServerPeerID=1 -Djboss.service.binding.set=ports-default -Djboss.server.log.dir=/home/vicki/logs/node1
root      3158  3086  0 11:32 pts/0    00:00:00 grep jboss
실제로 프로세스를 실행 시키면 위와 같이 jboss 와 관련된 프로세스 2개를 확인할 수 있습니다. 한 서버에 두 개의 인스턴스가 있을 경우 구분할 수 있는 것은 ServerPeerID 이기 때문에 실행 스크립트에서 "ServerPeerID=1" 를 사용하였습니다.


클러스터링 환경에서 종료 스크립트 테스트
[root@localhost bin]# ./stop.node3.sh
ProcessID 3123 Terminated.
ProcessID 3146 Terminated.




Posted by 자수씨
, |

실제로 서비스를 하는 운영환경이라면 WAS 서버를 여러 대를 두어 가용성을 높일 수도 있습니다.

이러한 경우에는 L4 스위치가 로드 밸런싱을 하도록 구성되는 경우가 많습니다.


[그림 1] 2 Nodes on Multi-Servers 구성도

[그림 1] 의 구성은 L4 스위치가 두 개의 HTTP Server 앞단에서 로드밸런싱을 수행하며, 각 서버마다 두 개의 WAS 노드(인스턴스) 가 있습니다. 이와 같은 구성을 위해 앞에서 소개했던 클러스터링에서 몇 가지의 추가적인 설정이 필요로 합니다.

JBoss 의 노드(인스턴스) 구성은 node3, node4 로 설정된다는 점과 실행 옵션에서 -Djboss.service.binding.set=ports 의 값이 node3 은 ports-default, node4 는 ports-01 이라는 점만 유념하시면 됩니다.

실제로 가장 중요한 부분은 Apache HTTP Server 의 workers.properties 설정입니다.

<APACHE_HOME>/conf/workers.properties
# Define list of workers that will be used
# for mapping requests
worker.list=loadbalancer,status

# Define Node1
worker.node1.port=8009
worker.node1.host=192.168.0.11
worker.node1.type=ajp13
worker.node1.lbfactor=1
worker.node1.cachesize=10

# Define Node2
worker.node2.port=8109
worker.node2.host=192.168.0.11
worker.node2.type=ajp13
worker.node2.lbfactor=1
worker.node2.cachesize=10

# Define Node3
worker.node3.port=8009
worker.node3.host=192.168.0.12
worker.node3.type=ajp13
worker.node3.lbfactor=1
worker.node3.cachesize=10

# Define Node4
worker.node4.port=8109
worker.node4.host=192.168.0.12
worker.node4.type=ajp13
worker.node4.lbfactor=1
worker.node4.cachesize=10


# Load-balancing behaviour
worker.loadbalancer.type=lb
worker.loadbalancer.balance_workers=node1,node2,node3,node4
worker.loadbalancer.sticky_session=1
#worker.list=loadbalancer

# Status worker for managing load balancer
worker.status.type=status

각 서버의 Apache HTTP Server 설정을 위와 같이 바꾸어주면 자신의 서버에 올려져 있는 인스턴스 뿐만 아니라 다른 서버의 인스턴스까지 요청이 가능하게 됩니다.

단, 이러한 구성의 경우 세션 복제로 인한 오버헤드가 발생할 수 있습니다. buddy-replication 설정을 통해 근접한 인스턴스에게만 세션 복제를 할 수 있게 설정할 수 있습니다.
node1 -> node2, node2 -> node3, node3 -> node4, node4 -> node1  이런 방식으로 buddy-replication 을 설정하면 하나의 노드가 죽더라도 buddy 노드가 해당 세션을 복제 받을 수 있을 것 입니다. 하지만 이러한 경우 sticky-session 설정이 되어야 할 것으로 생각되네요...

쉬울지 알고 접근했던 JBoss 클러스터링인데, 역시 뭐든지 실제로 해보고 느껴봐야 할 것 같습니다.
안해봤으면 말을 하지 마요~ 어후...

Posted by 자수씨
, |

JBoss 에서 고가용성(High Availability) 환경을 구성하기 위해서는 세션 클러스터링이 필요합니다.

테스트에 사용된 환경은 다음과 같습니다.
System: VMWare
OS: CentOS 5.5 x86-64
HTTP Server: Apache HTTP Server 2.2.3
WAS: JBoss 5.1.0 GA



[그림 1] 서버 구성

위의 [그림 1] 에서 보는 것 처럼 하나의 시스템에 하나의 Apache HTTP Server 와 두 개의 JBoss Web Application Server 로 구성할 것 입니다.








 

어떻게 보면 테스트 환경은 쉽게 구성될 수 있지만, 실제로 운영환경에서는 각 설정값을 변경해주어야 재대로 성능을 발휘할 수 있습니다. 그리고 방화벽이 있는 경우 세션 복제를 위한 멀티캐스트 송수신이 정상적으로 안될 수도 있습니다.

간단한 웹 어플리케이션이 포함된 JBoss 인스턴스 하나 띄우는데 메모리가 600 메가 정도 사용하는 것 같습니다. 한 시스템에 2개의 인스턴스를 띄우려면 적어도 인스턴스당 1.5 기가의 메모리가 필요하지 않을까 생각이 됩니다.

이외에도 많은 변수가 있기에 실제 운영 환경에 배포하기 위해서는 많은 공수가 들 것으로 생각됩니다.


참고자료
http://www.jboss.org/file-access/default/members/jbossclustering/freezone/docs/cluster_guide/5.1/pdf/Clustering_Guide.pdf
http://community.jboss.org/wiki/ConfigurationChangesforClusteredWebApplicationsinAS5
http://www.datadisk.co.uk/html_docs/java_app/jboss5/jboss5_clustering.htm

Posted by 자수씨
, |

JBoss 의 배포 경로를 "D:\Server\webapps" 도 추가하려면 JBoss 설정을 변경합니다.


<JBOSS_HOME>/server/<CONFIGURATION>/conf/bootstrap/profile.xml 를 열어 하일라이팅 된 부분과 같이 경로를 추가합니다.




	...
	
	
	
		${jboss.server.home.url}conf/bindingservice.beans
		${jboss.server.home.url}conf/jboss-service.xml
		${jboss.server.home.url}deployers
		
			
				${jboss.server.home.url}deploy
				file://D:/Server/webapps
			
		
		${jboss.server.data.dir}/attachments
		
	

	...




-_-;; syntax highlight 가 좀 이상해서 element 가 대문자로 표시가 되네요;;; 쿨럭;;;


정리 차원에서...

참고자료: 우리 회사 데모서버, http://cafe.naver.com/jbossug.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=2081

Posted by 자수씨
, |

글 보관함

최근에 받은 트랙백