Consuul의 리더 노드에서만 명령 실행

3265 단어 consul
단지 지도자의 명령을 집행하고 싶을 뿐이다
컨suul의 요구와 같지는 않지만, 특정 노드(이번엔 리더)를 어디서든 명령만 점화시키고 싶어 그걸 실현하기 위한 노트다.
지도자의 노드명을 알고 싶다
특정 노드에서 특정 명령을 실행하려면 consul exec의 노드 옵션을 지정하는 것이 좋습니다.
그러나 지도자의 노드명을 한꺼번에 얻지 못하기 때문에 다음과 같은 절차를 통해 얻어야 할 수도 있다.
1. 리더 IP 획득
status API에서 얻다.1
$ curl https://consul.rocks/v1/status/leader

"10.10.10.1:8300"
2. 리더 노드 이름 가져오기
Agent Members API에서 리더를 뽑는 멤버를 얻습니다Name2
$ curl https://consul.rocks/v1/agent/members

[
  {
    "Name": "foobar",
    "Addr": "10.10.10.1",
    "Port": 8301,
    "Tags": {
      "bootstrap": "1",
      "dc": "dc1",
      "port": "8300",
      "role": "consul"
    },
    "Status": 1,
    "ProtocolMin": 1,
    "ProtocolMax": 2,
    "ProtocolCur": 2,
    "DelegateMin": 1,
    "DelegateMax": 3,
    "DelegateCur": 3
  }
]
jq로 한번 얻으려면 이런 느낌인가요?
$ curl -s localhost:8500/v1/agent/members | jq -r '.[] | if .Addr == "<リーダーIP>" then .Name else empty end
이렇게 하면 지도자의 노드명을 얻을 수 있다.
특정 노드에서 특정 명령 실행하기
이것은 consul exec에서 -node 옵션을 지정하면 됩니다.
consul exec -node="<リーダーのノード名>" "<お好きなコマンド>"

이번 경우consul exec 서버 노드 전체(ex.consull-server-*)를 와일드카드 문자로 필터링해'수행하는 지령 내에서 자신이 리더인지 아닌지','자신이 리더일 때만 실행'등의 수법이 컨sul에 비교된다.
또 다른 좋은 방법이 있으면 알려주세요
왜 노드 이름을 붙이지 않았을까...
왜 필터가 안 되지...

좋은 웹페이지 즐겨찾기