VirtualBox 특정 포트를 HOST IP로 접근하기

VirtualBox의 가상머신을 이용한 특정 서비스(SSH, DB, WEB, ETC)를 외부에 OPEN 하기 위한 가장 간단한 방법이다.

우선 가상머신에 대한 설치 & 설정은 본 글에서는 제외 한다.

서버 네트워크 설정 변경

  1. 가상 머신의 설정 정보를 클릭 한다.
[그림 1] 가상 머신 설정 정보 확인
  1. 네트워크의 어댑터 1의 타입을 NAT로 변경 한다.

  2. 고급 설정을 눌러 포트 포워딩(P) 버튼을 클릭 한다.

[그림 2] 네트워크 > 어댑터 1 설정
  1. 포트 포워딩 규칙을 설정한다.
[그림 3] 포트 포워딩 규칙 설정
  • 호스트 IP는 다음 CMD 명령어를 통해 확인 할 수 있다.
  $> ipconfig
  • 게스트 IP는 가상머신에서 다음 명령어를 이용하여 알수 있다.
  $> ifconfig
[그림 3] 포트 포워딩 규칙 설정
  1. 접속이 안된다면 확인 사항
  • 우선 가상 머신의 IPTABLE 에 설정을 확인 해야 한다. 다음 명령어는 간단하게 방화벽을 내리는 명령어다.
 $> service iptables stop

아주 간단하지만 유용하다.



Posted by lahuman

MyISMA VS InnoDB

1. MyISMA

MyISMA 의 특징은 non-transactional-safe(트랜잭션 기능 제공 안 함)와 데이터 모델 디자인이 단순하다는 것이다.

장점

  • 단순한 디자인으로 인해 따라서 Select 작업 속도가 빠르고 많은 읽기 작업에 적합하다.
  • Full-text 인덱싱이 가능하여 검색하고 하는 내용에 대한 복합 검색도 가능하다.
  • 테이블 단위로 물리 파일이 존재하여 백업 & 복구가 쉽다.
    1. .frm - 테이블 정의 파일
    2. .MYD - 테이블 데이터 파일
    3. .MYI - 테이블 인덱스 파일

단점

  • Table-Level Lock 사용으로 쓰기 작업이 느리고 다음과 같은 문제가 있다.
    1. SELECT (진행 중), Update(대기 중) 일 경우에 해당 테이블에 대한 SELECT 작업도 함께 LOCK이 걸린다.
  • 데이터 무결성이 보장되지 않는다.
  • 트랜젝션 기능 제공 안 한다.

2. InnoDB

InnoDB는 트랜잭션 기능을 제공하고 Row-level locking, 외래 키 지원, 장애 복구 등의 다양한 기능을 지원한다.

장점

  • Row-level Lock 사용으로 변경 작업이 빠르고 해당 ROW를 제외한 동시 처리가 가능하다.
  • 데이터 무결성 보장한다.
  • 제약조건, 외래 키 생성, 동시성 제어 등 가능하다.

단점

  • Full-text 인덱싱 불가능하다.
  • MyISAM에 비해 시스템 자원을 많이 사용한다.

참조


Posted by lahuman

TOMCAT 설정을 알아보자

TOMCAT은 JAVA WAS(Web Application Server)에서 가장 많이 사용되고 있다.1 

많이 사용되는 이유는 OpenSource(무료)며, 많은 Committers의 참여로 주기적인 패치가 이루어지고 쉬운 설치 JAVA 언어와의 좋은 궁합 등이 있다.

Tomcat을 운영에서 사용하기 위하여 몇 가지 설정 변경이 필요하다.

Tomcat Logging

Tomcat Logger는 JULI(Java Logging Implimentation)이라는 자체 구현체를 제공한다.
기본적으로 Apache Commons Logging 기반으로 구현되어 있고(java.util.logging 사용) extra 패키지를 통해 Log4j, logback 등으로 변경이 가능하다.

기본 설정은 $CATALINA_BASE/conf/logging.properties 파일을 로딩하여 적용한다.

Logging 종류

  • JAVA Logging API : Application당 로깅 설정을 제어하기 위해 java.util.logging 기반의 구현체 JULI 사용 - localhost.yyyy-MM-dd.log 형식의 파일명을 가짐
  • Servlets logging API : javax.servlet.ServletContext.log(…)를 통해 메시지를 때 사용 - manager.yyyy-MM.dd.log 형식의 파일명을 가짐
  • Console : tomcat 운영시 출력되는 STDERR/STDOUT - catalina.out 형식의 파일명을 가짐
  • Access Logging : AccessLogValve 또는 ExtendedAccessLogValve에서 생성되는 로그 - access_log.yyyy-MM-dd.txt 형식의 파일명을 가짐

Sessing

HTTP 세션을 생성 관리해주는 sessiong manager로 Context안에 설정이 안 되어 있는 경우 자동으로 기본 설정값에 의해 생성된다.(기본값 : org.apache.catalina.session.StandardManager)

<Manager classname="org.apache.catalina.session.StandardManager" />

Session Manager 종류

  • StandardMnager : 기본 설정. 한 개의 instance를 사용하는 경우만 적용 가능 - org.apache.catalina.session.StandardManager
  • PersistentManager : 디스크 또는 DB에 세션을 Persist. 세션 스와핑과 장애 대처(fault tolerance) - org.apache.catalina.session.PersistenManager
  • DeltaManager : All-to-All 방식 Session Replication 기능 구현 - org.apache.catalina.session.DeltaManager
  • BackupManager : Primary-Secondary Sessiont Replication 기능을 구현 - org.apache.catalina.session.BackupManager 2

Tomcat Clustering

Tomcat Clustering을 위해서는 $CATALINA_BASE/conf/server.xml의 또는 에 다음과 같은 설정을 한다.

<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" />

아래는 설정 샘플3이다.

<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"
                channelSendOptions="8">
  <Manager className="org.apache.catalina.ha.session.DeltaManager"
          expireSessionsOnShutdown="false"
          notifyListenersOnReplication="true"/>

   <!-- 멀티캐스트 포트(45564) 필요에 따라 변경 -->
 <Channel className="org.apache.catalina.tribes.group.GroupChannel">
   <Membership className="org.apache.catalina.tribes.membership.McastService"
               address="228.0.0.4"
               port="45564"
               frequency="500"
               dropTime="3000"/>
   <!-- replication 메시지 수신 포트는 4000 - 4100 사이 -->
   <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
             address="auto"
             port="4000"
             autoBind="100"
             selectorTimeout="5000"
             maxThreads="6"/>

   <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
     <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
   </Sender>
   <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
   <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>
 </Channel>

 <Valve className="org.apache.catalina.ha.tcp.ReplicationValve"
        filter=""/>
 <Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>

 <!-- war 를 하나에 반영하면 클러스터에 자동으로 배포되는 FarmWarDeployer 기능시에만 필요
 <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"
           tempDir="/tmp/war-temp/"
           deployDir="/tmp/war-deploy/"
           watchDir="/tmp/war-listen/"
           watchEnabled="false"/>
   -->

 <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
</Cluster>

session Cluster

  • DeltaManager : Small cluster
  • BackupManager : Large cluster

참고자료

  1. Enterprise 환경에서 Tomcat 운영하기
  2. 2017년기준 JAVA 어플리케이션 서버 사용율
  3. Tomcat8 기준 세션 설정
  4. Tcomat 세션 클러스터링 설정


Posted by lahuman