웹마스터 팁
PHP 뮤텍스 락 설치법(memcached 활용)
2018.09.03 10:59
최근 경합 처리를 해야하는 업무가 있어 이를 해결한 방법 공유드리겠습니다.
(참조 자료)
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!');
}
?>
제목 | 글쓴이 | 날짜 |
---|---|---|
(회원가입) 닉네임 필요없이 이름만 입력 받으려면 [16] | Simulz | 2007.08.22 |
rewrite mod 설정, 해지 [1] | 아름드리479 | 2007.08.22 |
설치환경을 갖추어도 설치시 문제 [1] | 하얀후니 | 2007.08.22 |
로고 위치 변경하기 [4] | 김영훈715 | 2007.08.21 |
홈페이지 주소 고정시키기 [12] | :에반: | 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] | 맑은하늘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] | Chang-Jo(창조) | 2007.08.17 |
4차 서브메뉴 사용하기!! [4] [1] | 럭키587 | 2007.08.17 |
memcached 활용 방법은 인터럽트 발생 시 락 릴리즈가 안되는 문제가 있으니
본 방법보다는 아래 redis 활용 방법을 이용해 주세요.
https://www.xpressengine.com/tip/23275528