System Compleat.

'libevent'에 해당되는 글 1건

  1. repcached on Ubuntu 9.0.4-server

repcached on Ubuntu 9.0.4-server

Techs
( 정윤진, yjjeong@rsupport.com )

사용자 삽입 이미지

이름에서 쉽게 알 수 있듯이, memcached 를 복제하여 안정성을 높여주는 도구이다.
최근 이런 저런 이유에서 memcached 에 대해서 관심이 좀 생겨서 알아보다가 의외로 쉽게 얻어 걸린 괜찮은 툴인듯 해서 정리해 본다.

용도는, memcached 의 multi-master 로서의 사용이다.
항상 그렇지만, 뭔가 단일화된 자원을 분산하여 처리할때는 여러가지의 경우를 생각해야 하는데
Multi-Master 구조가 Multi-Slave 구조보다 훨씬 힘든 이유는 각각의 분산된 자원이 서로 동일한 정보를 가지고 있어야 하고, 이 정보는 장애 극복이 가능하여야 하며 가능한한 최단 시간내의 sync 를 통해 동기화 되어야 하는 등, 비교적 그 구현이 쉽지 않아 제대로 지원하는 툴 또는 3rd-party 의 무언가를 찾기 쉽지 않은게 사실이다.

일단, 이 repcached 의 성능도 어떨지는 잘 모르겠지만, memcached 의 동작 자체가 DBMS 의 그것과 같지 않게 매우 단순하여 구조적 취약점이 크게 발생할 일이 없으므로, 로컬에서는 일단 잘 동작할 것이라 믿어 의심치 않는다. ( 웹 서버간 세션 공유를 위한 memcached 의 사용 등 )

다만, 일종의 글로벌 서비스를 계획함에 따라 일부 웹 어플리케이션에서 가공되고, 사용되어지는 캐싱 가능한 모든 데이터에 대한 캐쉬 클라우드를 memcached 로 구현함에 있어서,
repcached 가 글로벌한 환경에서 multi-master 로서 동작 할 수 있는가 하는 테스트는 나름 의미가 있지 않을까 한다.

뭐, 남의 프로젝트 페이지에서 이런 설명까지 긁어오는건 별로 좋아라 하지 않지만,
특별히 장애 대응 부분과 replication 동작 부분만 이미지를 가져다 붙이도록 한다.

사용자 삽입 이미지

memcached replication


보면, 클라이언트는 각 memcached 서버에서 적절히 데이터를 받아온다.
적절히 분산해서 받아 오다가, 장애가 발생하면 요렇게 된다.

사용자 삽입 이미지

memcached Crash!


장애가 발생하면, 살아있는 캐쉬 서버로 부터만 데이터를 가져온다.

요러다가 장애난 서버가 되살아 나면~
사용자 삽입 이미지

recover memcached data set


클라이언트로의 접근을 막는 동시에, 동기화를 수행한다.
아... 똑똑하기도 하여라.

각설하고 직접 설치하고 써보는게 장땡이다.


일단 뭐 설치 방법은 간단하다.
최신 버전의 memcached 를 받고, repcached 의 patch 파일을 받은 후에 패치 적용하고
컴파일 하면 된다.

뭐, 실제 구현을 위한 잡다한건 잘 안쓰는 편이지만, 나도 점점 멍청해져 가고 있다는게 최근 확실해 졌으므로 큰맘 먹고 적어본다.

서버는 제목과 같이 우분투 9.0.4 서버 버전을 사용하였다.

# 다운로드
wget http://memcached.googlecode.com/files/memcached-1.2.8.tar.gz
wget http://jaist.dl.sourceforge.net/sourceforge/repcached/repcached-2.2-1.2.8.patch.gz

# 패치가 적용된 다운로드
wget http://jaist.dl.sourceforge.net/sourceforge/repcached/memcached-1.2.8-repcached-2.2.tar.gz

# 뭐 굳이 쓸 필요는 없지만, 문제 추적의 과정을 설명하자는 취지에서,
# 다운 받은 패치를 memcached 의 압축을 풀어놓은 디렉토리로 이동시키고,  적용한다.

gzip -d repcached-2.2-1.2.8.patch.gz | patch -p1

./configure --prefix=/opt/memcached --enable-replication

# i686 어쩌고 찡얼댄다.  알고보면 build-essential 을 설치해 달라는 말이다.

apt-get install build-essential

# 설치가 완료되면, 걸렸던 부분이 넘어간다.
# 잘 넘어가다가,
# libevent 라이브러리가 설치되어있지 않다면, 설치하고 있다면 path 를 알려달라고 또 징징댄다. 귀찮은 녀석.

wget http://www.monkey.org/~provos/libevent-1.4.11-stable.tar.gz

# ./configure , make, make install 한다.

# 다시 memcached 를 configure 한다.
# 잘 된다.

make && make install

# 설치를 완료하고, memcached 를 굴려보면,

# 또 징징댄다. 또 libevent 관련 메세지다. 
# libevent* 를 찾아봤더니, /usr/lib 에 있단다.
# ldd 해보면, libevent 부분만 빵꾸다.
# 훗, ln -s 해준다.  Cent 64bit 짬밥.

ln -s /usr/lib/libevent-1.3e.so.1.0.3 /lib/libevent-1.4.so.2

# 자 이제 사용하면 된다.

물론 잘 동작 하는지는 좀더 봐야겠지만, Amazon EC2 의 EU-west 에서 한국의 서버와 동기화 해 테스트를 해 볼 예정.

많은 Unix 또는 Linux 의 바이너리들 처럼, memcached는 간단, 심플하게 원하는 기능을 수행하는데 군더더기 없이 충실하다.  그 안정성 역시 전세계의 많은  웹서버에 들러붙어서 동작하고 있으므로, 충분히 검증 되었다 싶고.

단순 웹서버의 url contents 캐슁만을 위해 memcached 를 사용하는건, 웬지 아깝고
작게는 세션부터 MySQL 의 result caching 의 엄한 영역 까지 사용 될 수 있으니 만큼,
클라이언트 라이브러리를 조금만 연구 하면 많은 소득을 얻을 수 있지 않나 싶다.

사용 방법은, 뭐 많이 나와있으니깐. 
아, 여기 나와있는 모든 이지미는 repcached 의 wiki 에서 퍼온것임을 강조한다.

repcached
http://repcached.lab.klab.org/