Cosul by HashiCorp~ 서비스·할인 발리 입문~

14708 단어 consul
누구?
  • Masahito Zembutsu

  • @zembutsu(개인용)
  • 모 회사의 Technology Evangelist작업
  • HashiCorp 및 Docker의 문서 번역 및 기술 검증

  • https://pocketstudio.net
  • http://docs.docker.jp
  • 이전 슬라이드

  • http://www.slideshare.net/zembutsu
  • Topics
  • HashiCorp
  • Consuul 개요
  • 개발 배경
  • 아키텍처
  • Consuul에서 서비스 등록
  • Consul Template
  • HashiCorp
  • 회사는 2012년 설립
  • Mitchell Hashimoto 및 Armon Dadger
  • 데이터 센터 관리에 혁명
  • 디자인 사상은The tao of HashiCorp(Workflows, not Technologies와 인프라 시설의 인코딩)
  • 개방원의 기본 기술을 바탕으로 개방된 개발 체제(2010년부터)

  • Consul
    이른바 Consuul
  • https://www.consul.io/

  • 인프라 시설의 서비스 설정과 서비스 할인을 위한 도구
  • Consul has multiple components, but as a whole, it is a tool for discovering and configuring services in your infrastructure.

  • 개방원으로 개발, 공개

  • https://github.com/hashicorp/consul
  • Mozilla Public License, version 2.0
  • Consuul 기능
  • 서비스 검색 및 공개
  • 건강검진
  • 주요 가치 스토어
  • 장애성 저항
  • 할인
  • Consuul 고객은 "api", "mysiql"등 서비스를 정의했다
  • 다른 클라이언트는 Consuul에서 특정 서비스를 검색할 수 있습니다.
  • DNS, HTTP, API를 통해 서비스 정보를 파악할 수 있음
  • Serf의 공개 기능 그룹
  • 건강 검진
  • 고객이 상태 점검(셸 스크립트 또는 Nagios 플러그인)을 통해 모니터링 서비스
  • 서비스 검색과 연계하여 모니터링 상태가 즉시 반영됨
  • 그러나 일반적인 감시 시스템과는 다르다
  • 노드(에이전트) 서버로 상태 전송
  • 서버는 항상 데이터만 유지
  • 핵심 가치 상점
  • Consuul 내부 데이터를 보관하는 등급별 핵심 가치 상점
  • 동적 설정 변경, 리더 기능
  • HTTP 및 API를 통한 간편한 액세스
  • 장애에 저항하다
  • Raft 프로토콜(분산 프로토콜 알고리즘)을 이용하여 데이터의 가용성을 높이는 메커니즘
  • 리더십 선거
  • 로그의 응용
  • Gossip 프로토콜을 사용하는 메커니즘
  • 이벤트 발송
  • 장애 감지
  • 여러 데이터 센터(네트워크)에서 간단히 사용 가능(데이터 센터의 개념)

  • 아키텍처
  • 클라이언트 서버 유형의 분산/고가용성 시스템
  • 각 노드에서 Consuul 에이전트 실행
  • Consuul은 단일 바이너리(추가 소프트웨어 필요 없음)
    에이전트가 Consuul 서버와 통신
  • Consuul 서버가 데이터를 보관하고 복제하는 장소
  • 서버 자체 선택 리더기
  • 일반적으로 데이터 손실을 방지하기 위해 서버 3, 5대
  • 를 권장합니다.


    다른 도구와 비교
  • Go 언어로 쓰기
  • 바이너리 하나
  • 간편한 설치 및 관리
  • 서비스 검색
  • 으로 기능 특화
    Consuul 사용
    다운로드
  • Consuul 웹 사이트에서 각 아키텍처의 바이너리 정보 얻기
  • https://www.consul.io/downloads.html
  • 다운로드한 ZIP 압축 해제
  • 권한 확인
  • 경로 통과 위치
  • consul 에이전트 실행
  • Linux의 예
    $ wget -O conzul.zip https://releases.hashicorp.com/consul/0.6.4/consul_0.6.4_linux_amd64.zip
    $ unzip consul.zip
    $ ./consul version
    Consul v0.6.4
    Consul Protocol: 3 (Understands back to: 1)
    $ nohup consul agent -server \
        -data-dir="/tmp/consul" \
        -bootstrap-expect 1 \
        -node=consul1 \
        -config-dir=/etc/consul.d &
    $ ./consul members
    Node  Address          Status  Type    Build  Protocol  DC
    web   172.17.0.1:8301  alive   server  0.6.4  2         dc1
    $ consul join <ノード> <ノード>
    
    API
    $ consul members
    Node            Address               Status  Type    Build  Protocol  DC
    web.zem.jp      128.199.84.221:8301   alive   server  0.5.2  2         dc1
    node1.zem.jp    128.199.130.243:8301  alive   client  0.5.2  2         dc1
    node2.zem.jp    128.199.137.114:8301  alive   client  0.5.2  2         dc1
    
    서비스 등록 예
    web.json
    {
      "service": {
        "name": "web",
        "tags": [ "httpd" ],
        "port": 80,
        "check": {
          "script": "curl localhost:80 >/dev/null 2>&1",
          "interval": "10s"
        }
      },
      "key": "web",
      "handler": "/opt/consul/consul-handler.sh"
    }
    

    HTTP
    $ curl http://127.0.0.1:8500/v1/catalog/nodes
    [{"Node":"web.zem.jp","Address":"128.199.84.221"}]
    
    DNS
    $ dig @127.0.0.1 -p 8600 web.zem.jp.node.consul
    
    ;; QUESTION SECTION:
    ;web.zem.jp.node.consul.    IN      A
    
    ;; ANSWER SECTION:
    web.zem.jp.node.consul. 0   IN      A       128.199.84.221
    
  • DNS 정보(서비스 발견)와 건강검진 연계
  • DNS
    $ dig @127.0.0.1 -p 8600 web.service.consul
    
    ;; QUESTION SECTION:
    ;web.service.consul.            IN      A
    
    ;; ANSWER SECTION:
    web.service.consul.     0       IN      A       128.199.137.114
    web.service.consul.     0       IN      A       128.199.130.243
    
    DNS
    $ dig @127.0.0.1 -p 8600 web.service.consul
    
    ;; QUESTION SECTION:
    ;web.service.consul.            IN      A
    
    ;; ANSWER SECTION:
    web.service.consul.     0       IN      A       128.199.137.114
    web.service.consul.     0       IN      A       128.199.130.243
    
  • 도 이것만 봐?
  • consul watch
  • 이벤트의status 변화를 촉발하고 임의의 명령을 실행
  • $ consul watch –http-addr=127.0.0.1:8500 \
        -type=service \
        –service=mysql \
        /opt/action.sh
    
  • 유형service
  • 서비스 이름mysql
  • 이벤트 발생 시 실행/opt/action.sh
  • consul watch
  • 이벤트의status 변화를 촉발하고 임의의 명령을 실행
  • $ consul watch –http-addr=127.0.0.1:8500 \
        -type=service \
        –service=mysql \
        /opt/action.sh
    
  • 유형service
  • 서비스 이름mysql
  • 이벤트 발생 시 실행/opt/action.sh
  • 귀찮아 보이는데...



  • Consul Template
  • https://github.com/hashicorp/consul-template
  • 데몬
  • 상황 변화가 발생할 경우
  • 읽기 템플릿
  • 서비스 검색 상태를 파일에 반영
  • 명령 실행(옵션)
  • 템플릿 예
    host-node.tmpl
    # consul nodes{{range nodes}}
    {{.Address}}    {{.Node}}{{end}}
    
    템플릿 예
    host-node.tmpl
    # consul nodes{{range nodes}}
    {{.Address}}    {{.Node}}{{end}}
    
    $ consul-template -consul <Consulサーバ>:<HTTP port> \
        -template "テンプレートのファイル名:出力先:コマンド(オプション)" \
        -template "同上" (オプション) \
        -dry (オプション)
    
    템플릿 예
    host-node.tmpl
    # consul nodes{{range nodes}}
    {{.Address}}    {{.Node}}{{end}}
    
    $ consul-template -consul <Consulサーバ>:<HTTP port> \
        -template "テンプレートのファイル名:出力先:コマンド(オプション)" \
        -template "同上" (オプション) \
        -dry (オプション)
    
    /etc/hosts
    # consul nodes
    192.168.39.3    sion.pocketstudio.net
    192.168.39.11    web1
    192.168.39.12    web2
    
    nginx에 사용되는 예
    upstream frontend { {{range service "web"}}
        server {{.Address}}:{{.Port}};{{end}}
    }
    
    server {
        listen 80 default_server;
        location / {
            proxy_pass http://frontend;
        }
    }
    
    nginx에 사용되는 예
    upstream frontend { {{range service "web"}}
        server {{.Address}}:{{.Port}};{{end}}
    }
    
    server {
        listen 80 default_server;
        location / {
            proxy_pass http://frontend;
        }
    }
    
  • 제8회(최종회)는 자동화된 정형 작업의 Comnsul Template:Serf/Consuul을 통해 자동으로 관리합니다!~실천적인 수법을 소개합니다~|gihyo.jp...기술평론사
  • consuul-template 사용하기
    $ sudo yum -y install git golang
    $ export GOPATH=/usr/local/src/go
    $ git clone https://github.com/hashicorp/consul-template.git
    $ cd consul-templae
    $ make
    $ sudo cp ./bin/consul-template /usr/bin/
    $ consul-template --version
    consul-template v0.7.1.dev
    
    만약 그렇게 생각한다면, 지금은 2진법이 있기 때문에 간단하게 사용할 수 있습니다!
    https://releases.hashicorp.com/consul-template/0.15.0/
    (회의장의 알림에 감사합니다!)
  • 설명서
  • https://github.com/hashicorp/consul-template/blob/master/README.md
  • 돌아보다
    돌아보다

  • Consul
  • 인프라 시설의 서비스 설정과 서비스 발견에 사용되는 도구
  • 기능
  • 서비스 검색 및 공개
  • 건강검진
  • 주요 가치 스토어
  • 장애성 저항
  • Consuul Template를 통한 정형 처리 단순화
  • 뭐 신경쓰이는 거 있어요?
    references
  • https://www.consul.io/

  • Serf/Consuul 입문~ 일을 즐겨라~
  • http://www.slideshare.net/zembutsu/introduce-orchestration-serf-and-consul-presentation

  • Serf/Consuul을 통한 자동 관리!~실천적인 기법을 소개합니다~:특집|gihyo.jp...기술평론사
  • http://gihyo.jp/admin/feature/01/serf-consul

  • 민들레회를 처치한 Consuul Template
  • http://www.slideshare.net/zembutsu/consul-template-beat-tanpopo-on-sashimi

  • Serf2 Excel-serf를 실제로 적용하면 + Consul
  • http://www.slideshare.net/zembutsu/serf-to-excel-and-consul-qpstudy

  • Hashicorp 도구 모음 및 데모
  • http://www.slideshare.net/zembutsu/hashicorp-orchestration-tools-introduction
  • 좋은 웹페이지 즐겨찾기