Hello 👋

🧑🏻‍💻 A Developers who create code that changes the world

Infrastructure/Nomad

[Nomad] Nomad에서 raw_exec 드라이버 사용

Potato_H 2024. 8. 19. 17:26
raw_exec 드라이버

Nomad에서 Docker 같은 컨테이너 기술 없이, 호스트 머신에서 직접 실행 파일을 구동하는단순한 드라이버

 

/etc/nomad.d 의 경로에서 nomad.hcl 파일을 수정해줘야함
client {
  enabled = true
  servers = ["127.0.0.1"]

  options {
    "driver.raw_exec.enable" = "true"
    "driver.docker.enable" = "false"
  }
}

 

mongodb.nomad file 작성 예시
job "mongodb" {
  # 이 Job은 "mongodb"라는 이름으로 정의되고
  # 실행 위치는 "dc1"이라는 데이터센터(기본값)에 제한됨
  datacenters = ["dc1"]
  type = "service"  # 서비스 형태로 지속적으로 실행되는 작업

  group "mongo-group" {
    count = 1  # 이 task group의 인스턴스를 1개만 실행

    network {
      port "db" {
        static = 27017  # MongoDB의 기본 포트 고정
      }
    }

    task "mongodb" {
      driver = "raw_exec"  # 컨테이너 없이 호스트에서 직접 실행

      config {
        command = "/usr/bin/mongod"  # 실행할 MongoDB 바이너리 절대경로

        # mongod 실행 시 전달할 인자들
        args = [
          "--port", "27017",                   # 포트 설정
          "--dbpath", "/var/lib/mongo/data",   # 데이터 저장 경로
          "--bind_ip", "0.0.0.0",              # 외부 접속 허용
          "--replSet", "rs0"                   # Replica Set 이름 설정
        ]
      }

      resources {
        cpu    = 1000   # CPU 1000MHz 할당 (1 core)
        memory = 2048   # 메모리 2GB 할당
      }

      logs {
        max_files     = 5     # 로그 파일 최대 5개 보관
        max_file_size = 10    # 각 로그 파일 최대 10MB
      }

      service {
        name = "mongo"      # Nomad 서비스 이름
        port = "db"         # 위에서 정의한 27017 포트 사용
        tags = ["database", "mongodb"]  # 서비스 태그로 분류 가능

        check {
          name     = "mongodb-alive"  # 헬스 체크 이름
          type     = "tcp"            # TCP 포트가 열려 있는지 확인
          interval = "10s"            # 10초마다 체크
          timeout  = "2s"             # 2초 내 응답 없으면 실패로 간주
        }
      }
    }
  }
}

 

nomad로 실행하기
nomad job run mongodb.nomad    #해당 명령어로 몽고디비를 nomad로 띄움
mongodb 내리기
nomad job stop mongodb.nomad    #해당 명령어로 몽고디비를 nomad 멈춤
mongodb 재시작
nomad job restart mongodb.nomad    #해당 명령어로 몽고디비 재시작