EXT3 의 저널링 형식에 대해 약간의 정보를 보관한다.
EXT3 는 3가지 데이터 저널모드를 제공한다.
Ordered (기본) 과 Writeback, Journal 모드이다.
writeback
이 모드에서 ext3는 데이터 저널링을 전혀 수행하지 않는다.XFS,JFS,Reiserfs 과 유사한 메타데이터 저널링만을 제공한다.
이 경우 시스템이 얘기치 못해 종료,재부팅될 경우 데이터의 손상가능성은 매우 높다.
BBU를 꼽지 않은 레이드카드의 writecache enable의 상황과 유사하다고 보면된다.
그러나 당신이 database 용도로 쓸것이 목적이라면 이 옵션을 사용해도 된다.
어차피 얘기치 못한 리부팅이 발생할 경우 디비는 무사하지 못할것이다
이러한 FS나 모드를 database에서 사용할 때에는 innodb 등의 바이너리급 db는 특별한 주의를 요구한다.
필자의 경험상 8gb 의 ibd 테이블은 커럽션을 복구하기위해 mysql 은 기동전 1시간가량 복구모드를 수행한다.
ibd는 파손될 경우 복구시키는 방법이 매우 복잡하며, 전문적인 복구를 위한 툴은 innodb 사이트에 등록을 하여
핫리페어 툴등을 다운로드 받아야 한다.
또한 충분한 binlog들을 확보해야 한다.
1시간가량의 복구모드를 수행한 서버는 옵테론 4way 고성능 데이터베이스 서버라는 점을 감안해야할것이다.
일반적 소형시스템에서 이러한 사고가 발생할 경우 하루가 넘는 인내의 시간을 가져야 할지도 모른다.
Ordered 모드는 많이들 써오고 몸으로 체감하고 있어서 굳이 설명하지 않겠지만 가장 밸런스 있는 파일시스템이다.
Journal
전체 데이터 및 메타데이터에 대한 저널링을 수행한다 (이는 풀 저널링이라 불리는 형식이다)
모든 write는 저널에 우선 기록되며 그런다음 end seek 후 쓰여진다.
저널 트러블이 발생해도 즉시 재기동이 가능하며, 오류에 강하다.
journal 모드는 통상적으로 EXT3가 제공하는 저널링 모드중에 "가장 느리다"
input이 발생할때 데이터는 디스크상에 2번 쓰여지기 때문이다.
하지만 특정 상황에서 journal은 기대이상의 성능향상을 가져오기도 한다.
Write와 Read가 동시에 발생하는 환경이 그러하며, 이는 Database 라 NFS서비스등을 의미하기도 한다.
(리눅스 커널 메일링 리스트의 fs-sync journal mode 관련글)
그러나 이 모드는 아직까지 잠재된 몇가지 버그가 있다는 점과, 한번 구동후 fs의 재조정이 없는
디비나 통상적인 경우에는 버그가 없다. (보고된 버그는 flushing, unmounting 등에 집중적이었으며
커널 2.4에서는 데이터 커럽셔닝이 발생한 보고도 있다.)
Andrew Morton 은 lkml 을 통해 한가지 흥미로은 피드백을 제시하였다.
write가 지속되고 있는 상황에서의 데이터 리딩을 테스트하였는데
Reiserfs, EXT3 ordered, writeback 모드의 avg readtime 이 60초가량 걸리는 상황에서
ext3 journal 모드가 약 7초가 소요되는 경이적인 퍼포먼스를 제시한다.
하지만 벤치마크 결과 고가의 레이드카드 (Writecache 가 장착된) 에는 그다지 유효하지 못한것으로 나타나고 있다고 한다. (writecache 를 통해 write 가 큐로 들어가 효율적인 디스크 분배를 해주기 떄문이다)
실제로 journal 모드는 NFS 및 극악의 환경에 처한 데이터베이스 서버에 유효한것으로 나타나고 있다.
하지만 I/O의 유형을 정확히 분석하여 설정하지 않는이상 역효과가 상당할것을 미리 인지할것을 권장한다.
상황에 맞게 적당히 조합/분배한다면 어쩌면 파인튠을 만들어낼 수도 있지만,
어떠한 안정성도 ordered 모드 이외에는 보장할 수 없다는 점을 확실히 하는바이다.
이론상 journal 모드는 가장 안정성있으며 가장 신뢰도 높은 저널링 형식이다.
하지만 이 모드는 수정을 거쳐나가고 있는 부분중 하나며, 불안정한 요소를 포함하고 있다.
많은 사람들이 이용하지 않고 있는 무엇인가는 숨어있는 1%의 파인튠이 될지도 모르지만,
숨어있는 1%의 감당할 수 없는 리스크를 동반하고 있다는 것 또한 사실이다.
Posted by LeCieL



