memcached란? 메모리를 사용해 캐시서비스를 제공해주는 데몬입니다.
무료로 사용할수 있는 오픈 소스이며, 분산 메모리 캐싱 시스템입니다.
동적 웹 어플리케이션의 속도개선을 위해 사용하기도 하며, DB나 API 호출 또는 페이지 렌더링 등으로부터 받아오는 결과 데이터를 작은 단위의 key-value 형태로 메모리에 저장하는 방식입니다.
memcached는 필요량보다 많은 메모리를 가졌을 때, 시스템으로부터 메모리를 사용하고 필요로하는 메모리가 부족한 경우에 이를 더 쉽게 다져다 사용할 수 있도록 만들어 줍니다.
TCP 스펙상 접속을 끊은 후 TIME_WAIT 가 발생할 수 있다.TIME_WAIT 의 개수는 netstat(1M)을 사용해 확인 가능하다. 예를 들어 netstat -na | grep TIME_WAIT | wc -l명령으로 시스템에 현재 몇개의 TIME_WAIT 가 있는지 확인해볼 수 있습니다.
TIME_WAIT 가 발생하는 기간은 30 ~ 240 초로 설정할 수 있는데, 대부분의 운영체제에서는 240초가 기본값 입니다. 하지만 이 값은 memcached 를 운용하는 환경에서는 너무 길고, 트래픽이 많은 곳에서 memcached 와 빈번하게 통신하다 보면, TIME_WAIT가 수만개 이상 발생하는 경우가 있고, 이로인해 memcached 에 접속이 안되는 현상이 발생하는 경우가 있기 때문이다. memcached 를 실행한 서버에서 30초로 세팅합니다. 참고로 일반적인 상황에서는 최소 60초 이상으로 설정할 것을 권장합니다. 해당설정은 /etc/sysctl.conf 파일에서 net.ipv4.tcp_fin_timeout=30 을 입력하여 적용할수 있습니다.
– memcached를 사용하기 위해서 필수 라이브러리를 설치해야 합니다.
– 이벤트 발생시 콜백 함수를 쉽게 호출할 수 있도록 도와주는 라이브러리 라고 합니다.
# yum install -y libevent libevent-devel |
– memcached를 다운받아 설치를 진행 합니다.
# wget storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/memcached/memcached-1.4.15.tar.gz # tar zxvf memcached-1.4.15.tar.gz # cd memcached-1.4.15 # ./configure –prefix=/usr/local/memcached # yum install memcached → memcached yum 설치방법이며, 해당 명령어로 간단하게 설치가능 또한 yum 설치하였을때는 설정값이 /etc/sysconfig/memcached로 들어가며, 옵션설정은 소스설치와 같습니다. |
– 데몬을 실행하기 전에 서비스를 할 포트 번호와, 데몬에서 사용할 최대 메모리 양을 정해줍니다.
– memcached의 기본 포트는 11211이며, 사용할 메모리는 64MB이 기본값 입니다.
– 아래 명령어는 root 의 권한을 사용하고, 64MB메모리를 사용하며, 127.0.0.1(외부 접속 불가)하는 데몬을 띄운상태
/usr/local/memcached/bin/memcached -u root -d -l 127.0.0.1 -p 11211 |
– memcached는 별도의 종료 명령을 제공하지 않습니다. 그렇기 때문에 해당 프로세스를 kill 하여 종료합니다.
[root@les421-1335 les]# netstat -nltp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:1990 0.0.0.0:* LISTEN 5699/sshd tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 11073/mysqld tcp 0 0 127.0.0.1:11211 0.0.0.0:* LISTEN 26970/memcached tcp 0 0 :::1990 :::* LISTEN 5699/sshd tcp 0 0 :::80 :::* LISTEN 5881/httpd # kill -9 26970 |
– memcached는 소스 설치시 설정파일이 따로 존재하지 않습니다.
– memcached를 실행시킬때 옵션 값을 주고 실행을 시키며, 보통 아래의 옵션으로 실행시켜 default 값으로 사용
– /usr/local/memcached/bin/memcached -u root -d -l 127.0.0.1 -p 11211
-l <addr>: 바인드할 주소 -p <num>: TCP 포트 번호 (기본값: 11211) -U <num>: UDP 포트 번호 (기본값: 11211, 0 인경우 사용안함) -s <file>: UNIX 소켓 경로 (네트워크 지원 안함) -a <mask>: UNIX 소켓 마스크 (기본값: 700) -d: 데몬으로 실행 -u <username>: 서비스 사용자 이름 -m <num>: 최대 메모리(MB단위, 기본값: 64) -M: 데이터 저장시 메모리가 부족할 경우 오류를 반환(기본값은 오래된 데이터를 삭제) -c <num>: 최대 접속 개수 (기본값: 1024) -P <file>: PID 파일 저장 위치. -d 옵션 사용시 사용 -f <factor>: 증가 팩터값. (기본값: 1.25) -n <bytes>: 키+값+플래그를 저장할 최소 단위(기본값: 48) -L: large memory pages 사용(가능한경우) -t <num>: 사용할 쓰레드 개수 (기본값: 4) -b: 백로그 큐 제한 (backlog queue limit를 지정 , 기본값: 1024) -V: 버전 출력 후 종료 -v: 로그 보임 -vv: 자세한 로그 보임(slab 할당상태 보임) -vvv: 매우 자세한 로그 보임 -h: 도움말 -i: 라이선스 보임 -I: 각각의 SLAB 페이지의 크기 조정. 기본값은 1m이며, 1k ~ 128m 범위에서 지정해줄 수 있다. -F: flush_all 명령 비활성화 |
아래 명령어로 현재 memcached의 상태를 확인할 수 있습니다.
[root@les421-1335 les]# telnet localhost 11211
Trying 127.0.0.1…
Connected to localhost.
Escape character is ‘^]’.
stats
STAT pid 26970
STAT uptime 3391
STAT time 1499456722
STAT version 1.4.15
STAT libevent 1.4.13-stable
STAT pointer_size 64
STAT rusage_user 0.063990
STAT rusage_system 0.082987
STAT curr_connections 5
STAT total_connections 6
STAT connection_structures 6
STAT reserved_fds 20
STAT cmd_get 0
STAT cmd_set 0
STAT cmd_flush 0
STAT cmd_touch 0
STAT get_hits 0
STAT get_misses 0
STAT delete_misses 0
STAT delete_hits 0
STAT incr_misses 0
STAT incr_hits 0
STAT decr_misses 0
STAT decr_hits 0
STAT cas_misses 0
STAT cas_hits 0
STAT cas_badval 0
STAT touch_hits 0
STAT touch_misses 0
STAT auth_cmds 0
STAT auth_errors 0
STAT bytes_read 7
STAT bytes_written 0
STAT limit_maxbytes 67108864
STAT accepting_conns 1
STAT listen_disabled_num 0
STAT threads 4
STAT conn_yields 0
STAT hash_power_level 16
STAT hash_bytes 524288
STAT hash_is_expanding 0
STAT bytes 0
STAT curr_items 0
STAT total_items 0
STAT expired_unfetched 0
STAT evicted_unfetched 0
STAT evictions 0
STAT reclaimed 0
END
– php에서 memcache 기능을 사용하기 위해 모듈을 설치 합니다.
# wget pecl.php.net/get/memcache-2.2.5.tgz # tar zxvf memcache-2.2.5.tgz # cd memcache-2.2.5 # /usr/local/php/bin/phpize # ./configure –with-php-config=/usr/local/php/bin/php-config # make # make install # cd /usr/local/php/lib/php/extensions/no-debug-zts-20090626/ # vi /usr/local/apache/conf/php.ini → 해당파일을 열어 아래내용 추가 [memcache] extension_dir=”/usr/local/php/lib/php/extensions/no-debug-zts-20090626/” extension=memcache.so session.save_handler=memcache session.save_path=”127.0.0.1:11211″ → 혹시라도 php소스코드에서 session.save_path 부분이 있을경우 소스코드에서 주석처리를 해줘야 해당 기능이 정상작동합니다. |
– php의 세션 핸들러로 memcached를 설정할 수 있으며, 아래의 코딩으로 출력 테스트가 가능합니다.
– 웹루트에 위의 소스코드를 작성하여 웹에서 접근한 화면 입니다. – 아래 화면처럼 나오면 정상적으로 연동이 된 것입니다. |
Memcached 운용시 시스템의 메모리 상황을 모니터링하여, 스왑과 락이 일어나지 않도록 주의해야 합니다. Memcached는 스왑이 일어나지 않을 정도로 메모리가 여유있다는 가정하에 개발되었으며, 메모리가 부족해 스왑이 일어나 메모리에 저장했던 컨텐츠가 스왑 디스크에 저장될경우, 속도가 심각하게 느려지게 되기 떄문에 메모리가 부족할 경우 해당기능을 사용하지 않기를 바랍니다. |