DarkStar(다크스타) 한대의 물리적 서버에서 2개이상의 서버 가동하기.|

2010. 1. 25. 20:46오픈소스관련/다크스타(DarkStar)

728x90
반응형

여러개의 DarkStar서버를 한대의 물리적인 서버에 가동합니다.

우선 타크스타의 장점은 클러스터링을 통해서 여러개의 서버가 하나처럼 서비스할수 있다는 장점입니다.

따라서 손쉽게 다량의 서버를 하나로 연결하는 확장성이 뛰어나다는점입니다.

하지만 2개 이상의 서비스를 위해서 설정은 어떻게 할것인가...?

아래와 같은 문제가 발생한다면....?

1. rmi 포트가 이미 사용중이라는 에러가 뜬다.

2. 아래와 같은 에러가 발생한다면...?

2010. 1. 25 오후 8:33:14 com.sun.sgs.impl.kernel.Kernel createServices
심각: ScheduleMe: failed to create services
java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
        at com.sun.sgs.impl.kernel.Kernel.createService(Kernel.java:776)
        at com.sun.sgs.impl.kernel.Kernel.setupServiceNoManager(Kernel.java:710)
        at com.sun.sgs.impl.kernel.Kernel.loadCoreServices(Kernel.java:609)
        at com.sun.sgs.impl.kernel.Kernel.fetchServices(Kernel.java:558)
        at com.sun.sgs.impl.kernel.Kernel.createServices(Kernel.java:468)
        at com.sun.sgs.impl.kernel.Kernel.createAndStartApplication(Kernel.java:442)
        at com.sun.sgs.impl.kernel.Kernel.<init>(Kernel.java:349)
        at com.sun.sgs.impl.kernel.Kernel.main(Kernel.java:1302)
Caused by: java.rmi.server.ExportException: Port already in use: 44533; nested exception is:
        java.net.BindException: Address already in use
        at sun.rmi.transport.tcp.TCPTransport.listen(TCPTransport.java:310)
        at sun.rmi.transport.tcp.TCPTransport.exportObject(TCPTransport.java:218)
        at sun.rmi.transport.tcp.TCPEndpoint.exportObject(TCPEndpoint.java:393)
        at sun.rmi.transport.LiveRef.exportObject(LiveRef.java:129)
        at sun.rmi.server.UnicastServerRef.exportObject(UnicastServerRef.java:190)
        at sun.rmi.registry.RegistryImpl.setup(RegistryImpl.java:92)
        at sun.rmi.registry.RegistryImpl.<init>(RegistryImpl.java:68)
        at java.rmi.registry.LocateRegistry.createRegistry(LocateRegistry.java:222)
        at com.sun.sgs.impl.util.Exporter.export(Exporter.java:96)
        at com.sun.sgs.impl.service.watchdog.WatchdogServerImpl.<init>(WatchdogServerImpl.java:336)
        at com.sun.sgs.impl.service.watchdog.WatchdogServiceImpl.<init>(WatchdogServiceImpl.java:350)
        ... 12 more
Caused by: java.net.BindException: Address already in use
        at java.net.PlainSocketImpl.socketBind(Native Method)
        at java.net.PlainSocketImpl.bind(PlainSocketImpl.java:359)
        at java.net.ServerSocket.bind(ServerSocket.java:319)
        at java.net.ServerSocket.<init>(ServerSocket.java:185)
        at java.net.ServerSocket.<init>(ServerSocket.java:97)
        at com.sun.sgs.impl.util.Exporter$ServerSocketFactory.createServerSocket(Exporter.java:180)
        at sun.rmi.transport.tcp.TCPEndpoint.newServerSocket(TCPEndpoint.java:649)
        at sun.rmi.transport.tcp.TCPTransport.listen(TCPTransport.java:299)
        ... 22 more

위 2가지 문제의 경우 다크스타는 내부적으로 다양한 포트를 사용하고있습니다.

따라서 먼저 실행된 다크스타가 먼저 포트를 잡아버리면, 뒤에 실행되는 서버는 포트를 잡지 못해서 위와 같은 문제가 발생됩니다.

따라서 properties파일의 설정을 충실하게 작성해주셔야 합니다.


예를 들면...아래와 같이 작성하시면 됩니다.

===========================================================

# This is the properties file for running the HelloWorld
# example from the Project Darkstar Server Application Tutorial

com.sun.sgs.app.name=HelloWorld
com.sun.sgs.app.root=data/HelloWorld
com.sun.sgs.app.port=10019
com.sun.sgs.impl.transport.tcp.listen.port=10019
com.sun.sgs.app.listener=com.sun.sgs.helloWorld.HelloWorld

com.sun.sgs.services=com.gamalocus.sgs.services.mysql.MySQLService
com.sun.sgs.managers=com.gamalocus.sgs.services.mysql.MySQLManager

com.sun.sgs.impl.service.session.protocol.acceptor=com.sun.sgs.impl.protocol.helloWorld.SimpleSgsProtocolAcceptor

# MySQL database settings
com.gamalocus.sgs.services.mysql.MySQLService.dbhost=localhost
com.gamalocus.sgs.services.mysql.MySQLService.dbname=HelloWorld

com.gamalocus.sgs.services.mysql.MySQLService.dbuser=helloWorld
com.gamalocus.sgs.services.mysql.MySQLService.dbpass=mypassword

com.sun.sgs.impl.service.session.allow.new.login=true
com.sun.sgs.impl.service.data.store.db.bdb.remove.logs=true

com.sun.sgs.node.type=singleNode

com.sun.management.jmxremote=false
com.sun.management.jmxremote.port=60040
com.sun.management.jmxremote.authenticate=false
com.sun.management.jmxremote.ssl=false

# The TCP port for the data service's shared network server
#
com.sun.sgs.impl.service.data.store.net.server.port=60041
# The TCP port for the watchdog service's internal server
#
com.sun.sgs.impl.service.watchdog.server.port=60042
# The TCP port for the node mapping service's internal server
#
com.sun.sgs.impl.service.nodemap.server.port=60043

===========================================================

위와 같이 HelloWorld.Properties 파일을 작성해주면 됩니다.


728x90
반응형