강좌&TIP/PHP2010/10/10 21:12
Key & Value DB Engine 인 Tokyo Cabinet 을 Apache + PHP 에서 활용하기 위해서는 다음과 같이 3가지를 설치하셔야 합니다. 더 자세한 사항은 저보다 인터넷에 훨씬 잘나와 있기 때문에 설치 가이드만 제공합니다.

설치 자체는 상당히 간단합니다.

1. Tokyo Cabinet 설치 ( tokyocabinet-1.4.46.tar.gz )
  # cd /usr/local/src

  # wget http://fallabs.com/tokyocabinet/tokyocabinet-1.4.46.tar.gz
  # tar zxvf tokyocabinet/tokyocabinet-1.4.46.tar.gz
  # cd tokyocabinet/tokyocabinet-1.4.46

  # ./configure --prefix=/usr/local/tokyocabinet

  # make
  # make install


2. Tokyo Tyrant 설치 ( tokyotyrant-1.1.41.tar.gz )
  # cd /usr/local/src

  # wget http://fallabs.com/tokyotyrant/tokyotyrant-1.1.41.tar.gz
  # tar zxvf tokyotyrant-1.1.41.tar.gz
  # cd tokyotyrant-1.1.41

  # ./configure --prefix=/usr/local/tokyotyrant --with-tc=/usr/local/tokyocabinet

  # make
  # make install

3. Tokyo Tyrant 실행 ( B+Tree Mode )
  ex) .tch - Hash, .tcb - B+ Tree, .tcf - Fixed-length, .tct - Table
  # mkdir /home/server/tc-data
  #/usr/local/tokyotyrant/bin/ttserver -port 11211 -thnum 8 -dmn -pid /home/server/tc-data/ttserver.pid -log /home/server/tc-data/ttserver.log -le -ulog /home/server/tc-data/ -ulim 128m -sid 1 -rts /home/server/tc-data/ttserver.rts /home/server/tc-data/database.tcb

  # netstat -anp | grep LISTEN

#############################################################################################
 tcp        0      0 0.0.0.0:11211               0.0.0.0:*                   LISTEN      6657/ttserver
#############################################################################################


4. PECL Tokyo Tyrant 설치 ( tokyo_tyrant-0.5.0.tgz )
  현재 tokyo_tyrant 0.5.0은 pecl로 설치 안되는 경우가 많습니다.
  그래서 수동 설치를 하셔야 됩니다.

  # pecl tokyo_tyrant-0.5.0

  만약 에러가 난다면 수동 설치

  # cd /usr/local/src
  # wget http://pecl.php.net/get/tokyo_tyrant-0.5.0.tgz

  # tar zxvf tokyo_tyrant-0.5.0.tgz
  # cd tokyo_tyrant-0.5.0

  # phpize
  # ./configure --with-php-config=[PHP CONFIG PATH] --with-tokyo-tyrant=/usr/local/tokyotyrant --with-tokyo-cabinet-dir=/usr/local/tokyocabinet

  # make
  # make install

  PHP 설치 DIR 및에 extensions 폴더 아래에 있는 no-debug-non-zts-20060613 폴더로 이동

  # cp tokyo_tyrant.so [PHP 확장 모듈 DIR]

  # service httpd restart

#############################################################################################
<?
  phpinfo();
?>
#############################################################################################

  다음 처럼 정상적으로 tykyo tyrant 모듈이 실행 되었는지 확인

사용자 삽입 이미지

 Tokyo Tyrant 의 자세항 사용법은 http://kr2.php.net/manual/en/class.tokyotyrant.php 참고
크리에이티브 커먼즈 라이센스
Creative Commons License
블로그코리아에 블UP하기   믹시' 믹시
Posted by 금룡이

Leave your greetings.

  1. 네이버갓워즈(으니)

    아...다 영어에요...어려워요 ㅠㅠ
    금룡님~ 네이트 저번 주말같은 문제 생겨서 네이트 유저들네이버에 와서 금룡님 찾아요 ㅋ

    2011/01/25 05:28 [ Permalink : Modify/Delete : Reply ]
  2. 도크

    php, 자바스크립.. 극을 달리시는군요 ㅎㅎ

    2011/05/03 01:36 [ Permalink : Modify/Delete : Reply ]
    • 금룡이

      검색해서 찾아오셨군요;;;
      그냥 전 잉여일뿐인지라;;;

      2011/05/03 01:49 [ Permalink : Modify/Delete ]
  3. 푸근이

    아찌 =_= 저 irc주소 잃어버림 =_=...irc 좀 굽신 굽신...

    2011/06/27 12:43 [ Permalink : Modify/Delete : Reply ]

강좌&TIP/PHP2010/10/10 20:19
동시 접속이 많은 서비스를 MySQL로 운영하다 보니 Connection Fail되는 경우가 생각보다 많이 일어났습니다.

그래서 보통 이를 해결하기 위해 DB Pool 기법을 사용하지만 근본적인 해결방법은 되지 않는다고 하더군요..

결국 다른 대안을 찾던중 Key & Value DB를 알게 되었습니다.

최종 현재 서비스중인 프로그램을 완전 다 고치게 되었습니다.

설계완료된 구조도는 다음과 같습니다.

사용자 삽입 이미지


이 구조가 맞다고 할수는 없습니다.. 다만 이 구조를 따른다면 ( 물론 이 구조에 맞게끔 프로그래밍 하는 것도 중요하겠지요) 좀더 효율적인 서버 활용을 할 수 있지 않을까 합니다.

다른 의견 있으시면 덧글로 남겨주세요..
크리에이티브 커먼즈 라이센스
Creative Commons License
블로그코리아에 블UP하기   믹시' 믹시
Posted by 금룡이

Leave your greetings.

강좌&TIP/PHP2010/10/10 16:23

1. rudiments 설치 ( rudiments-0.32.tar.gz )
  rudiments 는 SQL Relay를 사용하기 위한 C 라이브러리 파일
 
  # cd /usr/local/src
  # wget
http://downloads.sourceforge.net/projec ··· rks-kr-2
  # tar zxvf rudiments-0.32.tar.gz
  # cd rudiments-0.32
  # ./configure
  # make
  # make install

 
  설치를 완료하면 /usr/local/firstworks 에 관련파일이 설치된다.
 
2. SQL Relay 설치 ( sqlrelay-0.39.4.tar.gz )
  SQL Relay를 Dadabase Pool 로서 Database Connection을 효율적으로 관리 할 수 있게 해줍니다.
  여담이지만 최신 sqlrelay 0.41 설치하였는데 listener가 정상적으로 동작하지 않는 문제가 있었습니다.
  구글링을 해보니 같은 문제를 가진 사람들이 여렀있었는데 0.39.4 버전에서는 그런 문제가 없다고 해서 설치해보니 정상 동작 하네요.
 
  # cd /usr/local/src
  # wget
http://downloads.sourceforge.net/projec ··· rks-kr-2
  # tar zxvf sqlrelay-0.39.4.tar.gz
  # cd sqlrelay-0.39.4
  # ./configure --enable-small-code --enable-mysql-rpath --enable-php-rpath --with-php-ext-dir=[PHP 확장 모듈 DIR]

  SQL Relay를 설치하면 php module 인 sql_relay.so 파일이 생성됩니다. 저같은 경우는 /usr/local/php/extensions 에 설치하였습니다.

  # make
  # make install

  완료후 /usr/loca/firstworks 에 설치 됩니다.
 
  # cd /usr/local/firstworks/etc
 
  SQL Relay 접속 환경 설정을 위해 다음과 같이 설정 파일을 만듭니다.
  # vi sqlrelay.conf

#############################################################################################
<!DOCTYPE instances SYSTEM "sqlrelay.dtd">
<instances>
  <!-- Regular SQL Relay Instance -->
  <instance id="[SQL Relay 고유 ID]" port="9000"
    dbase="[접속 DB : mysql]" connections="[최초 커넥션 수 : 3]" maxconnections="[최대 커넥션 수 : 15]" maxqueuelength="0"
    growby="1" ttl="60" endofsession="commit" sessiontimeout="600"
    runasuser="root" runasgroup="root" cursors="5" authtier="listener"
    handoff="pass" deniedips="" allowedips="" debug="none"
    maxquerysize="65536" maxstringbindvaluelength="4000"
    maxlobbindvaluelength="71680" idleclienttimeout="-1" maxlisteners="-1"
    listenertimeout="0" reloginatstart="false">
    <users>
      <user user="[SQL Relay 접속 ID]" password="[SQL Relay 접속 Password]"/>
    </users>
    <connections>
      <connection connectionid="[SQL Relay가 접속할 DB 고유 ID]"
        string="host=[DB HOST];user=[DB ID];password=[DB Password];db=[DB];"
        metric="1" behindloadbalancer="no"/>
    </connections>
  </instance>
</instances>
#############################################################################################
  :wq


  # vi ~/.bash_profile
  .bash_profile 에서 다음 부분을 추가합니다.

PATH=$PATH:$HOME/bin:/usr/local/firstworks/bin


  # source ~/.bash_profile
  수정한 .bash_profile을 적용합니다.
 
  이제 SQL Relay를 실행해서 정상적으로 동작하는지 확인합니다.
  # sqlr-start -id [SQL Relay 고유 ID]

#############################################################################################
sqlr-start -id [SQL Relay 고유 ID] 

Starting listener:
  sqlr-listener -id [SQL Relay 고유 ID] -config /usr/local/firstworks/etc/sqlrelay.conf

Starting 10 connections to godwars.relay :
  sqlr-connection-mysql -id [SQL Relay 고유 ID] -connectionid [SQL Relay가 접속할 DB 고유 ID] -config /usr/local/firstworks/etc/sqlrelay.conf
  sqlr-connection-mysql -id [SQL Relay 고유 ID] -connectionid [SQL Relay가 접속할 DB 고유 ID] -config /usr/local/firstworks/etc/sqlrelay.conf
  sqlr-connection-mysql -id [SQL Relay 고유 ID] -connectionid [SQL Relay가 접속할 DB 고유 ID] -config /usr/local/firstworks/etc/sqlrelay.conf

Starting scaler:
  sqlr-scaler  -id [SQL Relay 고유 ID] -config /usr/local/firstworks/etc/sqlrelay.conf

Starting cache manager:
  sqlr-cachemanager
Warning: using default id.

Thanks to MP3.com for sponsoring:
 Clustered/Replicated database support.
 Perl API.
Thanks to FeedLounge for sponsoring:
 Query routing and filtering.
#############################################################################################


  # netstat -anp | grep LISTEN

#############################################################################################
tcp        0      0 0.0.0.0:9000                0.0.0.0:*                   LISTEN      25512/sqlr-listener
#############################################################################################

  포트가 정상적으로 열려있는지도 확인합니다.

  이제 Apache 를 재시작 해줍니다.
 
# service httpd restart

#############################################################################################
<?
  phpinfo();
?>
#############################################################################################



  PHP INFO 에서 'Additional Modules'에 'sql_relay'이 추가 되어 있는지 확인합니다.

#############################################################################################
<?php
//dl("sql_relay.so");
$con = sqlrcon_alloc("localhost", 9000, "", "[SQL Relay 접속 ID]", "[SQL Relay 접속 Password]", 0, 1);
$cur = sqlrcur_alloc($con);

if(!sqlrcur_sendQuery($cur, "select * from [DB Table]")) {
        echo sqlrcur_errorMessage($cur);
        echo "\n";
}
sqlrcon_endSession($con);
for($row=0; $row<sqlrcur_rowCount($cur); $row++) {
        for($col=0; $col<sqlrcur_colCount($cur); $col++) {
                echo sqlrcur_getField($cur,$row,$col);
                echo ",";
        }
        echo "\n";
}
sqlrcur_free($cur);
sqlrcon_free($con);
?>
#############################################################################################


 
  웹에서도 정상적으로 결과가 나온다면 SQL Relay가 정상적으로 설치 및 작동되는것입니다.
 

크리에이티브 커먼즈 라이센스
Creative Commons License
블로그코리아에 블UP하기   믹시' 믹시
Posted by 금룡이

Leave your greetings.

  1. 저도 죽는 현상이 일어 납니다. 셋팅 문제인거 같은데, 어디가 문제 인지 모르겠네요.

    2010/11/15 21:36 [ Permalink : Modify/Delete : Reply ]
  2. sqlrelay.conf 파일에서 instance 설정시 addresses="0.0.0.0" 으로 설정 추가해보시길 바랍니다.
    전 이렇게 해결했습니다.

    2010/11/15 21:42 [ Permalink : Modify/Delete : Reply ]