2017-05-25 11:12:21,218 INFO org.apache.hadoop.hdfs.qjournal.server.JournalNode: registered UNIX signal handlers for [TERM, HUP, INT]
2017-05-25 11:12:21,440 WARN org.apache.hadoop.metrics2.impl.MetricsConfig: Cannot locate configuration: tried hadoop-metrics2-journalnode.properties,hadoop-metrics2.properties
2017-05-25 11:12:21,506 INFO org.apache.hadoop.metrics2.impl.MetricsSystemImpl: Scheduled snapshot period at 10 second(s).
2017-05-25 11:12:21,506 INFO org.apache.hadoop.metrics2.impl.MetricsSystemImpl: JournalNode metrics system started
2017-05-25 11:12:21,715 INFO org.apache.hadoop.hdfs.DFSUtil: Starting Web-server for journal at: http://xcv020.sa.nhnsystem.com:8480
2017-05-25 11:12:21,756 INFO org.mortbay.log: Logging to org.slf4j.impl.Log4jLoggerAdapter(org.mortbay.log) via org.mortbay.log.Slf4jLog
2017-05-25 11:12:21,762 INFO org.apache.hadoop.security.authentication.server.AuthenticationFilter: Unable to initialize FileSignerSecretProvider, falling back to use random secrets.
2017-05-25 11:12:21,768 INFO org.apache.hadoop.http.HttpRequestLog: Http request log for http.requests.journal is not defined
2017-05-25 11:12:21,802 INFO org.apache.hadoop.http.HttpServer2: Added global filter 'safety' (class=org.apache.hadoop.http.HttpServer2$QuotingInputFilter)
2017-05-25 11:12:21,804 INFO org.apache.hadoop.http.HttpServer2: Added filter static_user_filter (class=org.apache.hadoop.http.lib.StaticUserWebFilter$StaticUserFilter) to context journal
2017-05-25 11:12:21,804 INFO org.apache.hadoop.http.HttpServer2: Added filter static_user_filter (class=org.apache.hadoop.http.lib.StaticUserWebFilter$StaticUserFilter) to context logs
2017-05-25 11:12:21,804 INFO org.apache.hadoop.http.HttpServer2: Added filter static_user_filter (class=org.apache.hadoop.http.lib.StaticUserWebFilter$StaticUserFilter) to context static
2017-05-25 11:12:21,819 INFO org.apache.hadoop.http.HttpServer2: Jetty bound to port 8480
2017-05-25 11:12:21,819 INFO org.mortbay.log: jetty-6.1.26.cloudera.4
2017-05-25 11:12:22,014 INFO org.mortbay.log: Started HttpServer2$SelectChannelConnectorWithSafeStartup@xcv020.sa.nhnsystem.com:8480
2017-05-25 11:12:22,045 INFO org.apache.hadoop.ipc.CallQueueManager: Using callQueue class java.util.concurrent.LinkedBlockingQueue
2017-05-25 11:12:22,052 INFO org.apache.hadoop.ipc.Server: Starting Socket Reader #1 for port 8485
2017-05-25 11:12:22,066 INFO org.apache.hadoop.ipc.Server: IPC Server Responder: starting
2017-05-25 11:12:22,066 INFO org.apache.hadoop.ipc.Server: IPC Server listener on 8485: starting
원인
5/25 xract104 제거후 xcv020에게 Journal Node 역할 부여 실패
Journal Node는 3대의 서버로 구성되어 있어야 하는데 3대로 구성은 되어있었으나 xcv020에서 journal node의 역할을 해주지 못하였음.. 기존에 두대가 역할을 하고 있어서 네임노드가 죽는 최악은 발생하지 않았음
하지만 5/29 22시 경 xract105의 journal node 제거해서 하나만의 Journal Node만 동작하였기 때문에NameNode가 죽게 되었음.
요약 : Journal Node의 역할 분배 실패
error log
2017-05-29 22:56:53,275 INFO org.apache.hadoop.hdfs.qjournal.server.JournalNode: Initializing journal in directory /data1/dfs/jn/NCC
2017-05-29 22:56:53,320 WARN org.apache.hadoop.hdfs.server.common.Storage: Storage directory /data1/dfs/jn/NCC does not exist
2017-05-29 22:56:53,349 WARN org.apache.hadoop.security.UserGroupInformation: PriviledgedActionException as:hdfs (auth:SIMPLE) cause:org.apache.hadoop.hdfs.qjournal.protocol.JournalNotFormattedException: Journal Storage Directory /data1/dfs/jn/NCC not formatted
2017-05-29 22:56:53,349 INFO org.apache.hadoop.ipc.Server: IPC Server handler 3 on 8485, call org.apache.hadoop.hdfs.qjournal.protocol.QJournalProtocol.getEditLogManifest from 10.96.16.85:58357 Call#0 Retry#0
org.apache.hadoop.hdfs.qjournal.protocol.JournalNotFormattedException: Journal Storage Directory /data1/dfs/jn/NCC not formatted
at org.apache.hadoop.hdfs.qjournal.server.Journal.checkFormatted(Journal.java:472)
at org.apache.hadoop.hdfs.qjournal.server.Journal.getEditLogManifest(Journal.java:655)
at org.apache.hadoop.hdfs.qjournal.server.JournalNodeRpcServer.getEditLogManifest(JournalNodeRpcServer.java:186)
at org.apache.hadoop.hdfs.qjournal.protocolPB.QJournalProtocolServerSideTranslatorPB.getEditLogManifest(QJournalProtocolServerSideTranslatorPB.java:236)
at org.apache.hadoop.hdfs.qjournal.protocol.QJournalProtocolProtos$QJournalProtocolService$2.callBlockingMethod(QJournalProtocolProtos.java:25431)
at org.apache.hadoop.ipc.ProtobufRpcEngine$Server$ProtoBufRpcInvoker.call(ProtobufRpcEngine.java:617)
at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:1060)
at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2086)
at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2082)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:422)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1671)
at org.apache.hadoop.ipc.Server$Handler.run(Server.java:2080)
해결
xract105 제거를 멈추고 xract105에게 Journal Node 역할 분배를 다시 주었음.
xcv020 Journal Node 설정을 다시 해주고 재시작함 (밑에서 자세히 TODO)
Journal Node 3대 전부 제대로 돌아온 후 NameNode가 다시 살아났음
하지만 5/30 1:50분 아직까지 NameNode xract102(standby)가 safe mode임. (TODO)
Journal Node란
NameNode가 이중화 구성으로 되어있을때, Active와 Standby간에 정보(fsimage, edits logs)를 가지고 있다. Active Server 장애 시점에 Standby Server에 Active Server와 동일한 fsimage, edits logs 정보가 존재해야 한다. 일반적인 구성에서 이 정보는 Active Server에만 있기 때문에 서버 장애 시 어떻게 Standby Server가 이 정보를 가져올 것인가 하는 것을 처리해준다. 즉 이중화(HA) 구성하는데 Journal Node를 이용한다.
Journal Node는 edits정보(파일시스템의 정보)를 저장하고 공유하는 기능을 수행하는 서버
NameNode(active)는 edit log를 JournalNode에 기록
NameNode(standby)는 edit log를 읽어서 fsimage갱신
3대의 서버로 구성됨.
한줄요약 : namenode active, standby 간에 sync를 맞추기 위해 사용함
부여 실패 이유
JournalNode 구성에 가면 dfs.journalnode.edits.dir(현재 path : /data1/dfs/jn) 을 지정할 수 있는데 여기 디렉토리는 만들었으나.. 하위 디렉토리에 대한 정보가 하나도 없었음. 그래서 이 디렉토리 안에 /data1/dfs/jn/{namespace:NCC}/current/VERSION 파일을 복사해주고 부여해야되는데 이 VERSION파일 없이 역할 부여하여 실패하였음.
#Tue May 30 14:57:13 KST 2017 VERSION FILE
namespaceID=1190465890
clusterID=CID-b428f794-25ad-4e6b-bbf9-832cac66d61e
cTime=0
storageType=JOURNAL_NODE
layoutVersion=-60
Namenode 장애로 서비스 영향 및 복구 방법
서비스 영향
namenode가 죽어서 hdfs에 write 하던 작업 실패 났을 것으로 추정
클릭, 노출 로그 저장 실패
stream set 에러 발생
이력 Hbase write 작업(문제시간대에 진행되지 않다가 해결후 진행되었으나 유실된 데이터 있는지 확인 필요)
복구 방법
문제가 되었던 journal node(xcv020)에 VERSION파일을 복사후 journal node 재시작 시행.
증상
원인
해결
Journal Node란
부여 실패 이유
/data1/dfs/jn/{namespace:NCC}/current/VERSION
파일을 복사해주고 부여해야되는데 이 VERSION파일 없이 역할 부여하여 실패하였음.Namenode 장애로 서비스 영향 및 복구 방법
서비스 영향
복구 방법
Journal Node 역할 부여 GUIDE
https://www.cloudera.com/documentation/enterprise/5-5-x/topics/cm_mc_jn.html 위의 링크는 같은 노드에서 journalnode edit dir 옮기는거지만 다른 서버로 옮길때는 이전 editlog들은 옮기기 힘드니 VERSION 파일만 옮기고 시행하면 될듯합니다. (추후 테스트존에서 테스트 후 다시 정리)
testzone에서 진행해본 결과 journal node를 옮기면 namenode를 재시작해야 정상 동작함.... journal노드는 옮기고 정상 동작하려면 namenode를 재시작해야 된다..