MicroService

CoreOS etcd 클러스터 구축하기

behonestar 2016. 8. 11. 22:11

오늘은 CoreOS cluster architecutres 문서에 기술된 Production cluster with central services를 구축해보려고 합니다. 



큰 규모의 서비스를 운영해야하는 경우 이 아키텍쳐를 사용하는 것이 좋습니다. 3~5개의 머신으로 etcd 클러스터를 별도로 구성하고 Worker 머신에는 etcd를 Proxy로 실행시키는 방식입니다. 그러면 Worker는 etcd proxy를 통해 Central Services의 etcd를 사용할 수 있습니다. etcd Proxy는 etcd 클러스터의 write 성능에 아무런 영향을 끼치지 않는다고 하네요.



Security Group 생성


Security Group을 하나 생성합니다. 저는 SSH 접속을 위해 22번 포트를 열었고, etcd 동작을 위해 2379,2380,4001,7001 포트를 열었습니다. 보안을 위해 Security Group을 사용하는 인스턴스들의 접근만 허용하였습니다.




Discovery token 생성


저는 etcd 머신 3개로 Central Services를 구축하려고 합니다. 브라우저에 https://discovery.etcd.io/new?size=3을 입력하면 token이 생성됩니다.




etcd 인스턴스 생성


이 곳에서 원하는 리전의 AMI를 선택하면 자동으로 EC2 인스턴스 생성 페이지로 리다이렉트됩니다.




t2.micro 인스턴스 타입을 선택하고 3단계(Configure Instance Details)로 넘어갑니다. Number of Instance에는 3을 입력하고 하단의 Advanced Detail를 누르면 보이는 User data에는 아래와 같이 입력합니다. discovery 필드에는 위에서 생성했던 token값을 입력합니다.


#cloud-config


coreos:

  etcd2:

    discovery: https://discovery.etcd.io/01c2a1176262ee319fc12b2403411ae2

    advertise-client-urls: http://$private_ipv4:2379

    initial-advertise-peer-urls: http://$private_ipv4:2380

    listen-client-urls: http://0.0.0.0:2379,http://0.0.0.0:4001

    listen-peer-urls: http://$private_ipv4:2380

  fleet:

    metadata: "role=services"

  units:

    - name: etcd2.service

      command: start

    - name: fleet.service

      command: start


6단계(Configure Security Group)으로 넘어가서 'Select an existing security group'을 선택하고 위에서 생성했던 Security Group을 선택합니다. 이상이 없는지 마지막으로 검토 후 인스턴스를 생성합니다. 


인스턴스가 정상적으로 생성되면 SSH로 로그인 후 아래 명령어를 입력합니다. 3개의 member가 모두 표시되면 Central Services가 성공적으로 구성된 것입니다. Discovery token을 생성할 때 size=3을 입력했기 때문에 3개의 etcd 머신이 모두 활성화되어야만 bootstraping이 완료됩니다. 아직 생성이 완료되지 않은 인스턴스가 있다면 조금 더 기다려봅니다.


$ etcdctl cluster-health

member 1114b60d574a4daa is healthy: got healthy result from http://172.31.21.216:2379

member 8684e0306035e0ac is healthy: got healthy result from http://172.31.21.217:2379

member e9276cc3ae55e7e2 is healthy: got healthy result from http://172.31.21.218:2379

cluster is healthy



Worker 인스턴스 생성


위와 동일한 방법으로 인스턴스를 2개 더 생성합니다. 단, User Data는 아래와 같이 입력합니다. discovery 필드에는 위에서 생성했던 token값을 입력합니다. 


참고로 Discovery token을 생성할 때 설정한 size만큼의 etcd memeber가 모두 준비된 상태이면 etcd를 proxy로 설정하지 않더라도 이후의 etcd는 proxy로 동작합니다.


#cloud-config


coreos:

  etcd2:

    discovery: https://discovery.etcd.io/01c2a1176262ee319fc12b2403411ae2

    listen-client-urls: http://0.0.0.0:2379,http://0.0.0.0:4001

  fleet:

    metadata: "role=worker"

    etcd_servers: "http://localhost:2379"

  locksmith:

    endpoint: "http://localhost:2379"

  units:

    - name: etcd2.service

      command: start

    - name: fleet.service

      command: start


인스턴스 생성이 완료되면 etcd proxy를 통해 central service에 접근이 가능한지 cluster-health 명령어를 입력해봅니다.


$ etcdctl cluster-health

member 1114b60d574a4daa is healthy: got healthy result from http://172.31.21.216:2379

member 8684e0306035e0ac is healthy: got healthy result from http://172.31.21.217:2379

member e9276cc3ae55e7e2 is healthy: got healthy result from http://172.31.21.218:2379

cluster is healthy


한 worker에서 key, value를 기록하고 다른 worker에서 읽어봅니다. 


core@ip-172-31-23-177 ~ $ etcdctl set /message Hello

Hello


core@ip-172-31-23-178 ~ $ etcdctl get /message

Hello


성공하셨다면 Service Discovery를 위한 아키텍쳐가 준비된 것입니다. fleet을 이용하여 worker가 실행될 때 자동으로 host, port를 etcd에 기록할 수 있습니다. 이 방법은 "Run a simple sidekick" 도큐먼트를 참고하세요.



참고


'MicroService' 카테고리의 다른 글

Consul & Registrator  (0) 2016.10.05
CoreOS fleet unit 작성 및 실행  (0) 2016.08.12
CoreOS etcd cluster 사이즈 변경하기  (0) 2016.08.10