Tag Archives: linux

[Linux] sar를 이용하여 서버의 현재 부하상태를 알아보기

사용자 삽입 이미지
서버가 부하가 가중되면 가장 먼저 알아내야 하는것이 원인을 파악하는 것일 겁니다. 하지만 그러기 어려운 상황이라면 가장 먼저 파악해야 하는것이 CPU에서 오는 부하인지 I/O에서 오는 부하인지를 알아내야 할 것입니다.

우선 기본적으로 부하상태(Load Average)를 알아내기 위해 top, w, uptime의 명령어를 활용할 수 있습니다.

top

top - 11:46:06 up 77 days,  1:16,  1 user,  load average: 0.06, 0.15, 0.11
Tasks:  87 total,   1 running,  86 sleeping,   0 stopped,   0 zombie
Cpu(s):  6.5%us,  0.5%sy,  0.0%ni, 92.7%id,  0.0%wa,  0.0%hi,  0.3%si,  0.0%st
Mem:   4033528k total,  1571260k used,  2462268k free,    26472k buffers
Swap:  3911816k total,      128k used,  3911688k free,   627956k cached

w

11:47:39 up 77 days,  1:17,  1 user,  load average: 0.08, 0.14, 0.11
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    121.133.79.177   11:13    0.00s  0.01s  0.00s w

uptime

11:47:56 up 77 days,  1:18,  1 user,  load average: 0.06, 0.13, 0.10

top > w > uptime 순으로 보여지는 정보의 양이 적어지는군요. top의 경우에는 실행중인 프로세스의 목록도 표시됩니다. 오늘 언급하려는것은 sar(System Activity Reporter)입니다. 매우 간단하게 부하를 분류하여 보여줍니다.

$ sar
Linux 2.6.18-238.19.1.el5 (Theeye)        09/29/11

16:20:10 CPU %user %nice %system %iowait %steal %idle
16:30:10 all 17.81 0.84  2.75    68.50   0.00   10.10
16:40:23 all 16.75 0.00  3.26    69.68   0.00   10.30
Average: all 17.28 0.41  3.01    69.10   0.00   10.20

위의 시스템은 IO대기가 차지하는 비율이 70%에 육박하는 상태입니다. IO문제가 분명하군요. 보통 DB 서버들이 부하가 걸릴때 위와 같은 모습을 보입니다. 이 경우 메모리를 증설하면 디스크에 읽고 써야 하는 데이터를 그만큼 메모리에 올릴 수 있어 디스크의 IO를 현저히 줄일 수 있습니다.

$ sar
Linux 2.6.18-238.19.1.el5 (Theeye)        09/29/11

14:30:01 CPU %user %nice %system %iowait %steal %idle
15:50:01 all 14.67 0.10  4.51    1.63    0.00   79.08
16:00:01 all 17.06 4.91  4.96    1.53    0.00   71.53
16:10:01 all 14.63 0.00  4.74    1.21    0.00   79.41
Average: all 13.04 2.18  3.98    8.36    0.00   72.45

메모리를 8G에서 16G로 증설한 후의 모습입니다. 정말 신기할 정도로 IO가 줄었네요. sar에서 자주 쓰이는 옵션으로는 다음과 같은 것이 있지 않을까 생각합니다.

-u : CPU 사용율 확인
-P : 특정 CPU의 사용율 확인 (sar -P 0)
-q : Load Average 확인
-r : 메모리 사용 현황 확인

sar는 sysstat 패키지에 포함되어있습니다. 다음과 같이 설치 가능합니다.

$ yum install sysstat

[Linux/SSL] 리눅스 서버에 Apache 2 설치 및 SSL 설정하기(mod_ssl, openssl)

세상에서 가장 많이 사용하고 있다는 아파치 웹서버에 SSL 설정을 하여 결과적으로 HTTPS를 사용할 수 있게 하는 방법에 대해 간략하게 정리해 보겠습니다. 아래는 개인적으로 자체 키를 생성해서 사용하는 방법을 적어볼 것이며 이것은 브라우저에서 접속시에 인증되지 않은 접속으로 경고가 뜨게 됩니다. 공인 인증 기관에서 키를 발급받을 경우 키 생성 부분만 발급 기관에서 요구하는 방법대로 수행을 하시면 됩니다.

1. Apache 웹서버 다운로드 및 설치

http://httpd.apache.org/ 에 방문하여 최신버전의 웹서버를 다운받습니다. 2.2.17 버전을 예로 들어 설명해 보겠습니다. 다운받은 파일을 적절한 위치로 이동후에 다음과 같은 명령어로 SSL을 활성화 시켜줍니다.

$ ./configure --prefix=/usr/local/apache2 --enable-ssl --enable-so
$ make
$ make install

위의 설명에서는 아파치 웹서버를 기본적으로 /usr/local/apache2 위치에 설치하는것으로 하였습니다.

2. SSL 설정하기

위와 같이 설치할 경우 아파치 웹서버의 설정 파일인 httpd.conf 파일은 /usr/local/apache2/conf 에 위치하게 됩니다. /usr/local/apache2/conf/httpd.conf 설정 파일을 열어 httpd-ssl.conf 추가 설정의 주석을 해제해 줍니다.

$ vi /usr/local/apache2/conf/httpd.conf

Include conf/extra/httpd-ssl.conf

3. server.crt 및 server.key 생성하기

우선 openssl을 이용하여 server.key를 생성합니다. 계정의 루트 디렉토리에서 작업을 하도록 하겠습니다.

$ cd ~
$ openssl genrsa -des3 -out server.key 1024

위의 명령을 수행할 경우 암호를 물어보게 됩니다. 여기서 설정하는 암호를 잘 기억해 두셔야 합니다. 나중에 아파치 실행시에 물어봅니다. 여기서 암호를 지정하지 않을경우 아파치 실행시에 암호를 물어오지 않습니다.

이번에는 위에서 생성한 server.key파일을 이용하여 인증요청파일을 생성합니다.

$ openssl req -new -key server.key -out server.csr

마지막으로 위에서 생성한 server.key 및 server.csr파일을 이용하여 자체적으로 서명을 한 server.crt파일을 생성합니다.

$ openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

좀더 자세한 정보를 원할 경우 [다음]을 참고하도록 합시다.

이제 만들어진 인증키 파일을 아파치 설정 디렉토리로 옮기도록 합니다. 이 디렉토리는 적당한 위치를 사용하시면 됩니다.

$ cd ~
$ cp server.key /usr/local/apache2/conf/
$ cp server.crt /usr/local/apache2/conf/

4. SSL이 적용된 Apache 웹서버 구동하기

이제 설정이 끝난 아파치를 구동하도록 합시다.

$ /usr/local/apache2/bin/apachectl start

실행시에 위의 server.key를 생성할때 물어보았던 개인키 암호를 물어보게 되는데 입력해 주도록 합시다.

Apache/2.2.17 mod_ssl/2.2.17 (Pass Phrase Dialog)
Some of your private key files are encrypted for security reasons.
In order to read them you have to provide the pass phrases.

Server www.example.com:443 (RSA)
Enter pass phrase:

OK: Pass Phrase Dialog successful.

5. 가상호스트(VirtualHost) 적용하기

필요한 경우 하나의 서버에 다수의 가상호스트를 적용해야 할 수도 있습니다. 이경우 다음과 같은 가상 호스트 설정을 사용하시면 됩니다. 물론 다수의 키를 사용해도 되고 중복 사용해도 별 문제는 없습니다.

<VirtualHost *:443>
    ServerAdmin eye@example.com
    DocumentRoot /usr/local/apache2/htdocs
    ServerName example.com:443

    ...

    SSLEngine on
    SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
    SSLCertificateFile "/usr/local/apache2/conf/server.crt"
    SSLCertificateKeyFile "/usr/local/apache2/conf/server.key"
</VirtualHost>

* CC 인증을 위한 키 생성

CC 인증을 받기 위해 SSL키 설정시 제약 사항이 추가되게 됩니다. 가령 다음과 같습니다.

  • 암호알고리즘으로 AES128 이상
  • 무결성알고리즘으로 SHA-2 (SHA256)
  • 키 알고리즘(RSA 1024이상)

이 경우 다음과 같이 키를 생성하시면 됩니다.

$ openssl genrsa -aes128 -out server.key 1024 
$ openssl req -new -key server.key -out server.csr
$ openssl x509 -sha256 -req -days 365 -in server.csr -signkey server.key -out server.crt

참고 : http://www.thegeekstuff.com/2011/03/install-apache2-ssl/