서버의 잦은 다운시 해결책은 뭘까요?
저희 소프트웨어를 사용중인 고객사 중 한 곳에서 한달에 1~2번 꼴로 서버가 먹통이 되어버리는데 해결책이 안나와 이렇게 자문을 구하고자 글을 올리게 되었습니다.
서버 다운 시기)
시스템 사용율이 거의 없는 새벽시간대가 주를 이루었고, 크론데몬 등을 점검해봐도 이상이 있거나 부하가 걸릴만한 부분은 없었습니다.
서버 다운 증상)
1. 서버 콘솔앞에 가도 아무런 응답이 없고 ping만 됩니다.
2. 어제는 하드디스크가 고장나서 새로 교체했고, 레이드 장비도 교체를 시도했으나 CPU 에러가 생겨서 다시 원상복구했다고 합니다.
3. 오늘은 PHP session 컨트롤을 하는 부분에서 아래 에러를 내더니 SSH, Apache 데몬의 응답이 없는 상태가 되어버렸습니다.
open(/xxxxx/sess_xxxxxxxxx, O_RDWR) failed: Read-only file system (30)
OS)
Red Hat Enterprise Linux ES release 4 (Nahant)
Linux localhost.localdomain 2.6.9-5.ELsmp #1 SMP Wed Jan 5 19:29:47 EST 2005 x86_64 x86_64 x86_64 GNU/Linux
하드웨어)
class: HD
bus: SCSI
detached: 0
device: sda
driver: ignore
desc: "Dell PERC 5/i"
class: RAID
bus: PCI
detached: 0
driver: megaraid_sas
desc: "Dell: Unknown device 0015"
각 담당자업체별 입장)
1. 메일솔루션
- XMail(GPL) + Apache + PHP 로 구축된 솔루션이며 장애 발생시 이상 증상이나
서버에 부하를 주는 처리가 전혀 없었던 상황이므로 이상없다고 밝힘.
2. 디비솔루션
- 메일솔루션에서만 사용하는 디비인데 부하가 전혀 없었고 로그에도 이상이 없다고 함.
3. 하드웨어업체(OS까지 함께 공급/기술지원 중인것으로 추측)
- 이상 증상이나 로그가 전혀 없다고 함.
해결을 위한 방안)
저는 소프트웨어적인 부하가 전혀 없는 상태에서 지속적으로 발생한 문제 이므로 하드웨어의 특성이나 문제가 아닐까 예상되어 서버 자체를 교체해보는 것을 제시했지만...
하드웨어업체에서는 다른 업체에서는 이상이 없는 장비인데 이곳에서만 발생하므로 메일/디비솔루션 문제라고 주장합니다.
장비를 바꿔봤으면 좋겠는데 고가의 장비라 어렵다고 하네요.
머리가 너무 아픕니다. 이 문제를 어떻게 해결하는게 좋을까요?
일단 Warranty 기간
일단 Warranty 기간 중의 장비라면 일단 대체 장비를 달라고 해서 테스트를 해 보심이 좋을 것 같습니다. 가장 단순하고 범위를 제거할 수 있는 가장 쉬운 방법이죠. 대체 장비로 한달 정도를 돌려 보고 이상이 없다면 장비 문제이므로 교체를 요구할 수 있는 것이죠.
그리고 해당 OS 가 업데이트가 안되고 있는 것 같습니다. 이런 경우라면 OS 의 문제라고도 볼 수 있기 때문에 OS 업데이트를 하셔야 합니다. redhat ES 를 구매를 한 것이라면, redhat 측에 이런 문제에 대한 기술 지원을 해야 겠죠.
역시 이런 문제는
역시 이런 문제는 역시 대체 장비, OS 업데이트밖엔 해결책이 없겠죠...?
저희 고객사에서 직접 하드웨업체(델)측과 얘기를 하고 있는 상태인데
대체 장비 지급이 불가능하다는 입장을 고수하고 있습니다.
장비가 도입된지 아직 1년도 안되는 걸로 알고 있는데 워런티 부분에 대해 다시 확인해보라고 말씀드려야 겠군요.
답변 감사드립니다. :)
디스크 쪽이 잘못된
디스크 쪽이 잘못된 거 같은데, 죽었을 때 dmesg 해보거나 (tmpfs에 올려서 하면 되요), netconsole 설정해서 커널 로그를 다른 기계에 저장하면 왜 죽는지 친절하게 알려줄겁니다.
일단 저는 다른
일단 저는 다른 지역에 있어서 서버앞에 직접 갈 수 가 없는 상황이고요.
OS 유지보수업체와 하드웨어업체에서 점검해봐도 아무런 에러가 안남아있다고 하는군요.
어제 12시가 다되서 작업이 끝나는가 싶더니 마지막으로 화려한 EXT3-fs 에러까지 내주네요.
=> May 10 23:44:48 localhost kernel: EXT3-fs error (device sda2): ext3_free_blocks: Freeing blocks not in datazone - block = 92603473
9, count = 1
그리고 1.2TB 짜리 로그가 있다고 나오는군요. 하드가 300GB짜린데...
ll /var/log/ -S
total 2420
-r-------- 1 root root 1254130450140 May 11 09:43 lastlog
아무튼 새벽 2시에 정상적으로 복구된 걸 확인하고 아직까진 이상이 없습니다만... 어째 영 불안하군요. @.@
CPU, RAM 을 제외한 다른 부품, 케이블류를 교체후 OS 업데이트도 한다고 하니 기다려봐야겠네요.
혹시
혹시 오라클이 깔려있나요? :-)
일단 lastlog 파일은 비우시고 시스템 정상작동을 확인하시는것이 우선순위일 것 같습니다.
OS 업데이트는 조심스레 진행여부를 확인하시고..(잘못하면 그냥 OS부터 재설치하는 즐거운 경험을 하실수가 있습니다)
====================여기부터 식인어흥====================
어흥 몰라 어흥? 호랑이 어흥!! 떡 하나 주면 어흥!! 떡 두개 주면 어흥어흥!!
Oracle, MySQL 등 흔히 볼
Oracle, MySQL 등 흔히 볼 수 있는 디비가 아닌 국내에서 제작한 디비가 있더군요.
OS를 재설치하기전엔 아무말없이 죽더니 재설치하고 나서는 하드 에러가 몇번 나고 있습니다. :)
지금은 정상적인 서비스가 가능한데 서버부하가 거의 없는 상황에서 갑자기 죽어버린다는게 골치아프네요.
오홍 -_-
일단 뭔가 현재 운영상태 자체가 상당히 복잡 다양한 에러를 보여주는 상황이군요 :-)
아무 에러메세지 없이 뻗는건, 이런걸 감안해야 할 필요는 없지만 혹시 모를 메모리 불량을 의심할수도 있지요.
다른 뭐 하드에러 요런건..상황 봐서 진짜 I/O Error라면 디스크를 교체하던지, 아니면 컨트롤러 자체가 불량일수도 있으니 그것도 감안하시고;;
OS는 업데이트하실 계획은 딱히 없으신가봐요. 재설치까지 하셨다는 것을 보면 솔루션을 재구성하는것 자체는 크게 문제가 안되시는 모양이라 다행이긴 합니다만..
우선은 정말 교체장비까지는 아니라고 하더라도 데모장비 한대쯤은 받아볼 여력이 되신다면 받아서 테스트를 해 보는것이 좋을 듯 합니다. 그걸 못해주겠다고 한다면 그건 정말 문제가 되죠. 그 업체랑 거래를 끊으셔야 할지도..(보아하니 델이신것 같습니다만..) 뭐 서버 댓수가 한대밖에 안되고 향후 추가영업건이 발생할 소지가 없다면 업체 입장에서 되도록 지원을 꺼리게 되는 경우가 있긴 합니다만, 그것이 올바른 행태는 아니니 약간 더 협의를 해보셔야 할 것으로 보입니다.
그럼 수고하세요.
====================여기부터 식인어흥====================
어흥 몰라 어흥? 호랑이 어흥!! 떡 하나 주면 어흥!! 떡 두개 주면 어흥어흥!!
저도 고객사에 자꾸
저도 고객사에 자꾸 말씀을 드려 대체 장비로 교체해보는 것을 말씀드렸지만
여분의 장비도 없고 델측에서 대체 장비를 제공할 수 없는 입장이라고 합니다.
재고를 적게 보유하는 정책때문에 워런티는 한참 남았지만 대체 장비 지급 가능기간이 짧은편이라고 하네요.
고객사에서 회사규모상 서버 한두대 돌리는 곳은 아닌 듯 한데 이상하군요.
아무튼 CPU, 메모리를 제외한 메인보드, 레이드, 케이블류의 기타 부품을 모두 교체해보기로 했다고 하니 기다려봐야 할 것 같습니다.
완전히 뻗는게 아니고 ping이 나가는 경우 등을 고려해보면 레이드 쪽 문제가 아닌가 조심스레 추측해보고 있습니다.
혹시 df 하셔서 파티션과 남은 용량을 확인해주실 수 있는지요?
혹시 df 하셔서 파티션과 남은 용량을 확인해주실 수 있는지요?
파티션 용량은
파티션 용량은 아래와 같습니다.
df -hT
Filesystem Type Size Used Avail Use% Mounted on
/dev/sda3 ext3 15G 12G 3.0G 80% /
/dev/sda1 ext3 494M 20M 449M 5% /boot
none tmpfs 1005M 0 1005M 0% /dev/shm
/dev/sda6 ext3 61G 9.6G 48G 17% /oradata
/dev/sda2 ext3 197G 24G 164G 13% /home1
df -hTi
Filesystem Type Inodes IUsed IFree IUse% Mounted on
/dev/sda3 ext3 1.9M 203K 1.7M 11% /
/dev/sda1 ext3 128K 41 128K 1% /boot
none tmpfs 252K 1 252K 1% /dev/shm
/dev/sda6 ext3 7.7M 57 7.7M 1% /oradata
/dev/sda2 ext3 25M 85K 25M 1% /home1
국내 db인가요?
oradata가..
(....)
아무래도 오라클인것 같은데요 -_-
====================여기부터 식인어흥====================
어흥 몰라 어흥? 호랑이 어흥!! 떡 하나 주면 어흥!! 떡 두개 주면 어흥어흥!!
아... 파티션명만
아... 파티션명만 oradata 로 해둔 것 입니다.
초기에 Oracle 도입하려다 국내 모업체랑 컨택해서 바꾸느라 저렇게 된 모양이네요. :)
lastlog 비정상
lastlog 비정상 대용량화의 경우 실제로 파티션 용량을 차지하지는 않으니 크게 문제될 것은 없을것입니다. 그냥 한번 잘 비워주고 나면 그 이후부터는 잘 돌거든요 :-)
====================여기부터 식인어흥====================
어흥 몰라 어흥? 호랑이 어흥!! 떡 하나 주면 어흥!! 떡 두개 주면 어흥어흥!!
아무런 로그가 없을때는 ...
아무런 로그를 남기지 않고 죽었을 때는 램이나 cpu 쪽 문제일 가능성이 가장 큽니다. ;
램 모듈 혹은 뱅크의 에러일 경우 제가 경험한 바로는 아무런 로그가 남지 않습니다.
cpu 냉각이 문제거나 cpu 가 문제일 경우도 마찬가지구요.
그러나 cpu 에러는 극히 드문 현상이니 램 에러 쪽으로 확인 하시는 것이 좋을 듯합니다.
램에 문제가 있을때 현재 사항에서 확인 하는 방법은 시스템에 꽂아둔 메모리보다 더 적게 인식 될터인데. free 나 dmesg 로그를 보아서 현재 꽂아 둔 메모리의 양을 확인 하면 될것 같습니다.
또한가지 예상되는 사항은
apache + php (xml) 쪽의 버그가 있을수 있습니다. 제가 경험한 바로 php 에서 xml 을 사용할때 apache 가 메모리를 무한적 먹어 버리는 현상을 경험 했습니다.
문제가 된 웹 서버가 2G 의 메모리를 가지고 있었는데 아파치가 2G의 메모리를 사용하고 cpu 도 99% 를 사용해서 시스템이 먹통이 되는 경우를 경험 했습니다.
해결책은 아직 찾지 못했구요 워크어라운드로 아파치 프로세스를 감시 하다가 256메가 이상의 메모리를 먹으면 그 프로세스를 kill 하는 식으로 스크립트를 돌려서 사용하고 있습니다.
이런 사항들을 확인 해 볼려면 주기적으로 top 로그를 남겨서 확인 해 보시는 것이 좋을 듯합니다.
아래의 스크립트 정도로 로그를 남겨 보시는 것이 좋을 듯 합니다.
while (true)
do
top -b -n 1 | head -n 20 >> top.log
sleep 5
done
위에서 좋은 말씀을 많이 해주셨네요.
위에서 좋은 말씀을 많이 해주셨네요.
굳이 따로 추가적으로 적지 않아도 될 만큼 말이지요.
뭐 혹시나 나중에라도 이런 경우를 겪으시는 분들이나 이래저래 검색엔진을 타고 들어오실 분들을 위해서 이런 경우를 겪을때의 해결책에 대해서 한번 나열을 해 보도록 하지요.
일단 해당 시스템에 대한 시스템 로그를 남기고 확인하는것이 중요하지요. 하다못해 시스템이 살아있는 경우라면 dmesg를 확인하거나 시스템이 뻗어서 리부팅해버리는 경우라면 /var/log/messages* 파일들을 확인해 보시는것이 1차적인 순서겠지요.
그리고 이런 시스템 다운 증상이 주기적으로 나타난다면 sysstat(레드햇 기준입니다) 서비스를 가동하여 주요 시스템 sar 값을 남기고 실제 서비스 운용시 서비스 프로세스나 cpu 사용량, 메모리 사용량등에 어떤 특별한 문제가 있는지, 서비스가 죽을때 context switch가 과도하게 많이 일어나는지, 물리적 메모리 사용량은 얼마나 되는지, 스왑 사용량은 얼마나 되는지 등을 확인하시는것이 중요하겠지요.
이와 연관해서 top 내용만 보지 마시고, 너무 top은 신뢰하지 마시고 iostat이나 vmstat 값을 실시간으로 띄워두시거나, 혹은 계속적으로 모니터링하기는 불가능한 상황이시라면 watch 등을 이용하시거나, 아니면 vmstat 등의 출력을 특정 파일로 보내도록 프로세스를 작동 후 시스템 상황을 살펴보시는 것도 좋겠지요.
그리고 만일 프로세스 뿐만이 아니라 시스템이 down될 경우라면 하드웨어도 왠지 의심이 가지요.
pc급에서는 잘 만나볼 수 없지만 어느정도 이상 서버라는 개념이 있는 서버라면 시스템 내에 IPMI Based의 시스템 관리방식을 제공합니다. 특히 어떤 시스템이 Down이 될 정도의 하드웨어의 물리적 이슈가 있다면 이를 SEL(System Event Log)에 남겨두고 이벤트화 하여 관리를 하지요. 서버별로 이를 CMOS BIOS에서 BMC SEL Log 항목에서 확인이 가능한 서버가 있는가 하면 영 확인이 안되는 서버도 있곤 합니다. (인텔 화이트박스들이 그런 경우가 많지요)
만일 OS상에서 On-Line 으로 SEL Log를 확인하시려면 /etc/init.d/ipmi start 하셔서 ipmi를 활성화하시고 - 일단 활성화가 안된다 하면 해당 메인보드에서 ipmi를 지원하지 않는겁니다. - ipmitool을 이용해서 몇가지 항목을 체크해볼 수 있겠지요.
뭐 간단하게 sel log를 확인하려면 ipmitool sel list 명령어로 SEL log를 확인해본다거나, 명확하게 신뢰는 가지 않습니다만 ipmitool sdr 이나 ipmitool sensor 등으로 주요 하드웨어 항목을 체크해 보실수도 있습니다.
아마 이 정도라면 기본적인 항목은 체크가 된다고 보실 수 있지요.
기타 하드웨어 장애 이슈의 경우 개념있는 서버들은 기본적으로 전면 패널에 하드웨어중 어떤 부분이 문제가 있는지 LED로 나타내주는 경우도 있고, 좀 개념이 부족한 서버는 어디가 문제가 있는지는 안나오는데 일단 문제가 있다고 LED로 표시만 해줘서 엔지니어의 속을 태우기도 합니다.
제가 많은 서버들을 오랫동안 만져보질 못하고 IBM에 대해서만 경험이 있는지라, 대략 IBM 기준으로만 말씀을 드리자면 IBM같은 경우는 얼마전부터 PC-Doctor 라고 하는 녀석을 ROM상에 포함하고 있어서 주요 하드웨어 항목을 스스로 체크하고, 하다못해 메모리 불량의 경우도 정확하게 메모리가 불량이라거나 하는 부분들을 체크할 수 있도록 하는 기능들을 포함하고 있습니다.
이런 정도면 일반적인 경우의 장애는 어느정도 해결이 가능하지요.
기타 필요하다면 snmp 서비스를 이용하고, 여기에 주요 시스템 사용량 내역은 MRTG나 RRTTOOL을 이용해서 좀 더 그래피컬하게 모니터링을 할 수도 있겠고, 프로세스 분석이 필요하면 돌아가고 있는 프로세스를 strace해버리고, 영 안되면 gdb와 기타등등의 다양한 프로파일링 툴을 이용해서 프로세스 프로파일링에 들어가고 하는 고단하고 따분하고 지루하며 참 답답할수밖에 없는 방식으로 접어들게 됩니다. 시스템 프로파일링을 위해서 Oprofile을 이용하기도 하고, 정말 죽긴 죽는데 대책이 없다!! 하면 그냥 netdump나 diskdump를 이용해서 메모리 덤프를 떠서 이를 레드햇등의 업체에 보내서 덤프 분석을 의뢰하는 지경에 이르는 경우도 있지요. 보내놓으면 금방 답이 오느냐 하면 그것도 아니고 말이지요. 짧게는 몇주에서 길게는 몇달까지도 걸립니다.
그런데 재미있는 경우가 무엇이냐 하면 이렇게 몇달을 기다리다가 문득 생각나서 OS를 업데이트를 탁 하고 했더니!! 아무런 이상없이 잘 돌더라 하는 경우도 생기고 하는 것이지요.
그래서 결국 하고자 하는 이야기는, 처음부터 하드웨어와 OS, 소프트웨어의 Certification을 잘 확인해서 초반에 제안할때부터 잘 들어간다면 이런 일을 줄일 수 있지 않겠느냐 하는 이야기를 할 수밖에 없는겁니다. -_- 이게 상당히 원론적이고 아무렇지 않게 할 수도 있는 이야기입니다만, 위같은 과정을 수십 수백여차례 겪고 나면 결국 초반에 시스템 궁합 맞추는것이 그 무엇보다도 중요하다는것을 깨닫게 된답니다.
사실 각 요소요소만 따지고 들자면 이상이 있는 경우가 얼마나 있겠습니까? 지금 당장 우리가 쓰기에는 잘 돌지도 않고 문제가 된다고 하지만 실제로 남들은 그걸로 서비스도 잘 하고 편리하게 이용하고 있는데 말이지요. 결국은 어딘가 어긋나있는 부분이 있는데 그런 부분을 이해할 수 있는 엔지니어분들이 세계적으로도 그다지 많은편은 아니기 때문에 이런 문제점들이 발생을 하고, 또 이를 찾아내지 못해 원인 불명이라고 생각하고 서버를 재설치하거나 애꿎은 어플리케이션이나 OS나 하드웨어등을 탓하게 되는 경우가 많지요.
뭐 인생이 다 그렇답니다. -_-
====================여기부터 식인어흥====================
어흥 몰라 어흥? 호랑이 어흥!! 떡 하나 주면 어흥!! 떡 두개 주면 어흥어흥!!
댓글 달기