핵심 개념

  • Multicast
  • Session Manager in Tomcat

Multicast

Multicast는 특정 수신자 그룹에게 단순 메시지를 전송하는 방법이다. 
Tomcat에서는 Apache Tribes Pear-to-pear communication framework 를 사용한다.

Tomcat  세션 관리자 종류

 Standard Manager

 기본 세션 관리자

 Persistent Manager 

 File Store, JDBC Store 두가지 방식이 있음

 Delta Manager

 다른 인스턴스와 세션을 복제(공유) 한다.
 multicast 방식에 따라 수신자 그룹에 등록된 모든 서버들과 세션을 복제 한다.

 Backup Manager

 다른 인스턴스와 세션을 복제(공유) 한다.
 수신자 그룹에 등록된 1대의 서버만 백업을 둔다.

세션 복제 설정 방법

  1. multicast routing
  2. conf/server.xml <Cluster> 추가 
  3. web.xml <distributable /> 추가
1. Multicast routing
sudo route add -net 224.0.0.0 net netmask 244.0.0.0 dev eth0

2. conf/server.xml <Cluster> 추가

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

<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"/>

<Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
<Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
</Sender>

<Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
address="auto"
port="4001"  <!-- 한 서버에 여러 Tomcat를 구동할 경우 Port 번호를 다르게 설정 -->
autoBind="100"
selectorTimeout="5000"
maxThreads="6"/>

<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"/>

<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.JvmRouteSessionIDBinderListener"/>
<ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
</Cluster>




참고:

  • 세션 공유가 되지 않을 경우 방화벽을 확인 해 볼 필요가 있다.(multicast 는 UDP 통신을 한다.)
  • 하나의 서버에 다수의 Tomcat를 구동할 경우 <Receiver> 의 Port는 각 서버마다 다르게 설정 해야 한다.
  • Creation of SecureRandom instance for session ID generation  할 때 시간이 올래 걸리면 
    -Djava.security.egd=file:/dev/./urandom 설정을 추가 한다.


'서버 설정' 카테고리의 다른 글

Centos 6.5 에서 6.6 업그레이드 이후 문제점  (0) 2014.11.09
* 참고 :  http://bluewiz.tistory.com/446  

Gitosis를 이용하여 Redmint + Git 환경 구축

# Redmine 설치
    * www.redmine.org 참조
    * 아파치 연동 후 www-date 계정으로 연동 가정
    * 설치 위치 : /var/www/redmine

# 패키지 설치

sudo apt-get install git-core python-setuptools build-essential
gem install inifile
gem install net-ssh or apt-get install libnet-ssh2-ruby1.8
gem install lockfile or apt-get install liblockfile-ruby

# git 사용자 추가

suso adduser --system --shell /bin/bash --gecos "Git Administrator" --group --disabled-password --home /opt/git git


# Git 관리자 SSH 키 생성
    * 한번 생성된 키가 바뀔 경우 복사된 모든 키를 다시 복사 해야 한다.(링크 거는것도 한 방법. 될까?)

sudo -H -u git ssh-keygen -t rsa


# Gitosis 설치 (root 로 실행)

cd /opt/git
sudo git clone git://eagain.net/gitosis.git
cd gitosis
sudo python setup.py install
sudo -H -u git gitosis-init < ~git/.ssh/id_rsa.pub
sudo chod 755 ~git/repositories/gitosis-admin.git/hooks/post-update
sudo chown -R git.git /opt/git


# RedmineGitosis 플러그인 설치

cd /var/www/redmine
script/plugin install git://github.com/rocket-rentals/redmine-gitosis.git


# vendor/plugins/redmine-gitosis/lib/gitosis.rb 파일을 열어서 환경변수 수정.
    * 1. GITOSIS_URI = "git@<server-fqdn>:gitosis-admin.git"
    * 2. GITOSIS_BASE_PATH = "/opt/git/repositories/" <- Gitosis를 설치한 사용자의 홈디렉토리에 존재
    * 3. 아래쪽에 'vendor/plugins/redmine_gitosis/extra/ssh_with_identity_file.sh' 경로를
          'vendor/plugins/redmine-gitosis/extra/ssh_with_identity_file.sh'로 변경. 

vi  vendor/plugins/redmine-gitosis/lib/gitosis.rb


# vendor/plugins/redmine-gitosis/extra/ssh_with_identity_file.sh 변경

#!/bin/bash
#LD_LIBRARY_PATH = "" <-- 아파치 로그 오류로 주석 처리
exec ssh -i `dirname $0`/ssh/private_key "$@"


# 플러그인 관련 데이터베이스 구조 반영

cd /var/www/redmine
rake db:migrate_plugins RAILS_ENV=production


# gitosis 관리를 위한 마스터 키 설정.
    * Passenger 는 redmine 계정에서 실행되기 때문에 gitosis 시스템에 접근할 수 있도록 마스터 키를 설정해야 한다. 
    * (gitosis 시스템은 git 계정에서 관리되고 있음)
    * git 계정의 rsa private key 를 복사해서 /var/www/redmine/vendor/plugins/redmine-gitosis/extra/ssh/private_key 를 덮어쓴다.

sudo cp ~git/.ssh/id_rsa /var/www/redmine/vendor/plugins/redmine-gitosis/extra/ssh/private_key
sudo chmod 600 /var/www/redmine/vendor/plugins/redmine-gitosis/extra/ssh/private_key


# redmine 프로그램이 git에 접속하기 위해 ~git/.ssh 에 있는 모든키 ~www-data/.ssh 복사

sudo cp -R ~git/.ssh ~www-data/.ssh


http://www.creativeswa.pe.kr/xe/120

<profile>

            <id>sonar</id>

            <activation>

                <activeByDefault>true</activeByDefault>

            </activation>

            <properties>

                <!-- EXAMPLE FOR MYSQL -->

                <sonar.jdbc.url>

                  jdbc:mysql://192.168.120.52:3306/sonar?useUnicode=true&amp;characterEncoding=utf8

                </sonar.jdbc.url>

                <sonar.jdbc.driver>com.mysql.jdbc.Driver</sonar.jdbc.driver>

                <sonar.jdbc.username>sonar</sonar.jdbc.username>

                <sonar.jdbc.password>sonar</sonar.jdbc.password>


                <!-- SERVER ON A REMOTE HOST -->

                <sonar.host.url>http://192.168.120.52:9000</sonar.host.url>

<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

            </properties>

        </profile>

 

'Java' 카테고리의 다른 글

ThreadLocal 사용법  (0) 2011.07.17
iText 한글 문제 처리  (0) 2011.05.08

+ Recent posts