서버 관리 도구에서 다음과 같은 알림이 온다.
ServerView RAID: BBU relearn will start in 5 hours
무엇을 해야 하는지, 방치해도 되는지 판단이 필요하다. 그리고 며칠에 한 번씩 디스크 쓰기가 갑자기 느려지는 현상이 이것과 관련 있는지도 자주 문제가 된다.
하드웨어 RAID 컨트롤러는 쓰기 캐시를 갖는다. 캐시에 받아 두고 곧바로 완료를 응답한 뒤 나중에 디스크로 내리는 방식(write-back)이 성능에 결정적이다. 다만 정전 시 캐시 내용이 날아가면 데이터가 깨지므로, 배터리(BBU)나 커패시터가 캐시를 지켜 준다.
배터리는 시간이 지나면 실제 용량이 줄어든다. 컨트롤러는 남은 용량을 정확히 알기 위해 주기적으로 완전히 방전시킨 뒤 다시 충전한다. 이것이 재학습이고, 보통 90일 주기로 예약된다.
핵심은 이것이다. 방전 구간에서는 캐시를 보호할 수단이 없으므로 컨트롤러가 쓰기 정책을 write-back 에서 write-through 로 내린다. 모든 쓰기가 디스크에 닿을 때까지 기다리게 되므로, 임의 쓰기 성능이 수 배에서 수십 배 떨어진다. 몇 시간 동안 이어진다.
재학습 자체는 정상 유지 동작이므로 막을 이유가 없다. 다만 부하가 큰 시간대와 겹치지 않게 옮기는 것이 요점이다. 배치 적재나 월말 정산이 도는 시간에 걸리면 작업이 통째로 늦어진다.
진행 중에는 RAID 구성을 바꾸거나 서버를 끄지 않는다. 전원이 끊기면 재학습이 중단되고 다시 시작해야 한다.
LSI · Broadcom MegaRAID 계열이면 storcli 또는 perccli 를 쓴다.
storcli /c0/bbu show all
storcli /c0 show | grep -i 'cache\|bbu'
storcli /c0/v0 show all | grep -i 'cache'
배터리 상태와 다음 재학습 예정 시각이 여기 나온다. 가상 디스크의 현재 캐시 정책도 함께 본다. WT 로 보이면 지금 write-through 로 내려가 있다는 뜻이다.
Fujitsu ServerView 환경이면 amCLI 나 RAID Manager 화면에서 같은 값을 본다. HPE Smart Array 는 ssacli 를 쓴다.
ssacli ctrl all show config detail | grep -i -E 'cache|battery'
MegaRAID 계열은 재학습 시각을 지정할 수 있다.
storcli /c0/bbu show properties
storcli /c0/bbu set learnDelayInterval=168
storcli /c0/bbu set autoLearnMode=0
learnDelayInterval 은 다음 재학습까지의 지연을 시간 단위로 미룬다. autoLearnMode 를 끄면 자동 재학습을 하지 않는데, 이 상태로 두면 배터리 상태를 알 수 없게 되므로 수동으로라도 반드시 주기를 잡아 둔다.
지금 당장 돌리려면 다음과 같다.
storcli /c0/bbu start learn
최근 컨트롤러는 배터리 대신 슈퍼커패시터와 플래시를 조합한 방식(CacheVault, FBWC, Smart Storage Battery)을 쓴다. 정전 시 캐시 내용을 플래시로 넘겨 두는 구조라 주기적 방전 재학습이 없다. 재학습 때문에 성능이 떨어지는 문제도 없다.
장비를 새로 들일 때 이 차이를 확인해 두면 운영이 편해진다.
쓰기가 느려졌을 때 순서대로 본다.
먼저 캐시 정책이 내려갔는지 본다. Current Cache Policy 가 WriteThrough 인데 설정값은 WriteBack 이라면 무언가가 강제로 내린 것이다.
storcli /c0/vall show all | grep -i -E 'Cache|Policy'
원인은 재학습만이 아니다. 배터리 수명이 다했거나, 배터리가 분리됐거나, 디스크 하나가 빠져 재구축 중일 때도 같은 일이 벌어진다.
storcli /c0 show events type=latest=20
storcli /c0/eall/sall show
Write Cache OK if Bad BBU 같은 옵션으로 배터리 없이도 write-back 을 유지할 수 있지만, 정전 시 데이터 손실을 감수하는 설정이다. UPS 가 확실하고 손실을 감당할 수 있는 용도가 아니면 켜지 않는다.
디스크 자체의 쓰기 캐시와 컨트롤러 캐시는 다른 것이다. 디스크 캐시는 배터리 보호를 받지 못하므로 일반적으로 꺼 둔다.
배터리 교체 주기는 대략 3년이다. 재학습 결과에서 최대 용량이 줄어들고 있으면 교체를 계획한다.