본문으로 건너뛰기

redis

약 4 분NomadSampleJob

redis

  • 추가내용: redis는 data dir, cluster info dir(클러스터 시) 이 두개의 dir가 필요하여 volume을 추가로 붙여줘야한다.
    • data dir을 변경이 번거로움(docker build를 다시 해야함) 그래서 클러스터 시에는 docker build, nomad volume으로 나눔과 같은 방법이 있음
    • cluster-enabled : 클러스터로 사용합니다. (cluster volume으로 빼둬야됨)
    • cluster-config-file : 노드별로 클러스터 노드 정보를 conf 파일에 저장합니다.
    • cluster-node-timeout : 노드간 통신이 되지 않아 timeout 되는 시간을 설정합니다.
job "redis-cluster" {

  datacenters = ["dc1"]

  group "redis" {

    volume "redis-data" {
      type      = "host"
      source    = "redis-data"
      read_only = false
    }

    volume "redis-cluster" {
      type      = "host"
      source    = "redis-cluster"
      read_only = false
    }

    network {
      
      port "master" {
        to     = 6379
      }
      port "slave" {
        to     = 6380
      }
    }
    service {
      name = "master-redis"
      tags = ["master-redis"]
      port     = "master"
      check {
        port     = "master"
        type     = "tcp"
        interval = "10s"
        timeout  = "2s"
      }
    }

    service {
      name = "slave-redis"
      tags = ["slave-redis"]
      port     = "slave"
      check {
        port     = "slave"
        type     = "tcp"
        interval = "10s"
        timeout  = "2s"
      }
    }



    task "redis-master" {
      volume_mount {
        volume      = "redis-data"
        destination = "/data"
      }
      volume_mount {
        volume      = "redis-cluster"
        destination = "/master"
      }
      driver = "docker"
      config {
        network_mode = "host"
        image = "redis:5.0.5-buster"
        ports = ["master"]
        command = "redis-server"
        args = [
          "${NOMAD_TASK_DIR}/redis.conf"
        ]
      }
      template {
        data = <<EOF
port {{ env "NOMAD_PORT_master" }} 
bind {{ env "NOMAD_IP_master" }} 
#bind 127.0.0.1 ::1
cluster-enabled yes
cluster-config-file /master/nodes.conf
cluster-node-timeout 3000
appendonly yes

EOF

        destination   = "local/redis.conf"
        change_mode   = "signal"
        change_signal = "SIGHUP"
      }

      resources {
        cpu = 1000
        memory = 1001
      }
    }
    task "redis-slave" {

      volume_mount {
        volume      = "redis-data"
        destination = "/data"
      }
      volume_mount {
        volume      = "redis-cluster"
        destination = "/slave"
      }
      env {
        NODE_IP = "${NOMAD_IP_slave-redis}"
      }
      driver = "docker"
      config {
        network_mode = "host"
        image = "redis:5.0.5-buster"
        ports = ["slave"]
        command = "redis-server"
        args = [
          "${NOMAD_TASK_DIR}/redis.conf"
        ]
      }
      template {
        data = <<EOF
port {{ env "NOMAD_PORT_slave" }} 
bind  {{ env "NOMAD_IP_slave" }} 
#bind  127.0.0.1 ::1
cluster-enabled yes
cluster-config-file /slave/nodes.conf
cluster-node-timeout 3000
appendonly yes

EOF

        destination   = "local/redis.conf"
        change_mode   = "signal"
        change_signal = "SIGHUP"
      }

      resources {
        cpu = 1000
        memory = 1001
      }
    }
  }
}