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 포트
Hint
RT의 포트는 노출된 포트에서 -1한다. RT는 M2M에서만 호출가능하도록 loopback만을 연다.
# server.xml - <Server> <Host> <Manager Port="10039" /> </Host>
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
- kafka 연결
firebasePubsub
- firebasePubsub 연결
httpAwsSig4
- httpAwsSig4 인증
awssdk3
- awssdk3 인증
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"
]
}
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.json
의meta.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 URLschedule
polling 스케쥴. cron 형식timeout
HTTP 트랜잭션 타임아웃
tgzPolling
설정패키지를GET
메소드로 폴링한다."info": { "url": "https://example.com/setting/setting.tgz", "schedule": "*/15 * * * * *", "timeout": 5 }
url
polling URLWarning
서버는 응답 데이터로 설정패키지
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 연결명. connection 중type: kafka
인name
만 가능하다.groupId
kafka 그룹IDsubscribe
kafka 수신정보
firestore
firestore 로부터 이벤트를 subscribe 한다."info": { "connect": "myFirebase", "doc": "m2nodes/4FD30000-5B00-1100-8200-5404A600000/events" }
connect
firestore 연결명. connection 중type: firebasePubsub
인name
만 가능하다.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
설정동기화 후 호출할 URLtimeout
HTTP 트랜잭션 타임아웃
kafkaPub
Kafka로 publish한다."info": { "connect": "myKafka", "topic": "prd.m2.awscdn.event.changed" }
connect
kafka 연결명. connection 중type: kafka
인name
만 가능하다.topic
kafka topic
firestore
firestore로 피드백 한다."info": { "connect": "myFirebase", "doc": "m2nodes/4FD30000-5B00-1100-8200-5404A600000/events" }
connect
firestore 연결명. connection 중type: firebasePubsub
인name
만 가능하다.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 URLschedule
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 연결명. connection 중type: kafka
인name
만 가능하다.groupId
kafka 그룹IDsubscribe
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 연결명. connection 중type: kafka
인name
만 가능하다.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
보고 URLtimeout
HTTP 트랜잭션 타임아웃schedule
heartbeat 스케쥴. cron 형식
kafkaPub
Kafka로 publish한다."info": { "connect": "myKafka", "topic": "prd.m2.awscdn.event.changed", "schedule": "*/15 * * * * *" }
connect
kafka 연결명. connection 중type: kafka
인name
만 가능하다.topic
kafka topic
firestore
firestore로 피드백 한다."info": { "connect": "myFirebase", "doc": "m2nodes/4FD30000-5B00-1100-8200-5404A600000/events", "schedule": "*/15 * * * * *" }
connect
firestore 연결명. connection 중type: firebasePubsub
인name
만 가능하다.doc
feedback을 기록할 document
nodelist¶
동적노드 리스트 변경을 감지한다.
"nodelist": {
"enable": false,
"feed": {
"type": "",
"info": { }
},
"feedback": {
"type": "",
"info": { }
}
}
enable (기본: false)
동적노드 리스트 활성화
feed
동적노드 리스트 감지
type
동적노드 리스트 감지타입
awssdk3
DescribeInstancesCommand 를 사용하여 인스턴스 목록을 조회한다.
info
동적노드 리스트 감지 정보
type
이awssdk3
인 경우"info": { "connect": "myAwsSdk", "tag": "type=parent;type=child;", "schedule": "*/15 * * * * *" }
connect
AWS SDK for JavaScript v3 연결명. connection 중type: awssdk3
인name
만 가능하다.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
동적노드 리스트 피드백 정보
type
이setting
인 경우"info": { "hosting": [ { "name": "foo.com", "field": "origin.address" }, { "name": "bar.com", "field": "origin.address" } ] }
setting.json
형상을 변경하는 것이 아니라 구동되는 가상호스트 런타임 정보만을 수정한다.hosting[].name
설정을 변경할 가상호스트hosting[].field
설정필드. 현재는origin.address
만 지원한다.
type
이api
인 경우 ( 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
모든 설정을
tgz
파일로 압축하고 파일명을ISO8601
형식(특수문자 제거)으로 변경한다.setting_20220713T141030000Z.tgz
tgz
파일을{bucket}
의 다음 경로로 업로드한다./{path}/settings/{yyyy}/{mm}/setting_20220713T141030000Z.tgz
setting.feed 포맷 파일을 다음 경로로 업로드한다.
/{path}/feed.json
enable (기본: false)
AWS S3 백업기능 활성화
hostname
동일한 hostname에서만 동작한다.
Warning
이 값을 지정하지 않고 설정이 동기화된다면 모든 노드가 설정을 백업하게 되므로 주의해야 한다.
auto (기본: true)
모든 설정변경 후 자동으로 설정을 백업한다.
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
유저 데이터. 수신받은
userdata
는feedback
호출 메시지에 그대로 포함된다.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.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.type
이 api
인 경우 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.json
의meta.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.type
이 api
인 경우 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.type
이 api
인 경우 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.type
이 api
인 경우 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¶
동일한 목적의 노드를 클러스터로 구성, 관리하는 방법에 대해 기술한다.
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로 멤버와 통신한다.