웹마스터 팁

최근 경합 처리를 해야하는 업무가 있어 이를 해결한 방법 공유드리겠습니다.

(참조 자료)

1. http://wordpressxe.tistory.com/8

2. https://github.com/arvenil/ninja-mutex

 

(유의사항)

기존 운영되는 서버에 설치 시 세션 관련 문제가 발생할 수 있으니 설치 시 유의해 주세요.

ex) phpMyAdmin 접속 안될 수 있음. (하기 방식으로 phpMyAdmin 접속 해소 가능)

-------------------------------------------

config.inc.php 최상단 하기 문구 삽입

ini_set('session.save_path', '');

ini_set('session.save_handler', 'files');

-------------------------------------------

기 운영되고 있는 서버에 설치보다는 별도 경합이 많이 발생하는 프로세스 처리 서버에 설치 시도하여 충분한 테스트 및 검증 후 도입하세요.

 

1. Memcached 설치

- 먼저 Memcached를 설치하기전 libevent를 설치 합니다. (libvirt를 설치할때 의존성 패키지들도 같이 설치 됩니다.)

# yum install libvirt

 

- Memcached 설치

# yum install memcached

 

- Memcached PHP 확장 모듈 설치 (보통 위 설치하면 아래 두개는 이미 설치되었다고 나옴)

# yum install php php-pecl-memcache <-memcache용 

# yum install php php-pecl-memcached <-memcached용  

 

- Memcached 설정 (보통 기본값으로 아래 내용이 작성되어 있음)

# vi /etc/sysconfig/memcached

-----------------------

PORT="11211"

USER="memcached"

MAXCONN="1024"

CACHESIZE="64"

OPTIONS=""

-----------------------

 

- 재부팅시 자동시작 설정

# chkconfig memcached on

 

- Memcached 시작

# service memcached start

 

- Memcached실행 및 작동 확인

# echo stats | nc localhost 11211

 

- php.ini 파일 변경

# vi /etc/php.ini

-------------------------------

[Session]

session.save_handler = files 

...

session.save_path = "/var/lib/php/session"

-------------------------------

이부분을 

-------------------------------

[Session]

session.save_handler = memcached

...

session.save_path = "127.0.0.1:11211"

-------------------------------

이렇게 변경해 줍니다.

 

 

 

- 아파치 재시작 

* 웹서버를 재시작 해줘야 설정값이 적용 됩니다.

# service httpd restart

 

 

2. 닌자 뮤텍스 모듈 설치 (아래 Installation 참고)

https://github.com/arvenil/ninja-mutex

 

* 유의사항1 : root 계정으로 하면 안됨. 일반 사용자 계정으로 해야 함.

* 유의사항2 : 설치 시 Composer 부분 두 문구만 실행하면됨. Running tests, Something doesn't work 는 안해도 됨 

 

Usage 부분의 Mutex 로 테스트 해보면 됨.

 

3. 테스트

test.php 를 생성하여 하기 입력.

<?php

require '../libs/ninja-mutex/vendor/autoload.php';

 

use NinjaMutex\Lock\MemcacheLock;

use NinjaMutex\Mutex;

 

$memcache = new Memcache();

$memcache->connect('127.0.0.1', 11211);

$lock = new MemcacheLock($memcache);

$mutex = new Mutex('very-critical-stuff', $lock);

if ($mutex->acquireLock(10000)) {

    // Do some very critical stuff

    sleep(10);

 

    // and release lock after you finish

    $mutex->releaseLock();

} else {

    throw new Exception('Unable to gain lock!');

}

?>

 
* 부연 설명1 : 빨간색 부분의 10000 은 경합 대기 시간으로 10초 동안 락을 얻지 못하면 예외 발생하여 프로그램 중단시키게 됩니다.
* 부연 설명2 : 빨간색 부분의 sleep(10); 은 테스트 목적으로 10초 슬립합니다. 터미널1에서 php test.php 를 실행 후 터미널2에서 php test.php 를 실행하게 되면 뮤텍스 락이 정상 동작하는 것을 확인할 수 있습니다.
* 부연 설명3 : 파란색 부분 very-critical-stuff 은 뮤텍스의 키 설정으로 뮤텍스 락을 설정할 그룹군을 설정할 수 있습니다. 프로그램 전체에 대해서 뮤텍스 락을 설정하는 것은 비효율적인데 이 키를 잘 활용하면 뮤텍스 락 그룹군 설정하여 성능적으로 효율을 높일 수 있습니다.
제목 글쓴이 날짜
(회원가입) 닉네임 필요없이 이름만 입력 받으려면 [16] Simulz 2007.08.22
rewrite mod 설정, 해지 [1] 아름드리479 2007.08.22
설치환경을 갖추어도 설치시 문제 [1] 하얀후니 2007.08.22
로고 위치 변경하기 [4] 김영훈715 2007.08.21
홈페이지 주소 고정시키기 [12] file :에반: 2007.08.21
zbxe 일주일 사용기 및 팁 [1] 팔공산 2007.08.21
layout skin 제작시 info.xml도 잘 보세요 [1] 바람처럼.. 2007.08.21
페이지 수정시 메뉴들 가지런히 놓이게 하기 [3] 팔공산 2007.08.21
(수정) ZBXE 설치/로그인 등이 안될 때 시도해보세요. (MySQL DB) 핑크플로이드 2007.08.20
OpenID 적용 [6] file 맑은하늘75 2007.08.20
게시판에 나타나는 이름을 실명으로 나타내자! [5] 박영주964 2007.08.19
각 메뉴 옆에 게시물 갯수 표시하기 [6] coolsushi 2007.08.19
본문 하단에 (애드센스)광고 넣기 [2] roresy 2007.08.19
한글 경로가 404 에러로 뜨는 경우 처리방법 [2] 베니 2007.08.18
404 페이지 못찾음으로 나오는 문제 수정 [9] 화니군 2007.08.18
리눅스에서 제로보드 xe를 위한 환경 구축하기 [6] 써니a 2007.08.18
사이트접속시 제로보드XE폴더로 이동되게 하는 쉬운방법 [8] 부찬™ 2007.08.17
위지웍 에디터 웹폰트 사용하기 [6] 최지연 2007.08.17
서브 메뉴 배경색 바꾸기 [4] file Chang-Jo(창조) 2007.08.17
4차 서브메뉴 사용하기!! [4] [1] file 럭키587 2007.08.17