HDFS 롤링 업그레이드
HDFS 롤링 업그레이드 (Rolling Upgrade)
개별 HDFS 데몬을 차례로 업그레이드하는 롤링 업그레이드 방법을 설명하는 문서예요. 무중단 업그레이드 절차(HA/비-HA, 페더레이션), 다운그레이드, 롤백, 관련 dfsadmin 명령과 NameNode 시작 옵션을 다룹니다. Hadoop 2.4.0부터 지원됩니다.
출처: 문서
본문
소개 (Introduction)
_HDFS 롤링 업그레이드_는 개별 HDFS 데몬을 업그레이드할 수 있게 해 줍니다. 예를 들어 데이터노드는 네임노드와 독립적으로, 네임노드 하나는 다른 네임노드와 독립적으로 업그레이드할 수 있어요. 네임노드는 데이터노드와 저널 노드와 독립적으로 업그레이드할 수 있습니다.
업그레이드 (Upgrade)
Hadoop v2에서 HDFS는 고가용성(HA) 네임노드 서비스와 와이어 호환성(wire compatibility)을 지원합니다. 이 두 기능 덕분에 HDFS 다운타임 없이 업그레이드가 가능해요. 무중단으로 HDFS 클러스터를 업그레이드하려면 클러스터가 HA로 구성되어야 합니다.
새 소프트웨어 릴리스에서 활성화된 새 기능이 업그레이드 후에는 옛 소프트웨어 릴리스에서 동작하지 않을 수 있습니다. 이런 경우 업그레이드는 다음 단계로 수행해야 해요.
- 새 기능을 비활성화합니다.
- 클러스터를 업그레이드합니다.
- 새 기능을 활성화합니다.
참고: 롤링 업그레이드는 Hadoop 2.4.0부터만 지원됩니다.
무중단 업그레이드 (Upgrade without Downtime)
HA 클러스터에는 두 개 이상의 NameNode(NN), 많은 DataNode(DN), 몇 개의 JournalNode(JN), 몇 개의 _ZooKeeperNode(ZKN)_가 있어요. _JN_은 비교적 안정적이라 대부분의 경우 HDFS 업그레이드 시 업그레이드가 필요 없습니다. 여기 설명하는 롤링 업그레이드 절차에서는 _NN_과 _DN_만 고려하고 _JN_과 _ZKN_은 고려하지 않아요. _JN_과 _ZKN_을 업그레이드하면 클러스터 다운타임이 발생할 수 있습니다.
비페더레이션 클러스터 업그레이드
두 네임노드 _NN1_과 _NN2_가 있고 각각 active와 standby 상태라고 해 봅시다. HA 클러스터 업그레이드 단계는 다음과 같습니다.
- 롤링 업그레이드 준비
- "
hdfs dfsadmin -rollingUpgrade prepare"를 실행해 롤백용 fsimage를 만듭니다. - "
hdfs dfsadmin -rollingUpgrade query"를 실행해 롤백 이미지 상태를 확인합니다. "Proceed with rolling upgrade" 메시지가 표시될 때까지 기다렸다 다시 실행합니다.
- "
- Active·Standby NN 업그레이드
- _NN2_를 종료하고 업그레이드합니다.
- "
-rollingUpgrade started" 옵션으로 _NN2_를 standby로 시작합니다. - _NN1_에서 _NN2_로 페일오버해서 _NN2_가 active, _NN1_이 standby가 되게 합니다.
- _NN1_을 종료하고 업그레이드합니다.
- "
-rollingUpgrade started" 옵션으로 _NN1_을 standby로 시작합니다.
- DN 업그레이드
- 작은 데이터노드 부분집합(예: 특정 랙 아래 모든 데이터노드)을 선택합니다.
- "
hdfs dfsadmin -shutdownDatanode <DATANODE_HOST:IPC_PORT> upgrade"로 선택한 데이터노드 하나를 종료합니다. - "
hdfs dfsadmin -getDatanodeInfo <DATANODE_HOST:IPC_PORT>"로 데이터노드가 종료될 때까지 확인하고 기다립니다. - 데이터노드를 업그레이드하고 재시작합니다.
- 부분집합의 선택된 모든 데이터노드에 대해 위 단계를 병렬로 수행합니다.
- "
- 클러스터의 모든 데이터노드가 업그레이드될 때까지 위 단계를 반복합니다.
- 작은 데이터노드 부분집합(예: 특정 랙 아래 모든 데이터노드)을 선택합니다.
- 롤링 업그레이드 종료(Finalize)
- "
hdfs dfsadmin -rollingUpgrade finalize"를 실행해 롤링 업그레이드를 종료합니다.
- "
페더레이션 클러스터 업그레이드
페더레이션 클러스터에는 여러 네임스페이스가 있고 각 네임스페이스마다 active/standby NN 쌍이 있습니다. 페더레이션 클러스터 업그레이드 절차는 비페더레이션과 비슷하지만, 1단계와 4단계를 각 네임스페이스에 대해 수행하고 2단계를 각 active/standby NN 쌍에 대해 수행한다는 점이 달라요.
- 각 네임스페이스에 대해 롤링 업그레이드 준비
- 각 네임스페이스의 Active·Standby NN 쌍 업그레이드
- DN 업그레이드
- 각 네임스페이스에 대해 롤링 업그레이드 종료
다운타임 업그레이드 (Upgrade with Downtime)
비-HA 클러스터는 네임노드를 재시작해야 하므로 다운타임 없이 HDFS를 업그레이드하는 것이 불가능합니다. 하지만 데이터노드는 여전히 롤링 방식으로 업그레이드할 수 있어요.
비-HA 클러스터 업그레이드
비-HA 클러스터에는 NameNode(NN), SecondaryNameNode(SNN), 많은 _DataNode(DN)_가 있습니다. 비-HA 업그레이드 절차는 HA와 비슷하지만 2단계 "Active·Standby NN 업그레이드"가 아래와 같이 바뀝니다.
- _NN_과 SNN 업그레이드
- _SNN_을 종료합니다.
- _NN_을 종료하고 업그레이드합니다.
- "
-rollingUpgrade started" 옵션으로 _NN_을 시작합니다. - _SNN_을 업그레이드하고 재시작합니다.
다운그레이드와 롤백 (Downgrade and Rollback)
업그레이드한 릴리스가 바람직하지 않거나, 드물게 업그레이드가 실패하면(새 릴리스의 버그로 인해) 관리자는 HDFS를 업그레이드 전 릴리스로 다운그레이드하거나, 업그레이드 전 릴리스와 업그레이드 전 상태로 롤백할 수 있습니다.
다운그레이드는 롤링 방식으로 할 수 있지만 롤백은 그렇게 할 수 없어요. 롤백은 클러스터 다운타임이 필요합니다.
또한 다운그레이드와 롤백은 롤링 업그레이드가 시작된 후, 업그레이드가 종료되기 전에만 가능합니다. 업그레이드는 finalize, downgrade, rollback 중 하나로 종료할 수 있어요. 따라서 finalize나 downgrade 후에는 rollback을, finalize 후에는 downgrade를 수행하지 못할 수 있습니다.
다운그레이드 (Downgrade)
_Downgrade_는 소프트웨어를 업그레이드 전 릴리스로 되돌리되 사용자 데이터는 보존합니다. _T_가 롤링 업그레이드 시작 시간이고 업그레이드가 downgrade로 종료됐다고 해 봅시다. 그러면 T 전이나 후에 만들어진 파일은 HDFS에 남아 사용 가능하고, T 전이나 후에 삭제된 파일은 HDFS에서 삭제된 채로 유지됩니다.
새 릴리스가 업그레이드 전 릴리스로 다운그레이드 가능하려면 두 릴리스 사이에 네임노드 레이아웃 버전과 데이터노드 레이아웃 버전이 모두 바뀌지 않아야 해요.
HA 클러스터에서 옛 소프트웨어 릴리스에서 새 릴리스로의 롤링 업그레이드가 진행 중일 때, 업그레이드된 머신을 롤링 방식으로 옛 릴리스로 다운그레이드할 수 있습니다. 앞과 같이 _NN1_과 _NN2_가 각각 active와 standby라고 합시다. 무중단 롤링 다운그레이드 단계는 다음과 같습니다.
- DN 다운그레이드
- 작은 데이터노드 부분집합(예: 특정 랙 아래 모든 데이터노드)을 선택합니다.
- "
hdfs dfsadmin -shutdownDatanode <DATANODE_HOST:IPC_PORT> upgrade"로 선택한 데이터노드 하나를 종료합니다. - "
hdfs dfsadmin -getDatanodeInfo <DATANODE_HOST:IPC_PORT>"로 데이터노드가 종료될 때까지 확인·대기합니다. - 데이터노드를 다운그레이드하고 재시작합니다.
- 부분집합의 모든 선택 데이터노드에 대해 위 단계를 병렬 수행합니다.
- "
- 클러스터의 모든 업그레이드된 데이터노드가 다운그레이드될 때까지 반복합니다.
- 작은 데이터노드 부분집합(예: 특정 랙 아래 모든 데이터노드)을 선택합니다.
- Active·Standby NN 다운그레이드
- _NN2_를 종료하고 다운그레이드합니다.
- _NN2_를 정상적으로 standby로 시작합니다.
- _NN1_에서 _NN2_로 페일오버해서 _NN2_가 active, _NN1_이 standby가 되게 합니다.
- _NN1_을 종료하고 다운그레이드합니다.
- _NN1_을 정상적으로 standby로 시작합니다.
- 롤링 다운그레이드 종료
- "
hdfs dfsadmin -rollingUpgrade finalize"를 실행해 롤링 다운그레이드를 종료합니다.
- "
프로토콜이 하위 호환이지만 상위 호환은 아닐 수 있으므로, 데이터노드를 네임노드보다 먼저 다운그레이드해야 합니다. 즉 옛 데이터노드는 새 네임노드와 통신할 수 있지만 그 반대는 안 됩니다.
롤백 (Rollback)
_Rollback_은 소프트웨어를 업그레이드 전 릴리스로 되돌리고 사용자 데이터도 업그레이드 전 상태로 되돌립니다. _T_가 롤링 업그레이드 시작 시간이고 업그레이드가 rollback으로 종료됐다고 해 봅시다. T 전에 만들어진 파일은 HDFS에 남아 있지만 T 후에 만들어진 파일은 사용 불가가 됩니다. T 전에 삭제된 파일은 삭제된 채 유지되지만 T 후에 삭제된 파일은 복원됩니다.
새 릴리스에서 업그레이드 전 릴리스로의 롤백은 항상 지원됩니다. 다만 롤링 방식으로는 할 수 없고 클러스터 다운타임이 필요해요. _NN1_과 _NN2_가 각각 active와 standby라고 합시다. 롤백 단계는 다음과 같습니다.
- HDFS 롤백
- 모든 _NN_과 _DN_을 종료합니다.
- 모든 머신에 업그레이드 전 릴리스를 복원합니다.
- "
-rollingUpgrade rollback" 옵션으로 _NN1_을 Active로 시작합니다. - _NN2_에서
-bootstrapStandby를 실행하고 정상적으로 standby로 시작합니다. - "
-rollback" 옵션으로 _DN_을 시작합니다.
롤링 업그레이드 명령과 시작 옵션 (Commands and Startup Options)
DFSAdmin 명령
dfsadmin -rollingUpgrade
hdfs dfsadmin -rollingUpgrade <query|prepare|finalize>
롤링 업그레이드 작업을 실행합니다.
| 옵션 | 설명 |
|---|---|
query |
현재 롤링 업그레이드 상태 조회. |
prepare |
새 롤링 업그레이드 준비. |
finalize |
현재 롤링 업그레이드 종료. |
dfsadmin -getDatanodeInfo
hdfs dfsadmin -getDatanodeInfo <DATANODE_HOST:IPC_PORT>
주어진 데이터노드에 대한 정보를 얻습니다. 이 명령은 Unix의 ping처럼 데이터노드가 살아있는지 확인하는 데 사용할 수 있어요.
dfsadmin -shutdownDatanode
hdfs dfsadmin -shutdownDatanode <DATANODE_HOST:IPC_PORT> [upgrade]
주어진 데이터노드에 종료 요청을 제출합니다. 선택적 upgrade 인자를 지정하면 데이터노드에 접근하는 클라이언트가 재시작을 기다리도록 안내받고 빠른 시작 모드가 활성화됩니다. 재시작이 제때 일어나지 않으면 클라이언트는 타임아웃되어 데이터노드를 무시합니다. 이 경우 빠른 시작 모드도 비활성화됩니다.
이 명령은 데이터노드 종료가 완료될 때까지 기다리지 않습니다. 종료 완료 확인은 "
dfsadmin -getDatanodeInfo" 명령으로 합니다.
NameNode 시작 옵션 (NameNode Startup Options)
namenode -rollingUpgrade
hdfs namenode -rollingUpgrade <rollback|started>
롤링 업그레이드가 진행 중일 때 -rollingUpgrade 네임노드 시작 옵션으로 다양한 롤링 업그레이드 옵션을 지정합니다.
| 옵션 | 설명 |
|---|---|
rollback |
네임노드를 업그레이드 전 릴리스로 되돌리고 사용자 데이터도 업그레이드 전 상태로 되돌림. |
started |
이미 시작된 롤링 업그레이드임을 지정해서, 시작 중에 서로 다른 레이아웃 버전을 가진 이미지 디렉터리를 네임노드가 허용하게 함. |
경고: 다운그레이드 옵션은 더 이상 사용되지 않습니다(obsolete). 네임노드를 명시적으로 downgrade 옵션으로 시작할 필요가 없어요.
더 알아보기 (Learn more)
- 원문: 문서