카테고리 Archives: Server engineering

옵션 을 적용하여 마운트 ‘ㅅ’a

기존의 글에서 DISK 의 IO 성능을 올리기 위해 /etc/fstab 수정하는 법에 대해서 설명했다.

 

작은 웹서버 ( 사이트 10개 미만 정도) 는 fstab 을 수정하는것으로도 충분 하지만.

대량의 웹서버 에서는 계정용 디스크를 별도 로 붙여 사용을 한다.

문제는 계정용 디스크가 커질경우 linux 에서 일정 기간동안 disk 사용시간이 넘어가는경우 부팅할때 disk 검사를 한다.

물론 디스크 검사를 해주는것도 중요하지만

원하지 않는 스케쥴링에 포람된 디스크 검사 때문에 서비스를 늦게 살리는건 말이 되지 않는다.

 

때문에 대형 웹서버 의 경우(사이트 100개 이상 서비스용도) 웹 디스크를 별도로 마운트 해서 사용한다.

부팅을 시켜두고 커널이 올라온 뒤에 root로 로그인을 해서 마운트 를 하고 서비스를 시작하기는 매우 귀찬다 ‘ㅅ’a

 

그래서 /etc/rc.d/rc.local 이란곳에 미리 등록해서 윈도우의 “시작프로그램” 처럼 부팅 후

마운트를 자동으로 하도록 설정한다.

 

1. 먼저 /etc/fstab 에 아래와 같이 웹용 디스크를 주석처리를 한다.

 

2. 이후에 /etc/rc.d/rc.local  에 아래와 같이 추가 하여 주석을 읽어들여 마운트 하는 부분을 추가한다.

주의사항 ## 마운트 체크할 디바이스를 지정한다. ( / 가 들어갈경우 \/ 와 같이 특수문자 처리를 한다. )

 

3. 마운트 이후에 httpd 를 시작해야 겠다.

근데 httpd 는 chkconfig 로 부팅 후 실행할 데몬에 추가하지 못한다. 그래서 마판가지로 /etc/rc.d/rc.local  추가한다.

이때 서버가 갑자기 다운된 경우 httpd.pid 파일이 남아 start 명령이 들어가지 않을수 있다.

pid 파일이 있는 상태에서 apache 를 시작 하면 존재 하던 pid 파일을 자동으로 지운다는 점에서 착안

아파치를 두번 시작한다. ‘ㅅ’a

(물론 두번째 시작은 ps 목록을 체크하고 이미 잘  실행중일경우  재실행 안되도록 했다.)

 

xcache 설치

모든 컴퓨터의 병목현상은 IO가 주원인이다.

발전속도가 가장 더디고. cpu / gpu / ram 의 속도는 나날이 높아져 가지만 IO의 성능은 거의

제자리 이다.(용량만 늘고 있다. hdd -> ssd 의 진화는 혁명적이긴 했다.)

또한 쉽게 dirty 상태에 빠지는게 IO 이기 때문에 IO 튜닝은 서버의 전반적인 속도향상에 크게 기여한다.

 

APM 서버에서 IO사용을 비약적으로 줄이기 위해서는 캐슁을 하면 되겠다.

xcache , APC 혹은 php 5.5 이상 포함된 opcache 가 대안이라고 볼수 있는데 일반적으로 zend 와의 충돌 때문에

xcache 를 사용하는편이 좋다. APC 역시 충분히 좋았지만.

APC의 경우 메모리 사용량이 xcache 보다 높았다.

그리고 APC 의 경우 문제시 되는 웹프로그램 좀더 많았다.(cake, moodle, kims-board 등)

 

공식 홈페이지 http://xcache.lighttpd.net

1. 설치방법.

–with-php-config 는 php-config 파일의 위치를 지정한다  일반적어도 안넣어도 되는 옵션 ‘ㅅ’a 혹은 버전에 따라 위치 변경이 되어야 하겠다.

여기서 /usr/local 에 직접 설치를 한이유는 xcache 의 관리자 페이지인 Cacher 를 사용하시 위해서이다.

 

2. php.ini 설정추가.

추가 항목중 xcache.size, xcache.count 은 적절히 수정해 주어야 한다.

일반적으로 xcache.count 는 cpu 코어 갯수로 지정한다. xcache.size 는 캐셔 관리자에서 사용량을 체크하여 변경한다.

메모리는 일반적이면 32~64MB 정도면 충분하나 한개의 사이트를 위한 설정이 아니기 때문에 넉넉히 잡았다.

단하나의 사이트를 위해서라면 64M ~ 128M 으로 xcache.gc_interval, xcache.ttl 을 0으로 해서 쓰면 성능이 가장 좋겠다.

 

관리자 설정을 할때(xcache.admin.user, xcache.admin.pass) 패스워드 생성은 간단한 php 코드로 생성할 수 있다.

 

3. 그리고 마지막으로 웹에서 관리자 페이지 접속을 위해 httpd.conf 파일에 아래 코드를 추가 했다.

 

4. 트러블슈팅

1) xcache 는 apache prefork 에서만 동작한다.

 

2) xcache 모듈 로드후 정상적으로 로드가 되지 않는다면 ( 메세지 // xcache.so: cannot open shared object file: No such file or directory )

php.ini 에서 extension_dir=”./” 부분을 주석 처리하거나 php API 에 따른 디렉토리 를 지정해주면 된다.

php API 에 따른 익스텐션 디렉토리는 make install 를 하면 어디에 복사했는지 보여준다 ‘ㅅ’a

 

3) php 5.2 대버전은 php 컴파일시 버그로 NTS 모드로 설치가 되지 않으며 TS 모드로만 설치가 된다.

NTS모드가 아닐경우 php 5.2 에서 에러메세지 표현이 되지 않으나 설치 후 모듈로드를 했을때 아파치가

프로세스는 떠있어 도 웹서버 기능을 제대로 수행하지 못했다.

아래 링크 글로 php 5.2 의 NTS 모드 설치를 진행후 해야 한다.

http://www.enteroa.com/2014/09/24/php-5-2-17-nts모드로-설치

 

4) xcache 는 기본적으로 최신버전이 하위버전의 모든 것을 대응하도록 포함 되므로 최신버전을 쓰는게 좋겠다.

다만 예외사항으로 php 4 는 1.2.2 대의 버전을 써야 하며 extension=xcache.so 가 아닌 zend_extension=xcache.so 으로 불러와야 한다.

아울러서 zend optimizer 보다 먼저 모듈로드가 되어야 하니 주의 하자.

또한 구버전의 관리자 디렉토리는 htdocs 안에 캐셔가 아닌 admin 폴더로 제공된다. httpd.conf 를 아래와 같이 수정하자.

php4 용 xcache 는 파일변경 여부 체크가 존재 하지 않기 때문에 캐쉬된 데이터가 지워지는 시간 동안

웹에서 호출시 신규로 올린 부분의 갱신이 늦어질수도 있다.

(이말은 완성된 홈페이지 가속 용도로만 쓰라는 소리이다 =ㅅ=a 수정된 파일의 즉시반영이 안됨)

 

shellshock 취약점 패치

명령어 실행으로 테스트를 진행한다.

 

 

위와 같이 나온다면 shellshock 취약 하다고 나오면 update가 필요 하겠다 ‘ㅅ’a

 

 

설치 완료후 재 테스트를 하자 ‘ㅅ’a

 

 

CentOS 4 에서는 yum update가 안될것이다 ‘ㅅ’a (OS 버전 확인 ~]# cat /etc/redhat-release )

아래 오라클 사이트에서 배포하는걸 받아서 rpm 명령어로 설치한댜 ‘ㅅ’a
32비트

 

64비트

 

xtables-addons 설치 (GeoIP-iptables, CentOS6)

CENTOS 6 이상
=> xtables-addons 의 요구사항이 iptables 1.4.3 이상 커널-devel 2.6.32 이상임

설치된 리눅스 버전 확인을 하자.!

 

 

http://pkgs.repoforge.org/rpmforge-release 에서 CentOS 6 x64 비공식 Repository 를 추가한다.
위 사이트에서 최신 버전 및 맞는 버전을 찾아 아래의 명령어로 설치한다.

 

 

YUM 을 이용하여 필수 라이브러리를 설치하자 ‘ㅅ’a

GEOIP 도 설치하쟈.

 

그다음 적당한 곳에 xtables-addons 을 다운 받아 압축해제 하고 설치 진행을 한다.

 

그다음은 설치된 xtables 에서 사용할 GEOIP 데이터를 만들어야 한다.

xtables 맥스마인드에서 기본 제공하는 GeoIP.dat, GeoIPv6.dat 를 이용하지 못하므로 만들어 줘야 한다.

데이터 베이스 위치는 /usr/share/xt_geoip/LE ,  /usr/share/xt_geoip/BE 폴더 이다.

만드는 툴은 설치본에서 geoip 폴더안의 xt_geoip_build 스크립트를 이용한다.

 

만들때 문제가 있다. 각 csv 로 생성할때 GeoIPCountryWhois.csv 으로 만들면 v6 데이터가 안나온다 ‘ㅅ’a

GeoIPv6.csv로 만들면 v4 데이터가 안나온다 ‘ㅅ’a

그래서 아래와 같이 만들고 해당것을 옴기는 작업을 한다.

 

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

캄파일 트러블 슈팅.

1. 컴파일 해도 인식이 안되는 경우

위명령어로 링크가 깨진경우 – 이는 현재 설치된 kernel 과 kernel-devel 버전이 맞지 않을 경우 나올 수 있다.
맞추어 주도록 하자. 맞춘후에는 리부팅이 필요하다.

2. xtables-addons 를 configure 후에 오류 발생시.

이러한 에러가 발생했다면 아래 파일을 수정해야 한다.

이는 최초 커널에서 나오는 문제는 아니고 커널 업데이트를 한 경우 발생할 수 있다.
#define CONFIG_IP6_NF_IPTABLES_MODULE 1 부분을 찾아서 /* */ 으로 주석처리를 한뒤에 컴파일 한다.

Linux IO 튜닝

파일을 읽을때 리눅스는 access 타임을 write 를 한다.

때문에 파일을 읽을때 단순히 read 가 하는게 아니라 일부 write를 하고 read 를 한다.

아래와 같이 stat 명령어로 파일의 자세한 정보를 보면 확인할 수 있다.

 

이 access write 기능을 끔으로서 read 성능을 대폭으로 끌어올릴 수 있다. (약 2.5배 에서 3배)

바로 nodiratime 과 noatime 옵션 이다.

 

/etc/fstab 에서 아래와 같이 수정을 한다.

/etc/fstab 에 입력된 정보로 재부팅 하지 않고 적용하는 명령어는 다음과 같다.

 

dicard 옵션(저널링 off)는 이 게시물에서 설명.
http://www.enteroa.com/2014/09/24/Linux-에서-TRIM-활성화/

 

임의 마운트 시에는 아래와 같은 명령어로 마운트 한다.