아무거나

SQLRelay 설치(커넥션풀링 라이브러리) 본문

PHP/PHP

SQLRelay 설치(커넥션풀링 라이브러리)

전봉근 2019. 4. 2. 14:30
반응형

[PHP] SQLRelay 설치(커넥션풀링 라이브러리) 

 

* 작업권한은 root

* 다운로드 사이트

  - rudiments : http://sourceforge.net/projects/rudiments/  // 1.0.5 사용했음

  - sqlrelay : http://sourceforge.net/projects/sqlrelay/   // 1.1.0 사용했음(여기에 rudiments까지 포함되어 있음)

 

 

1. rudiments 설치(sqlrelay 를 사용하기 위한 C 라이브러리라고 생각하면 된다.)

   - tar xvfz rudiments-1.0.5.tar.gz

   - cd rudiments-1.0.5

   - ./configure

   - make

   - make install

   - /usr/local/firstworks 에 설치됨..

 

2. sqlrelay 설치 

   - tar xvfz sqlrelay-1.1.0.tar.gz 

   - cd sqlrelay-1.1.0 

   - ./configure --enable-small-code --enable-mysql-rpath --enable-php-rpath --with-php-ext-dir=/usr/lib/php5/20121212

   - make

   - make install 

   - configure 중 --with-php-ext-dir 옵션이 필요한 이유는 sqlrelay 가 PHP의 확장모듈 형태로 설치하기 때문이다. 

   - make install 후 php확장 모듈 dir 를 살펴보면 sql_relay.so 라는 모듈이 만들어진걸 확인할수 있다 

 

3. sqlrelay 설정 및 시작 

   - cd /usr/local/firstworks/ 

   - vi etc/sqlrelay.conf 저장

===================================================================================================== 

<?xml version="1.0"?> 

<!DOCTYPE instances SYSTEM "sqlrelay.dtd"> 

<instances> 

 

<instance id="mysqlrelay" port="9000" socket="/tmp/mysql_relay.socket" dbase="mysql" connections="3" maxconnections="5" maxqueuelength="0" growby="1" ttl="60" endofsession="commit" sessiontimeout="600" runasuser="nobody" runasgroup="nobody" cursors="5" authtier="listener" handoff="pass"> 

<users> 

<user user="mysqlrelay" password="mysqlrelaypass"/> 

</users> 

<connections> 

<connection connectionid="mysqlrelay" string="host:localhost;user=MysqlUser;password=MysqlUserPass;db=MysqlDB;port=3306;socket=/home/tmp/mysql.sock" metric="1"/> 

</connections> 

</instance> 

 

</instances> 

===================================================================================================== 

   - sqlrelay.conf 설정화일 설명 

instance id="mysqlrelay" 는 mysqlrelay 라는 id 로 sqlrelay로 접속하는것을 의미한다. 

port="9000" 은 mysqlrelay 가 실행되는 port 이며 php에서 접속시에 이용된다. 

socket="/tmp/mysql_relay.socket" 은 sqlrelay 의 socket 위치이다. 

dbase="mysql" 는 DB명을 의미하며 사용할수 있는 DB는 sqlrelay.dtd 에 정의되어 있다 

connections="3" 은 초기 연결갯수를 의미하며 sqlrelay 를 실행시키면 프로세서가 3개가 실행된다는걸의미 

maxconnections="5" 는 최대 연결갯수를 의미한다. 

user="mysqlrelay" 는 php가 sqlrelay 에접속할 userid를 의미한다. 

password="mysqlrelaypass"는 php가 sqlrelay 에 접속할 userid 의 패스워드를 의미한다. 

 

string="host:localhost;user=MysqlUser;password=MysqlUserPass;db=MysqlDB;port=3306;socket=/home/tmp/mysql.sock" 

string 부분은 sqlrelay 가 mysql 에 접속하는 환경을 설정하는곳이다. 

개인별로 환경이 다르기때문에 이부분에 주의 하기 바란다. 

처음에 어려웠던 부분이 instance 와 connection 의 차이를 몰라 한참을 1시간동안 삽질을 했었다. 

알고 보면 아무것도 아니겠지만 ... TT 

sqlrelay.conf 화일에 mysql 접속관련 패스가 있으므로 chmod 로 권한을 조정하는걸 잊지말자.. 

 

위에서언급한 것 외에도 여러가지가 있지만 정확히 무엇을 의미하는지는 아직 잘모르겠다 

하단에 언급한 html 문서를 보면서 앞으로 참고를 해야할 부분이다. 

   - vi ~/.bash_profile ( /etc/profile로 수정했음 )

     PATH=$PATH:$HOME/bin:/usr/local/firstworks/bin 를 이와같이 수정한다. 

   - php.ini 화일 하단에 "extension = sql_relay.so" 를 추가한후 저장한다 ( /etc/php5/apache2/php.ini )

   - sqlr-start -id mysqlrelay <== mysqlrelay instance id 를 실행시킨다. 참고로 instance id는 설정화일에서 

     여러개를 만들수 있다. sqlrely를 죽이려면 # sqlr-stop -id mysqlrelay 하면된다. # sqlr-stop 을 실행하면 

     여러개의 instance id 를 모두 죽이는 것이다. ( PATH변수를 설정안할시 /usr/local/firstworks/bin 경로에서 실행 )

   - /usr/local/apache/bin/apachectl restart <== 아파치 재시작 

     이제 환경은 모두 구축된것이다. 

 

4. 테스트 코드

//dl("sql_relay.so"); 

$con = sqlrcon_alloc("localhost", 9000, "", "mysqlrelay", "mysqlrelaypass", 0, 1); 

$cur = sqlrcur_alloc($con); 

 

if(!sqlrcur_sendQuery($cur, "select * from test_t1")) { 

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); 

 

5. 다른예제

설치 # 

#rudiments 

cd rudiments-0.26.3 

./configure 

make 

make install 

 

#sqlrelay 

./configure --help 

 

./configure --enable-small-code --enable-mysql-rpath --enable-php-rpath

make 

make install 

 

    * /usr/local/firstworks/etc/sqlrelay.conf 

    * metric => 접속횟수 : 2를 지정하면 2번의 연결을 한후 다음서버에 연결 연결을 넘긴다. 

    * connections 은 서버댓수의 배수를 지정해야 한다. 꼭 배수를 지정하지 않아도 되지만, 그래도 서버댓수보다 많아야 한다. 

 

<?xml version="1.0"?> 

<!DOCTYPE instances SYSTEM "sqlrelay.dtd"> 

 

<instances> 

 

<instance id="cluster" port="9000" socket="/tmp/mysqlcluster.socket" dbase="mysql" connections="2" maxconnections="60" maxqueuelength="65535" growby="1" ttl="60" endofsession="commit" sessiontimeout="600" runasuser="nobody" runasgroup="nobody" cursors="5" authtier="listener" handoff="pass" deniedips="" allowedips="" debug="none"> 

<users> 

<user user="cluster" password="cluster"/> 

</users> 

<connections> 

<connection connectionid="db2" string="user=cluster;password=cluster;db=test;host=xxx.xxx.xxx.xxx" metric="1"/> 

<connection connectionid="db1" string="user=xxx;password=xxx;db=test;host=localhost" metric="1"/> 

</connections> 

</instance> 

 

</instances> 

 

# start 

/usr/bin/firstworks/bin/sqlr-start -id cluster 

# stop 

/usr/bin/firstworks/bin/sqlr-stop cluster 

반응형

'PHP > PHP' 카테고리의 다른 글

클로저(clouser)  (1) 2019.04.03
PHP7 기준 빈 객체 생성 방법  (0) 2019.04.02
trait  (0) 2019.04.02
php curl 옵션  (0) 2019.04.01
exif 모듈 사용(회전된 이미지 복구 방법)  (0) 2019.04.01
Comments