System Compleat.

'Ubuntu-9.0.4-server'에 해당되는 글 2건

  1. NginX on Ubuntu-9.0.4-server
  2. repcached on Ubuntu 9.0.4-server

NginX on Ubuntu-9.0.4-server

Techs
( 정윤진, bluebird_dba@naver.com )


오늘은, nginx 의 우분투 설치에 대해 한번 전체 과정을 쭈욱 적어 보려 한다.
우분투에서의 설치 과정은 대체로 다음과 같다.

1. OS 설치.
2. 필요 package 설치
3. nginx source download
4. Additional Module download
5. configure / make / make install
6. Setup
7. Run!!

물론,  2 ~ 5번을 건너 뛰고  apt-get install nginx 해도 된다.  ㅋ
어쨌든 우분투 인스톨이 끝나로 root 계정 세팅을 완료 하였다면 필요한 패키지 인스톨을 시작한다.

Package Install

apt-get update
apt-get dist-upgrade
apt-get install build-essential libpthread-stubs0 libpthread-stubs0-dev libgd2-xpm libgd2-xpm-dev libgeoip-dev libgeoip1 sysvinit openssl libssl-dev libpcre3-dev  libgcrypt11-dev


nginx download

NginX 는, 아직 메이저 버전 넘버가 1 이 채 못되었다.  그렇다고 unstable 한 것은 아니지만, 다음의 버전 넘버링을 참고 하도록 한다.

0.6  -> Legacy 버전  ( 통상 apt-get 으로 install 되는 버전. 3rd party 모듈이 잘 설치되며, 안정적으로 동작한다 )

0.7  -> Stable 버전.

0.8  -> Develop 버전  ( 3rd party 모듈은 포기하는게 좋다.  다만, 기존 3rd party 로 제공되던 모듈이 nginx 에 포함되어  --with 옵션으로 설치 되는 모듈이 많아졌다. )

wget http://sysoev.ru/nginx/nginx-0.6.38.tar.gz
바빠서 그런건지, sysoev.ru 사이트가 종종 먹통일 때가 있다.

google 에서 해당 버전의 파일명을 검색하면 서비스 하는 사이트가 많으니 신뢰할 만한 페이지에서 받아서 사용하도록 한다.

openssl 소스 다운로드
nginx 의 compile 시에 openssl 의 소스코드를 요구한다.

wget http://www.openssl.org/source/openssl-0.9.8k.tar.gz
사이즈에 비해 제법 느리니 커피한잔 마셔 준다. ㅋ



additional module download

http://wiki.nginx.org 의 Module 페이지에 가면 기본적으로 nginx 에서 제공하는 모듈 이외에 3rd party 모듈들의 링크를 제공한다.  필요한게 있다면 추가 하도록 한다.

GeoIP Extension
wget http://wiki.nginx.org/images/9/99/Nginx-geoip-0.1.tar.gz

NCache
wget http://ncache.googlecode.com/files/ncache-2.3_release.tar.gz

다른건 잘 안되서 추적하기도 귀찮고 해서 올리지 않았다.
통상 Upload Module 도 많이 사용 하는듯.

다운로드 받은 모듈은 configure 시에 옵션으로 써 주기 편한 디렉토리에 압축을 풀어 놓도록 한다.  난  $SRCDIR/nginx-0.6.38/modules  에 압축을 풀었다.


Configure && make && make install

일반적인 xNix 어플리케이션의 compile 과 비슷하다.

./configure --add-module=./modules/ncache-2.3 --add-module=./modules/nginx-geoip-0.1/  --with-google_perftools_module --with-poll_module --with-http_ssl_module  --with-http_realip_module  --with-http_gzip_static_module  --with-http_stub_status_module --prefix=/opt/nginx --with-openssl=/usr/src/binaries/openssl-0.9.8k

더 필요한게 있다면 붙여도 된다.

위의 apt-get install 만으로는 빠져있는 것들이 있을 것이다.  configure 과정에서 뭔가 누락된게 있다고 징징대면  apt-cache search 다음에 apt-get 으로 인스톨 해 주면 된다.

configure 가 끝나면 make , make install

configure 는 이상없이 끝났는데,  make 과정에서 error 를 토해내면서 중지하면,  error 부분을 조치해 주고 다시 make 를 시도한다.  통상 openssl 소스를 추가적으로 --with 옵션에 넣어준 경우,  make clean 시에 rm -f 로 디렉토리를 지우려는 멍청한 짓을 가끔 해서 make 파일을 수정하는 세련된 짓은 하지 않고, 그냥 rm -fR ../openssl-0.9.8k 해서 지웠다.
당연히, 지운다음에 다시 압축을 풀어줘야지.


nginx.conf &&  RUN!!!!

 정상적으로 설치가 완료 되었다면,  --prefix 로 지정한 디렉토리에 nginx 가 이쁘게 컴파일되어 설치된 모습을 볼 수 있다.  실행 바이너리는 ./sbin 에 , conf 는 ./conf 디렉토리 안에 있다.

nginx.conf 에서는, 다음의 몇가지가 기본적인 설정이다.  뭐 wiki 참조하시면 엄청 잘 나와있으므로, 모자란 부분은 거기서 추가 하시도록 한다.

몇몇 주요한 conf 는,

worker_process
sendfile

upstream  httpservice {
    ip_hash;
    server x.x.x.x:80;
}

location / {
      set $memcached_key $uri;
      memcached_pass     x.x.x.x:11211;
      ....
      ..
      Default nginx.conf 참조
}

rewrite 및 기타 virtual host 설정등도 함께 제공하므로, wiki.nginx.org 에서 참조 하도록 한다.

nginx 를 구동하기 위해서는, 적절한 계정이 있어야 한다.
groupadd -g 81 apache
useradd -g 81 apache

난 apache 로 돌렸다.  ( 사실 이건 예전에 AJ 가 쓰던거지만. )


어쨌든, 다 설정 되었으면 구동한다.

./sbin/nginx  ( & 안해도 된다  알아서 한다 )

지정한 process 만큼 떠 있는 모습이 확인 가능하다.



음.. 뭐 이런 매뉴얼 스러운 글은 원래 잘 쓰지 않는 편이지만,  나도 돌머리라 자주 잃어버려서 정리 겸 해서 쓴다.  뭐 사실 잃어버려도 다시 삽질 하면 되지만, 점점 삽질 하는 시간이 웬지 아까워 진다고 할까나...


그냥 wiki.nginx.org 를 번역하는게 나을지도..  그러고 보니 한글 페이지를 봤던것 같은 기억도;;;  varnish 가 더 희소성이 높으려나.. ㅋㅋㅋ


( 정윤진, bluebird_dba@naver.com )



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/