[태그:] 데이터베이스

  • 몽고디비 서버가 구동되지 않는 오류 해결하기

    개발중인 프로젝트에 도커를 도입하려고 하는데 몽고디비까지 추가해보려고 하다가 원래대로 되돌리려는 중 오류가 발생했습니다.

    몽고디비를 아래과 같이 시작해보면 아무런 반응이 없네요.

    $ sudo systemctl start mongod

    현재 서비스 상태를 확인해 봅니다.

    $ sudo systemctl status mongod
    ● mongod.service - MongoDB Database Server
       Loaded: loaded (/lib/systemd/system/mongod.service; enabled; vendor preset: enabled)
       Active: failed (Result: exit-code) since Fri 2019-04-19 14:00:59 KST; 3min 45s ago
         Docs: https://docs.mongodb.org/manual
      Process: 7925 ExecStart=/usr/bin/mongod --config /etc/mongod.conf (code=exited, status=100)
     Main PID: 7925 (code=exited, status=100)
          CPU: 21ms
    
     4월 19 14:00:59 doogle-ubuntu systemd[1]: Started MongoDB Database Server.
     4월 19 14:00:59 doogle-ubuntu systemd[1]: mongod.service: Main process exited, code=exited, status=100/n/a
     4월 19 14:00:59 doogle-ubuntu systemd[1]: mongod.service: Unit entered failed state.
     4월 19 14:00:59 doogle-ubuntu systemd[1]: mongod.service: Failed with result 'exit-code'.

    서비스가 실패상태입니다. 당연히 몽고디비 서버는 떠있지 않네요.

    로그 기록을 확인해 보면…

    $ sudo tail mongod.log 
    2019-04-19T14:00:59.937+0900 I CONTROL  [initandlisten] build environment:
    2019-04-19T14:00:59.937+0900 I CONTROL  [initandlisten]     distmod: ubuntu1604
    2019-04-19T14:00:59.937+0900 I CONTROL  [initandlisten]     distarch: x86_64
    2019-04-19T14:00:59.937+0900 I CONTROL  [initandlisten]     target_arch: x86_64
    2019-04-19T14:00:59.937+0900 I CONTROL  [initandlisten] options: { config: "/etc/mongod.conf", net: { bindIp: "127.0.0.1", port: 27017 }, processManagement: { timeZoneInfo: "/usr/share/zoneinfo" }, storage: { dbPath: "/var/lib/mongodb", journal: { enabled: true } }, systemLog: { destination: "file", logAppend: true, path: "/var/log/mongodb/mongod.log" } }
    2019-04-19T14:00:59.937+0900 I STORAGE  [initandlisten] exception in initAndListen: IllegalOperation: Attempted to create a lock file on a read-only directory: /var/lib/mongodb, terminating
    2019-04-19T14:00:59.937+0900 I NETWORK  [initandlisten] shutdown: going to close listening sockets...
    2019-04-19T14:00:59.937+0900 I NETWORK  [initandlisten] removing socket file: /tmp/mongodb-27017.sock
    2019-04-19T14:00:59.937+0900 I CONTROL  [initandlisten] now exiting
    2019-04-19T14:00:59.937+0900 I CONTROL  [initandlisten] shutting down with code:100

    밑에서 5번째 줄을 보면 원인을 확인 할 수 있습니다.

    Attempted to create a lock file on a read-only directory: /var/lib/mongodb, terminating

    /var/lib/mongodb 디렉토리가 읽기만 가능해서 lock 파일을 생성할 수 없는거 같네요.

    경로 권한을 확인해 봅니다.

    $ sudo ls -al
    ... (중략)...
    drwxr-xr-x  4           999 mongodb       32768  4월 19 13:34 mongodb/
    ... (중략)...

    보시는 바와 같이 디렉토리 및 하위 파일들 포함 모두 사용자가 바뀌었습니다. 아무래도 도커버전의 몽고디비가 한 짓(?)인거 같네요.

    다음과 같이 권한을 복구해 줍니다.

    $ sudo chown -R mongodb:mongodb mongodb

    이제 다시 서비스를 시작하면 되겠습니다.

    $ sudo systemctl start mongod

    서비스 상태를 봐보면 정상적으로 구동중이라는 것을 확인할 수 있습니다.

    $ sudo systemctl status mongod
    ● mongod.service - MongoDB Database Server
       Loaded: loaded (/lib/systemd/system/mongod.service; enabled; vendor preset: enabled)
       Active: active (running) since Fri 2019-04-19 14:20:36 KST; 13s ago
         Docs: https://docs.mongodb.org/manual
     Main PID: 9963 (mongod)
        Tasks: 27
       Memory: 148.4M
          CPU: 926ms
       CGroup: /system.slice/mongod.service
               └─9963 /usr/bin/mongod --config /etc/mongod.conf
    
     4월 19 14:20:36 doogle-ubuntu systemd[1]: Started MongoDB Database Server.

    리눅스에서는 항상 파일 권한 문제가 생길 수 있습니다. 주의하시기 바랍니다.