AOS 6.5 이하 CVM 시간오차 해결기

아직 유지보수 하는 사이트들 중에 예전 EOS 된 소프트웨어를 그대로 사용하는 곳이 많다. 보통 계약도 안되어 있기 때문에 문제가 생기면, 맨 땅에 헤딩해야 하는 거 너무 고달프다는거,, 이런 상황에서 CVM 시간 이슈사항에 대해 한번 경험을 이야기 해보도록 하겠습니다. 그리고 저희 이야기는 경어체 생략이니 참고해 주세요.

아 진짜 이거 때문에 주말 내내 서버실에서 삽질한 거 생각하면 지금도 뒷목이 뻐근하다. CVM 시간이 현재 시간보다 미래로 튀어버리는 기막힌 상황 겪어본 사람만 안다. 프리즘(Prism) 웹 콘솔 열어서 아무리 멀쩡한 NTP 주소를 때려 넣어도 시스템은 콧방귀도 안 뀜. 터미널 열어서 ntpq -pn 명령어로 까보면 설정한 주소는 온데간데없고 127.127.1.0 이딴 루프백 주소만 덩그러니 떠 있다. 지 혼자만의 시간 속에 갇혀버린 거임.


갑자기 클러스터가 바보가 되는 마법, 겪어보셨나요?

시간이 틀어지면 그냥 시간이 안 맞는 게 아니다. 시스템 전체가 서서히 무너져 내림. 당장 LDAP 같은 디렉토리 연동해둔 프리즘 웹 콘솔 로그인부터 턱 막힌다. 정전이나 정기 점검 핑계로 장비 내렸다가 올렸는데 시간이 미친 듯이 엇갈려 있으면 클러스터 자체가 아예 안 올라오기도 한다. 

로그 수집은 말할 것도 없고 프리즘에서 보여주는 성능 그래프도 다 찌그러진다. 호스트에서 올라간 사용자 VM들도 실시간 시계(RTC)가 꼬여서 게스트 OS 시간까지 다 틀어지는 대참사 연쇄 반응이 시작됨. Veeam이나 Commvault 같이 비싼 돈 주고 산 타사 백업 소프트웨어도 얄짤없이 다 에러 뿜어낸다. 제일 무서운 건 클러스터랑 원격 사이트 동기화가 박살 나서, 스냅샷이 너무 일찍 만료되거나 지 멋대로 늘어져서 정작 필요할 때 데이터 다 날려먹을 수도 있다는 거.


AOS 버전에 따른 생존법 차이 (이거 모르면 고생함)

여기서 짚고 넘어가야 할 포인트. 자기가 쓰는 AOS 버전부터 당장 확인해라.

6.5 이후 버전은 그나마 숨통이 트인다. NCC 체크 한 번 돌려주면 시스템이 알아서 크론탭(crontab)에 fix_time_drift 스크립트를 밀어 넣음. 그러면 10분마다 오프셋을 100 정도씩 스멀스멀 자동으로 깎아주면서 맞춰준다.

근데 5.20.x 이전 구형 버전들? 이것도 NCC 돌리면 스크립트가 들어가긴 하는데, 안심하고 퇴근하면 안 됨. 10분 간격으로 제대로 조정이 먹히고 있는지 두 눈으로 계속 상황을 모니터링하며 지켜봐야 함.

아 참고로 로그 볼 때 시간대 헷갈리지 마라. 클러스터 시간대를 한국 시간으로 셋팅해놔도, AOS 5.18이나 Prism Central 2020.8부터는 Nutanix 내부 로그 타임스탬프가 무조건 UTC 기준으로 찍힌다. 로그 보면서 '어? 시간 또 틀어졌네?' 하고 삽질하는 뉴비들 많은데 원래 그런 거니까 쫄지 말자.


이 피말리는 경험을 통해 알게 된 CVM 시간 복구 실전 꿀팁

상황에 따라 대처법이 완전히 다르다. 무작정 명령어부터 치지 말고 지금 서비스 다운타임을 가질 수 있는지부터 판단할 것.
  • 상황 1: 클러스터 내릴 수 있는 황금 같은 상황 (정석 테크트리)
    제일 깔끔하고 확실하다. 먼저 cluster stop 때려서 클러스터 안전하게 내림. 그 다음 모든 노드에 allssh sudo service ntpd stop 날려서 서비스 죽인다. 그리고 allssh sudo ntpdate (NTP서버 IP) 쳐서 강제로 시간 멱살 잡고 동기화 시켜버림. 다 됐으면 allssh sudo service ntpd start로 서비스 다시 살리고 cluster start 해주면 평화가 찾아옴.
  • 상황 2: 클러스터 절대 못 내릴 때 (야간 장애 대다수가 이렇지)
    이럴 땐 크론탭에 강제로 스크립트를 박아넣는 수밖에 없다. allssh "(/usr/bin/crontab -l && echo '*/1 * * * * bash -lc /home/nutanix/serviceability/bin/fix_time_drift') | /usr/bin/crontab -" 이 미친 듯이 긴 명령어를 쳐서 1분마다 강제 교정 스크립트가 돌게 ON 시킨다. 주의할 점은 시간 얼추 다 맞았다 싶으면 allssh "(/usr/bin/crontab -l | sed '/fix_time_drift/d') | /usr/bin/crontab -" 날려서 크론탭에서 반드시 삭제(OFF)해야 함. 이거 까먹으면 백그라운드에서 평생 돈다.


진짜 해결됐는지 눈으로 확인하는 필수 명령어 모음

작업 다 했다고 짐 싸서 집에 가면 새벽에 장애 콜 다시 온다. 무조건 확인 사살 필수.

먼저 allssh ntpq -pn (호스트는 hostssh ntpq -pn) 쳐서 제대로 된 외부 NTP 서버 바라보고 동기화 플래그 떨어지는지 무조건 볼 것. 그리고 ncli cluster get-ntp-servers로 클러스터 설정에 주소 잘 박혀있는지 이중 체크해라.

크론탭으로 스크립트 넣은 사람들은 allssh crontab -l | grep -i fix_time 쳐서 내가 넣은 스크립트 잘 들어갔는지(혹은 잘 지워졌는지) 확인해야 됨. 오프셋 튀는 거 계속 모니터링 하려면 allssh cat data/logs/genesis.out | grep -i offset 이거 띄워놓고 allssh date 쳐가면서 진짜 현재 시간이랑 딱 맞물려 돌아가는지 한참 지켜보고 퇴근하길 바랄께. 

막판 요약: 묻지도 따지지도 말고 이 표 하나면 끝남

긴 글 다 읽기 벅찬 사람들을 위해 생존 필수 명령어만 표로 딱 떠먹여 준다. 이거 스크랩해두면 야간에 장애 터졌을 때 생명줄 됨.

목적 (뭘 할 건데?) 명령어 (이렇게 쳐라) 실전 꿀팁
클러스터 제어 cluster stop / cluster start 다운타임 확보하고 확실하게 밀 때
NTP 데몬 끄고 켜기 allssh sudo service ntpd stop
(켤 때는 start)
수동 시간 맞추기 전후 필수 코스
NTP 수동 강제 씽크 allssh sudo ntpdate [NTP서버 IP] 미래로 간 시간 강제로 멱살 잡고 끌고 옴
NTP 씽크 상태 확인 allssh ntpq -pn 호스트 볼 땐 hostssh ntpq -pn
클러스터 NTP 설정 확인 ncli cluster get-ntp-servers 프리즘에서 넣은 주소 진짜 먹혔는지 볼 때
크론탭(crontab) 생사 확인 allssh crontab -l | grep -i fix_time 자동 동기화 스크립트 돌고 있는지 체크
오프셋(시간차) 눈팅 allssh cat data/logs/genesis.out | grep -i offset 시간 튀는 거 얼추 맞춰지는지 확인할 때
나의 경험 상 이미 SW EOS 된 곳은 업그레이드 권고하지만, 뭐 권고 하는데로 하는 사이트는 몇 안되는 것 같다. 비용 문제도 있고, 여러가지 문제가 있겠지.. 그래도 회피 가능한지 먼저 알아보는 것도 하나의 상책이니 도움되길 바라면서 이만 마친다. 

댓글 쓰기

0 댓글

이 블로그 검색

태그

신고하기

프로필

이미지alt태그 입력