management

/usr/local/m2/setting.json 다음 영역에 대해 기술한다.

{
  "env": {
    "management": {
      ...
    }
  }
}

api

API 호출 접근제어를 설정한다.

"api": {
  "port": 10040,
  "defaultRole": "admin",
  "multipartName": "settingFile",
  "allowList": [
    {
      "addr": "192.168.1.1"
    },
    {
      "role": "admin",
      "addr": "192.168.2.1-255"
    },
    {
      "role": "user",
      "addr": "192.168.3.0/24"
    }
  ]
}
port (기본: 10040)

관리 API 포트

defaultRole (기본: admin)

기본 접근권한을 설정한다. 접근권한이 없는 요청에 대해서는 401 Unauthorized 로 응답한다.

  • 역할(role)은 roles 에서 설정한다.

  • allowList[].role 설정을 명시적으로 선언하지 않을 경우 defaultRole 을 참조한다.

multipartName (기본: settingFile)

설정 업로드 에서 사용할 Multipart 이름

allowList

접근제어 목록

role

접근권한

addr

접근 IP 허가

# IP
192.168.1.1

# IP Range
192.168.2.1-255

# IP Bitmask
192.168.3.0/24

# IP Subnet
192.168.4.0/255.255.255.0

roles

API 호출 역할/권한을 설정한다. 다음은 최초 배포되는 setting.json 의 기본 설정이다.

"roles": [
  {
    "name": "admin",
    "permissions": {
      "enableSetting": true,
      "enablePurge": true,
      "enableMetric": true,
      "enableGraph": true,
      "enableMonitoring": true,
      "enableInstall": false,
      "enableRestart": false,
      "enableGet": true
    }
  },
  {
    "name": "user",
    "permissions": {
      "enableMetric": true,
      "enableGraph": true
      "enableMonitoring": true,
      "enableGet": true
    }
  }
]
name

Role 명칭

permissions

API 호출 권한

enableSetting (기본: false)

/setting API 호출 권한

enablePurge (기본: false)

캐싱콘텐츠 무효화 API 호출 권한

enableMetric (기본: false)

/metrics API 호출 권한

enableGraph (기본: false)

/graph API 호출 권한

enableMonitoring (기본: false)

서비스 모니터링 API , 기타 조회 API 호출 권한

enableInstall (기본: false)

패키지 업데이트/재설치 API 호출 권한

enableRestart (기본: false)

패키지 재구동/중지 API 호출 권한

enableGet (기본: true)

/get API alpha 호출 권한

server

독립적으로 가동되는 개별 노드를 중앙집중형으로 관리하는 설정을 기술한다.

{
  "env": {
    "management": {
      "server": {
        "enable": false,
        "features": { ... },
        "events": { ... }
      }
    }
  }
}

enable (기본: false)

  • false (기본) 기능이 비활성화된다.

  • true 기능이 활성화된다.

connection

features , events 에서 공통으로 사용할 연결정보를 관리한다.

{
  "env": {
    "management": {
      "server": {
        "connection": [
          {
            "name": "myKafka",
            "type": "kafka",
            "info": {
              "clientId": "my-app",
              "brokers": [
                "b-1.msk-prod-seoul-so.kafka.ap-northeast-2.amazonaws.com:9092",
                "b-2.msk-prod-seoul-so.kafka.ap-northeast-2.amazonaws.com:9092",
                "b-3.msk-prod-seoul-so.kafka.ap-northeast-2.amazonaws.com:9092"
              ]
            }
          },
          {
            "name": "myFirebase",
            "type": "firebasePubsub",
            "info": {
              "apiKey": "4JVGwsyDDLFgv6PQnLAIza5jZeTASyvdknDiGTB",
              "authDomain": "test-api.firebaseapp.com",
              "databaseUrl": "https://test-api.firebaseio.com",
              "projectId": "test-api",
              "storageBucket": "test-api.appspot.com",
              "messagingSenderId": "374667268081",
              "appId": "1:370817000000:web:d8546f78b2330000000000"
            }
          },
          {
            "name": "myAws",
            "type": "httpAwsSig4",
            "info": {
              "accessKeyId": "key",
              "secretAccessKey": "key",
              "region": "region",
              "bucket": ""
            }
          },
          {
            "name": "myAwsSdk",
            "type": "awssdk3",
            "info": {
              "accessKeyId": "key",
              "secretAccessKey": "key",
              "region": "us-east-1"
            }
          },
        ]
      }
    }
  }
}
name

연결 이름. 중복될 수 없다.

type

kafka 연결

type: kafka 연결에 대해 설정한다.

"info": {
  "clientId": "my-app",
  "brokers": [
    "b-2.msk-prod-seoul-so.rmq7bb.c2.kafka.ap-northeast-2.amazonaws.com:9092",
    "b-5.msk-prod-seoul-so.rmq7bb.c2.kafka.ap-northeast-2.amazonaws.com:9092",
    "b-1.msk-prod-seoul-so.rmq7bb.c2.kafka.ap-northeast-2.amazonaws.com:9092"
  ]
}

Note

M2는 kafkaJS 를 사용하다. 자세한 내용은 링크 를 참조한다.

info

Kafka 연결정보

firebasePubsub 연결

type: firebasePubsub 트리거 연결에 대해 설정한다.

"info": {
  "apiKey": "4JVGwsyDDLFgv6PQnLAIza5jZeTASyvdknDiGTB",
  "authDomain": "test-api.firebaseapp.com",
  "databaseUrl": "https://test-api.firebaseio.com",
  "projectId": "test-api",
  "storageBucket": "test-api.appspot.com",
  "messagingSenderId": "374667268081",
  "appId": "1:370817000000:web:d8546f78b2330000000000"
}

httpAwsSig4 인증

type: httpAwsSig4 연결에 대해 설정한다.

"info": {
  "accessKeyId": "...",
  "secretAccessKey": " ",
  "region": "...",
  "bucket": "..."
}
accessKeyId

AWS 액세스 키

secretAccessKey

AWS 보안 액세스 키

region

AWS 리젼

bucket

AWS 버킷 (단순 인증용이라면 비어있어도 된다.)

awssdk3 인증

AWS SDK for JavaScript v3 를 사용하는 type: awssdk3 연결에 대해 설정한다.

"info": {
  "accessKeyId": "...",
  "secretAccessKey": " ",
  "region": "..."
}
accessKeyId

AWS 액세스 키

secretAccessKey

AWS 보안 액세스 키

region

AWS 리젼

features

기능별로 동기화 구성을 진행한다.

{
  "env": {
    "management": {
      "server": {
        "features": {
          ...
        }
      }
    }
  }
}

Note

모든 polling 방식은 변경지점 보고를 위해 다음과 같이 동작한다.

  • feedUrl 에서 응답한 Last-Modified 헤더를 기억한다.

  • 현재 로딩된 setting.jsonmeta.version 값을 기억한다.

  • polling 시마다 다음과 같이 헤더를 명시한다.

    GET /setting/deploy HTTP/1.1
    If-Modified-Since: {이전 Last-Modified 헤더 }
    X-M2-Setting-Meta-Version: {현재 meta.version의 }
    

setting

설정동기화를 구성한다.

"setting": {
  "enable": false,
  "feed": {
    "type": "",
    "info": { }
  },
  "feedback": {
    "type": "",
    "info": { },
    "uploadSetting": true
  }
}
enable (기본: false)

설정동기화 활성화

feed

설정동기화 감지

type

설정동기화 감지타입. ( setting.feed 포맷 참조)

  • apiPolling API를 GET 메소드로 polling 한다.

    "info": {
      "url": "https://example.com/setting/deploy",
      "schedule": "*/15 * * * * *",
      "timeout": 5
    }
    
    • url polling URL

    • schedule polling 스케쥴. cron 형식

    • timeout HTTP 트랜잭션 타임아웃

  • tgzPolling 설정패키지를 GET 메소드로 폴링한다.

    "info": {
      "url": "https://example.com/setting/setting.tgz",
      "schedule": "*/15 * * * * *",
      "timeout": 5
    }
    
    • url polling URL

      Warning

      서버는 응답 데이터로 설정패키지 tgz 파일을 전송해야 한다.

    • schedule polling 스케쥴. cron 형식

    • timeout HTTP 트랜잭션 타임아웃

  • kafkaSub Kafka 이벤트를 subscribe 한다.

    "info": {
      "connect": "myKafka",
      "groupId": "prd.itemimg.consumer.grp",
      "subscribe": {
        "topic": "prd.m2.event.changed",
        "fromBeginning": true
      }
    }
    
    • connect kafka 연결명. connectiontype: kafkaname 만 가능하다.

    • groupId kafka 그룹ID

    • subscribe kafka 수신정보

  • firestore firestore 로부터 이벤트를 subscribe 한다.

    "info": {
      "connect": "myFirebase",
      "doc": "m2nodes/4FD30000-5B00-1100-8200-5404A600000/events"
    }
    
    • connect firestore 연결명. connectiontype: firebasePubsubname 만 가능하다.

    • doc 수신(listen) 할 document

    Note

    M2Live에 연결된 노드라면 #m2live.nodeId 키워드로 개별노드 이벤트를 수신할 수 있다.

    "info": {
      "connect": "myFirebase",
      "doc": "m2nodes/#m2live.nodeId/events"
    }
    
info

설정동기화 감지정보

feedback

설정동기화 결과 피드백. ( setting.feedback 포맷 참조)

type

설정동기화 결과 피드백 타입

  • api API를 POST 메소드로 호출한다.

    "info": {
      "url": "https://example.com/setting/feedback",
      "timeout": 5
    }
    
    • url 설정동기화 후 호출할 URL

    • timeout HTTP 트랜잭션 타임아웃

  • kafkaPub Kafka로 publish한다.

    "info": {
      "connect": "myKafka",
      "topic": "prd.m2.awscdn.event.changed"
    }
    
    • connect kafka 연결명. connectiontype: kafkaname 만 가능하다.

    • topic kafka topic

  • firestore firestore로 피드백 한다.

    "info": {
      "connect": "myFirebase",
      "doc": "m2nodes/4FD30000-5B00-1100-8200-5404A600000/events"
    }
    
    • connect firestore 연결명. connectiontype: firebasePubsubname 만 가능하다.

    • doc feedback을 기록할 document

info

설정동기화 결과 피드백

uploadSetting (기본: true)

false 라면 설정변경 후 피드백 시점에 setting.json 을 같이 보고한다.

purge

캐싱콘텐츠 무효화 API 를 구성한다.

"purge": {
  "enable": false,
  "workerCount": 2
  "feed": {
    "type": "",
    "info": { }
  },
  "feedback": {
    "type": "",
    "info": { }
  }
}
enable (기본: false)

콘텐츠무효화 활성화

workerCount (기본: 2)

worker 수. 0 으로 설정할 경우 CPU 개수만큼 생성된다.

feed

콘텐츠무효화 감지 ( purge.feed 포맷 참조)

type

콘텐츠무효화 감지타입

  • apiPolling API를 GET 메소드로 polling 한다.

    "info": {
      "url": "https://example.com/purge",
      "schedule": "*/15 * * * * *",
      "timeout": 5
    }
    
    • url polling URL

    • schedule polling 스케쥴. cron 형식

    • timeout HTTP 트랜잭션 타임아웃

  • kafkaSub Kafka 이벤트를 subscribe 한다.

    "info": {
      "connect": "myKafka",
      "groupId": "prd.itemimg.consumer.grp",
      "subscribe": {
        "topic": "prd.m2.event.changed",
        "fromBeginning": true
      }
    }
    
    • connect kafka 연결명. connectiontype: kafkaname 만 가능하다.

    • groupId kafka 그룹ID

    • subscribe kafka 수신정보

info

콘텐츠무효화 감지정보

feedback

콘텐츠무효화 결과 피드백

type

콘텐츠무효화 결과 피드백 타입 ( purge.feedback 포맷 참조)

  • api API를 POST 메소드로 호출한다.

    "info": {
      "url": "https://example.com/setting/feedback",
      "timeout": 5
    }
    
    • url 설정동기화 후

    • timeout HTTP 트랜잭션 타임아웃

  • kafkaPub Kafka로 publish한다.

    "info": {
      "connect": "myKafka",
      "topic": "prd.m2.awscdn.event.changed"
    }
    
    • connect kafka 연결명. connectiontype: kafkaname 만 가능하다.

    • topic kafka topic

heartbeat

일정주기마다 heartbeat 를 전송한다.

"heartbeat": {
  "enable": false,
  "feedback": {
    "type": "",
    "info": { }
  }
}
enable (기본: false)

heartbeat 활성화

feedback

heartbeat 보고방법

type

heartbeat 타입 ( heartbeat.feedback 포맷 참조)

  • apiPolling 대상 API를 주기적으로 POST 메소드로 호출한다.

    "info": {
      "url": "https://example.com/heartbeat/feedback",
      "timeout": 5,
      "schedule": "*/15 * * * * *"
    }
    
    • url 보고 URL

    • timeout HTTP 트랜잭션 타임아웃

    • schedule heartbeat 스케쥴. cron 형식

  • kafkaPub Kafka로 publish한다.

    "info": {
      "connect": "myKafka",
      "topic": "prd.m2.awscdn.event.changed",
      "schedule": "*/15 * * * * *"
    }
    
    • connect kafka 연결명. connectiontype: kafkaname 만 가능하다.

    • topic kafka topic

  • firestore firestore로 피드백 한다.

    "info": {
      "connect": "myFirebase",
      "doc": "m2nodes/4FD30000-5B00-1100-8200-5404A600000/events",
      "schedule": "*/15 * * * * *"
    }
    
    • connect firestore 연결명. connectiontype: firebasePubsubname 만 가능하다.

    • doc feedback을 기록할 document

nodelist

동적노드 리스트 변경을 감지한다.

"nodelist": {
  "enable": false,
  "feed": {
    "type": "",
    "info": { }
  },
  "feedback": {
    "type": "",
    "info": { }
  }
}
enable (기본: false)

동적노드 리스트 활성화

feed

동적노드 리스트 감지

type

동적노드 리스트 감지타입

info

동적노드 리스트 감지 정보

  • typeawssdk3 인 경우

    "info": {
      "connect": "myAwsSdk",
      "tag": "type=parent;type=child;",
      "schedule": "*/15 * * * * *"
    }
    
    • connect AWS SDK for JavaScript v3 연결명. connectiontype: awssdk3name 만 가능하다.

    • tag 필터링할 태그목록. 키와 값이 모두 존재한다면 키=값; 또는 키만 존재한다면 키=; 를 설정한다.

    Note

    아래 정책을 모두 만족하는 인스턴스를 사용한다.

    • Reservations[].Instances[].Tags[] 의 값이 tag 목록 중 하나와 일치

    • Reservations[].Instances[].State.Code 의 값이 16

    • Reservations[].Instances[].State.Name 의 값이 Running

    • Reservations[].Instances[].PrivateIpAddress

    Warning

    인스턴스 재기동으로 인한 노드 중단은 DescribeInstancesCommand 로 정확히 감지가 어렵다. exclusion 기능을 통해 중단된 서버가 자동 배제/복구되긴 하지만 가급적 재부팅 전후에 Tag 제거/복구 작업을 병행하도록 권장한다.

    • schedule polling 스케쥴. cron 형식

feedback

동적노드 리스트 피드백

type

동적노드 리스트 피드백 타입

  • setting 설정을 변경한다.

  • api API를 POST 메소드로 호출한다.

Note

설정변경 후 API호출을 동시에 진행하고 싶다면 다음과 같이 결합하여 설정한다.

"type": "setting;api;"
info

동적노드 리스트 피드백 정보

  • typesetting 인 경우

    "info": {
      "hosting": [
        {
          "name": "foo.com",
          "field": "origin.address"
        },
        {
          "name": "bar.com",
          "field": "origin.address"
        }
      ]
    }
    

    setting.json 형상을 변경하는 것이 아니라 구동되는 가상호스트 런타임 정보만을 수정한다.

    • hosting[].name 설정을 변경할 가상호스트

    • hosting[].field 설정필드. 현재는 origin.address 만 지원한다.

  • typeapi 인 경우 ( nodelist.feedback 포맷 포맷 참조)

    "info": {
      "url": "https://example.com/nodelist/feedback",
      "timeout": 5
    }
    

events

특정 이벤트가 발생하는 시점에 약속된 동작을 수행한다.

{
  "env": {
    "management": {
      "server": {
        "events": {
          ...
        }
      }
    }
  }
}

onSettingLoad

설정변경 이벤트가 발생할 경우 설정패키지를 백업한다.

"onSettingLoad": {
  "backup": {
    "enable": false,
    "hostname": "",
    "auto": true,
    "connect": "myStorage",
    "path": "",
    "timeout": 30
  }
}
backup

백업 정책.

Note

  1. 모든 설정을 tgz 파일로 압축하고 파일명을 ISO8601 형식(특수문자 제거)으로 변경한다.

    setting_20220713T141030000Z.tgz
    
  2. tgz 파일을 {bucket} 의 다음 경로로 업로드한다.

    /{path}/settings/{yyyy}/{mm}/setting_20220713T141030000Z.tgz
    
  3. setting.feed 포맷 파일을 다음 경로로 업로드한다.

    /{path}/feed.json
    
enable (기본: false)

AWS S3 백업기능 활성화

hostname

동일한 hostname에서만 동작한다.

Warning

이 값을 지정하지 않고 설정이 동기화된다면 모든 노드가 설정을 백업하게 되므로 주의해야 한다.

auto (기본: true)

모든 설정변경 후 자동으로 설정을 백업한다.

Note

false 인 경우 설정은 명시적으로 백업해야 한다.

connect

httpAwsSig4 인증 연결명

path

설정업로드 경로

timeout (기본: 30초)

타임아웃. 트랜잭션이 실패하면 설정을 백업하기 위해 계속 시도한다.

onPurgeRequest

캐싱콘텐츠 무효화 API 호출을 받은 경우 API를 전파한다.

"onPurgeRequest": {
  "propagation": {
    "enable": false,
    "nodelist": [ "1.1.1.1", "1.1.1.2" ]
  }
}

Warning

이 기능은 소규모 서비스 용도로 최대 8기 까지만 구성이 가능하다.

  • 전파시점은 API 요청이 인지되는 시점으로 실행 이전이다.

  • 단 1회만 전파된다.

  • 내 IP로는 전파되지 않는다.

  • 대상서버의 수신을 보장하지 않는다.

propagation

캐싱콘텐츠 무효화 API 전파설정

enable

캐싱콘텐츠 무효화 API 전파를 활성화한다.

nodelist (최대 8개)

자신을 포함한 전파대상 노드 리스트

메시지 포맷 v1

동기화 과정에서 사용되는 메시지 포맷에 대해 기술한다. 메시지 포맷은 공통규격을 가진다.

{
  "messageVer": "1",
  "timestamp": "2022-07-13T14:10:30.000Z",
  "node": {
    "productVer": "2.8.1",
    "settingVer": "2022-06-21-A",
    "hostname": "test",
    "iplist": ["10.10.10.1", "10.10.10.2"]
  },
  "userdata": null,
  "action": {
    "api": "",
    "event": ""
  },
  "parameters": [ ]
}
messageVer (기본: "1")

버전. 항상 1이다.

timestamp

응답시점의 서버 타임스탬프 ISO Date 형식이다.

node

(피드백 메시지에만 명시) 메시지를 수신한 노드 정보

productVer (기본: "1")

M2 제품버전

settingVer

setting 버전 버전. 항상 1이다.

hostname

노드 호스트네임

iplist

IP 리스트

userdata

유저 데이터. 수신받은 userdatafeedback 호출 메시지에 그대로 포함된다.

action

노드에 전달할 행위

api

호출할 M2 API

event

(피드백 메시지에만 명시) action 이 수행된 이벤트. event 종류는 다음과 같다.

action.event

설명

/env/management/server/apiPolling/{name}

중앙서버로부터 api polling

/env/management/server/tgzPolling/{name}

중앙서버로부터 tgz polling

/env/management/server/kafkaSub/{name}

중앙서버로부터 kafka subscribe

/_api_/{api}

API 직접호출

/_sys_/bootup

서비스 재기동

/_sys_/cli/{command}

CLI 호출 (구분자는 .)

parameters

api 의 파라미터 리스트로 수행된 결과는 각 배열의 아이템에 result 로 추가된다.

setting.feed 포맷

feed 포맷은 다음과 같다.

{
  "messageVer": "1",
  "userdata": null,
  "action": {
    "api": "/setting/upload"
  },
  "timestamp": "2022-07-13T14:10:30.000Z",
  "parameters": [
    {
      "url": "http://www.example.com/m2pkg_v10.tgz",
    }
  ]
}
action
api

/setting/upload 를 사용한다.

parameters[].url

다운로드 받을 설정패키지 URL.

/setting/import API를 사용하려면 리소스 게시 및 암호화 정책등이 모두 준비되어 있어야 한다.

{
  "messageVer": "1",
  "action": {
    "api": "/setting/import"
  }
}

이 경우 setting.feed 는 Notification으로만 사용되며, setting.feedback 은 동일하다.

setting.feed 포맷 deploy checkout

git 리파지토리가 연결된 상태라면, /setting/deploy/checkout API를 이용해 설정동기화를 진행한다.

{
  "messageVer": "1",
  "timestamp": "2022-07-13T14:10:30.000Z",
  "userdata": null,
  "action": {
    "api": "/setting/deploy/checkout"
  }
}

이 경우 setting.feed 는 Notification으로만 사용되며, setting.feedback 은 동일하다.

setting.feedback 포맷

Note

feedback.typeapi 인 경우 POST 메소드로 다음과 같이 요청한다.

POST /{env.management.server.featrues.setting.feedback.info.url} HTTP/1.1
Content-Type: application/json
Host: example.com
Connection: keep-alive
Content-Length: 645

업로드되는 메시지 규격은 다음과 같다.

{
  "messageVer": "1",
  "node": {
    "productVer": "2.8.1",
    "settingVer": "2022-06-21-A",
    "licenseId": "KR200099999",
    "hostname": "test",
    "iplist": ["10.10.10.1", "10.10.10.2"]
  },
  "userdata": null,
  "action": {
    "api": "/setting/upload",
    "event": "/env/management/server/kafkaSub/myKafka"
  },
  "parameters": [
    {
      "url": "http://www.example.com/m2pkg_v10.tgz",
      "result": {
        "version": "22.02.0",
        "method": "deploy",
        "status": "ok",
        "lastModified": "Tue, 15 Oct 2022 12:45:26 GMT",
        "version": 10
      }
    }
  ],
  "setting": null
}
action
event

설정변경 이벤트 시점

  • /_sys_/bootup 솔루션 재기동 시점

  • /env/management/server/{type}/{name} 최초 연결 또는 feed 수신 시점

result

수행결과

version

M2 버전

method

M2 실행모듈명

status

성공인 경우 ok , 이외엔 실패 이유

lastModified

설정패키지의 Last-Modified 헤더 값

version

반영된 setting.jsonmeta.version

Note

setting .feedback.uploadSetting 설정이 true 라면 다음과 같이 로딩된 setting.json 이 메시지에 추가된다.

{
  "messageVer": "1",
  ... (생략) ...
  "setting": {
    "meta": ...,
    ...
    "hosting": [
      ...
    ]
  }
}

purge.feed 포맷

feed 메시지 규격은 다음과 같다.

{
  "messageVer": "1",
  "timestamp": "2022-07-13T14:10:30.000Z",
  "userdata": null,
  "action": {
    "api": "/command/purge",
  },
  "parameters": [
    {
      "url": "http://www.site1.com/image.jpg",
    },
    {
      "url": "www.site1.com/image/*.bmp"
    },
    {
      "url": "www.site2.com/page/*.html"
    }
  ]
}

purge.feedback 포맷

Note

feedback.typeapi 인 경우 POST 메소드로 다음과 같이 요청한다.

POST /{env.management.server.featrues.purge.feedback.info.url} HTTP/1.1
Content-Type: application/json
Host: example.com
Connection: keep-alive
Content-Length: 457

feedback 은 메시지 포맷은 다음과 같다.

{
  "messageVer": "1",
  "node": {
    "productVer": "2.8.1",
    "settingVer": "2022-06-21-A",
    "licenseId": "KR200099999",
    "hostname": "test",
    "iplist": ["10.10.10.1", "10.10.10.2"]
  },
  "userdata": null,
  "action": {
    "api": "/command/purge",
    "event": "/env/management/server/kafkaSub/myKafka"

  },
  "parameters": [
    {
      "url": "http://www.site1.com/image.jpg",
      "result": {
        "version": "22.02.0",
        "method": "purge",
        "status": "OK",
        "result": {
          "count": 3,
          "size": 77656899,
          "time": 12
        }
      }
    },
    {
      "url": "www.site1.com/image/*.bmp",
      "result": {
        "version": "22.02.0",
        "method": "purge",
        "status": "Bad Gateway",
        "result": {
          "count": 1,
          "size": 1024,
          "time": 1
        }
      }
    },
    {
      "url": "www.site2.com/page/*.html",
      "result": {
        "version": "22.02.0",
        "method": "purge",
        "status": "OK",
        "result": {
          "count": 0,
          "size": 0,
          "time": 0
        }
      }
    }
  ]
}

heartbeat.feedback 포맷

Note

feedback.typeapi 인 경우 POST 메소드로 다음과 같이 요청한다.

POST /{env.management.server.featrues.heartbeat.feedback.info.url} HTTP/1.1
Content-Type: application/json
Host: example.com
Connection: keep-alive
Content-Length: 210

feedback 포맷은 다음과 같다.

{
  "messageVer": "1",
  "node": {
    "productVer": "2.8.1",
    "settingVer": "2022-06-21-A",
    "licenseId": "KR200099999",
    "hostname": "test",
    "iplist": ["10.10.10.1", "10.10.10.2"]
  }
}

nodelist.feedback 포맷

Note

feedback.typeapi 인 경우 POST 메소드로 다음과 같이 요청한다.

POST /{env.management.server.featrues.nodelist.feedback.info.url} HTTP/1.1
Content-Type: application/json
Host: example.com
Connection: keep-alive
Content-Length: 457

feedback 은 메시지 포맷은 다음과 같다. hosting[].updated.values 의 값이 nodelist 값으로 일괄 변경된다.

{
  "messageVer": "1",
  "node": {
    "productVer": "2.8.1",
    "settingVer": "2022-06-21-A",
    "licenseId": "KR200099999",
    "hostname": "test",
    "iplist": ["10.10.10.1", "10.10.10.2"]
  },
  "nodelist": [ "5.5.5.5", "6.6.6.6", "7.7.7.7" ];
  "hosting": [
    {
      "name": "foo.com",
      "updated": {
        "field": "origin.address",
        "values": [ "10.10.10.10", "10.10.10.11" ]
      }
    },
    {
      "name": "bar.com",
      "updated": {
        "field": "origin.address",
        "values": [ "10.10.10.11", "10.10.10.12" ]
      }
    }
  ]
}

cluster

동일한 목적의 노드를 클러스터로 구성, 관리하는 방법에 대해 기술한다.

Note

cluster 구성에서 동작하는 기능 목록

  • 중단없는 process .rt 프로세스 재기동 지원

meta

"meta": {
  "enable": false,
  "baseHostingPort": 9000
}
enable (기본: false)

클러스터링 기능을 활성화한다.

baseHostingPort (기본: 9000)

클러스터링 기능이 활성화되면 hosting 은 지정된 포트를 기준으로 listen 포트를 사용한다.

discover

"discover": {
  "port": 9900,
  "members": [ "50.116.40.137", "172.105.158.148" ]
}
port (기본: 9900)

클러스터링 관리포트

members (기본: null)

null 이라면 broadcast로 멤버를 찾으며, IP가 지정되면 unicast로 멤버와 통신한다.