[이 블로그는 http://blog.grallandco.com]에서 신디케이트되었습니다.

 

소개

 
클러스터를 만드는 더 효과적인 방법을 찾고 있을 때 어떤 도구를 사용해야 하는지 몇몇 시스템 관리자에게 물어보았습니다. 제가 받은 대답은 OSDC 아니었다 인형또는 셰프하지만 Ansible.
 
이 글에서는 배포된 카우치베이스 클러스터와 여러 리눅스 박스를 쉽게 구성하고 생성하는 방법을 보여드리며, 이 박스에서 필요한 것은 SSH 서버뿐입니다!
 
덕분에 얀-피에트 멘즈 제가 앵커블을 사용하도록 설득하고 앵커블에 대한 궁금증을 해결해 준 사람 중 한 명입니다.
 
아래 데모를 보거나 다음 단락에서 자세한 내용을 살펴볼 수 있습니다.
 
 
 
 

Ansible

Ansible은 관리자가 SSH를 통해 많은 컴퓨터를 구성하고 관리할 수 있는 오픈 소스 소프트웨어입니다.
 
설치에 대한 자세한 내용은 설명하지 않고 시작 가이드에 설명된 단계를 따르기만 하면 됩니다. 이 가이드에서 볼 수 있듯이 Python과 몇 가지 다른 라이브러리만 필요하며 Github에서 Ansible 프로젝트를 복제하면 됩니다. 따라서 Couchbase를 배포하려는 다양한 서버에서 Ansible이 작동하고 있을 것으로 예상합니다.
 
또한 이 첫 번째 스크립트에서는 서버에서 루트를 사용하여 모든 작업을 수행합니다. 따라서 Ansible 스크립트를 실행하는 관리 서버에 루트 ssh 키를 등록했는지 확인하세요.
 

카우치베이스 클러스터 만들기

따라서 Ansible 스크립트의 세부 사항으로 들어가기 전에 Couchbase 클러스터를 만드는 방법을 설명하는 것이 흥미롭습니다. 클러스터를 생성하고 구성하는 5단계는 다음과 같습니다:
 
  1. 문서에 따라 클러스터의 각 노드에 Couchbase를 설치합니다. 여기.
  2. 노드 중 하나를 가져와 다음을 사용하여 클러스터를 "초기화"합니다. 클러스터 초기화 명령을 사용합니다.
  3. 다음을 사용하여 다른 노드를 클러스터에 추가합니다. 서버 추가 명령을 사용합니다.
  4. 재조정, 다음을 사용하여 재조정 명령을 사용합니다. 
  5. 다음을 사용하여 버킷을 만듭니다. 버킷 생성 명령을 사용합니다.   
따라서 이제 목표는 이러한 단계를 실행하는 Ansible 플레이북을 만드는 것입니다.
 
카우치베이스용 앤서블 플레이북
가장 먼저 필요한 것은 타겟팅하려는 호스트 목록이 있어야 한다는 생각으로, 저는 호스트 파일 내 모든 서버가 두 그룹으로 구성되어 있습니다:
 
[카우치베이스-메인]
vm1.grallandco.com

[couchbase-nodes]
vm2.grallandco.com
vm3.grallandco.com

이미 알고 계시겠지만, Couchbase에는 마스터가 없으며 클러스터의 모든 노드는 동일합니다... [couchbase-main] 그룹은 설치 및 구성을 구동할 노드 중 하나에 불과합니다.
 
클러스터 구성을 쉽게 하기 위해 모든 다양한 명령에 전송해야 하는 모든 매개변수가 포함된 또 다른 파일을 만들었습니다. 이 파일은 그룹_변수/모두 섹션을 참조하십시오. 호스트 및 그룹별 데이터 분리 를 문서에 추가하세요.
 
# 관리자 사용자 및 비밀번호
admin_user: 관리자
admin_password: 비밀번호

클러스터에 대한 # 램 할당량
cluster_ram_quota: 1024

# 버킷 및 복제본
버킷_이름: 앤서블
bucket_ram_quota: 512
NUM_REPLICAS: 2

 
 
이 파일을 사용하여 클러스터를 구성하세요.
 
설명해 보겠습니다. 플레이북 파일 :
 
- 이름: 카우치베이스 설치
  호스트: 모두
  사용자: root
   
  작업:

  - 이름: 카우치베이스 패키지 다운로드
    get_url: url=http://packages.couchbase.com/releases/2.0.1/couchbase-server-enterprise_x86_64_2.0.1.deb dest=~/.
 
  - 이름: 설치 종속성
    APT: PKG=LIBSSL0.9.8 상태=현재

  - 이름: 모든 머신에 Couchbase .deb 파일 설치
    셸: dpkg -i ~/couchbase-server-enterprise_x86_64_2.0.1.deb

 
 
예상대로 설치는 다음에서 수행해야 합니다. 모두 서버를 root 이면 세 가지 작업을 실행해야 합니다: 
  1. 제품 다운로드, get_url 명령은 파일이 없는 경우에만 파일을 다운로드합니다.
  2. apt 명령으로 종속성을 설치하면 state=present를 사용하면 시스템이 아직 없는 경우에만 이 패키지를 설치할 수 있습니다.
  3. 간단한 셸 명령으로 Couchbase를 설치합니다. (여기서는 Couchbase가 이미 설치되어 있는지 확인하지 않습니다.)
이제 모든 노드에 Couchbase를 설치했습니다. 이제 첫 번째 노드를 구성하고 다른 노드를 추가해 보겠습니다: 
 
- 이름: 클러스터를 초기화하고 클러스터에 노드를 추가합니다.
  호스트: 카우치베이스 메인
  사용자: root

  작업:
  - 이름: 메인 노드 구성
    셸을 실행합니다: /opt/couchbase/bin/couchbase-cli cluster-init -c 127.0.0.1:8091 -cluster-init-username=${admin_user} -cluster-init-password=${admin_password} -cluster-init-port=8091 -cluster-init-ramsize=${cluster_ram_quota}

  - 이름: 메인 노드 구성을 위한 셸 스크립트 생성
    action: template src=couchbase-add-node.j2 dest=/tmp/addnodes.sh mode=750
 
  - 이름: 구성 스크립트 실행
    동작: 셸 /tmp/addnodes.sh
 
  - 이름을 변경합니다: 클러스터 재조정
    셸을 실행합니다: /opt/couchbase/bin/couchbase-cli 재조정 -c 127.0.0.1:8091 -u ${admin_user} -p ${admin_password}      
 
  - 이름: ${num_replicas} 복제본으로 버킷 ${버킷_이름}을 생성합니다.
    셸을 생성합니다: /opt/couchbase/bin/couchbase-cli bucket-create -c 127.0.0.1:8091 -bucket=${버킷_이름} -bucket-type=couchbase -bucket-port=11211 -bucket-ramsize=${버킷_ram_quota} -bucket-replica=${num_replicas} -u ${admin_user} -p ${admin_password}

이제 '메인' 서버에서 특정 탁을 실행해야 합니다:
  • 06번과 07번 라인에서 Couchbase CLI를 사용하여 클러스터 초기화하기
 
그런 다음 시스템은 다른 모든 서버에 클러스터에 참여하도록 요청해야 합니다. 이를 위해 시스템은 다양한 IP를 가져와야 하며 각 IP 주소에 대해 IP 주소로 add-server 명령을 실행해야 합니다. 제가 알기로는 메인 플레이북 YAML 파일에서 IP 주소를 가져올 수 없기 때문에 시스템에 각 노드를 추가하는 셸 스크립트를 생성하고 스크립트를 실행하도록 요청합니다. 
 
이것은 09번에서 13번 라인에서 이루어집니다.
 
셸 스크립트를 생성하기 위해 Ansible 템플릿에서 템플릿을 사용할 수 있습니다. couchbase-add-node.j2 파일을 만듭니다. 
 
{% for host in groups['couchbase-nodes'] %}

 /opt/couchbase/bin/couchbase-cli server-add -c 127.0.0.1:8091 -u ${admin_user} -p ${admin_password} -server-add={{ hostvars[host]['ansible_eth0']['ipv4']['address] }}:8091 -server-add-username=${admin_user} -server-add-password=${admin_password}  

{% 끝%}

 
보시다시피 이 스크립트는 [couchbase-nodes] 그룹의 각 서버에서 반복되며 해당 IP 주소를 사용하여 클러스터에 노드를 추가합니다. 
 
마지막으로 스크립트는 클러스터의 균형을 재조정하고(16줄) 새 버킷을 추가합니다(19줄).
 
이제 다음 명령을 사용하여 플레이북을 실행할 준비가 되었습니다: 
 
./bin/ansible-playbook -i ./couchbase/hosts ./couchbase/couchbase.yml -vv
 
스크립트 실행 중에 발생하는 상황에 대한 자세한 정보를 볼 수 있도록 -vv 매개 변수를 추가합니다. 
 
그러면 플레이북에 설명된 모든 명령이 실행되고 몇 초 후에 새 클러스터를 사용할 준비가 됩니다! 예를 들어 브라우저를 열고 Couchase 관리 콘솔로 이동하여 클러스터가 예상대로 구성되었는지 확인할 수 있습니다.
 
Couchbase Cluster
보시다시피 Ansible을 사용하여 새 클러스터를 만드는 것은 정말 쉽고 빠릅니다.
 
또한 클러스터를 제대로 제거하는 스크립트를 만들었습니다.
 
 
./bin/ansible-playbook -i ./couchbase/hosts ./couchbase/couchbase-uninstall.yml
 

작성자

게시자 카우치베이스 팀

의 선임 웹 관리자입니다. 웹 사이트 관리자로서 디자인, 구현, 콘텐츠 및 성능을 포함한 웹 사이트 자산에 대한 전반적인 책임을 맡고 있습니다.

댓글 하나

  1. 스크립트 템플릿을 사용하는 것보다 with_items 앤서블 문:

    - 이름: 노드 추가
    셸을 실행합니다: \"/opt/couchbase/bin/couchbase-cli server-add -c 127.0.0.1:8091 -u {{couchbase_admin}} -p {{couchbase_admin_password}} –server-add={{ hostvars[item][\’ansible_eth0\’][\’ipv4\’][\’address\’] }}:8091 –server-add-username={{couchbase_admin}} -server-add-password={{couchbase_admin_password}}\"
    with_items: groups[\'couchbase-nodes\']

    이렇게 하면 앤서블 작업이 반복됩니다. (ansible이 굉장하다는 것을 알고 계셨나요? :) )

    1. 감사합니다 플레이북을 테스트하고 업데이트하겠습니다...

      저는 Ansible을 정말 좋아하고 여러분의 조언으로 더욱 좋아졌습니다!

  2. 레시피를 사용하여 EC2에 couchdb를 설치하려고 했는데, 추가해야 할 작은 수정 사항이 있었습니다. '연결 거부' 오류로 인해 cluster-init 명령이 실패했습니다. 서버가 아직 가동되지 않은 것 같아서 클러스터 초기화 전에 30초 동안 일시 중지 명령을 추가했더니 작동했습니다!
    코드:
    - 이름: 설치를 완료하기 위해 30초 동안 절전 모드
    일시 중지: 초=30

    숙면이 할 수 있는 일 :)

  3. 다음을 확인할 수도 있습니다. 가상박스/센토스(또는 우분투) 인스턴스를 사용하여 멀티노드 클러스터 실행하기. 모든 매개 변수가 올바르게 설정되어 있다고 가정하면 작동합니다. 20분 만에 실행되었습니다. 이 작업을 수행하기 위해 많은 것을 다운로드하므로 수행하는 동안 온라인 상태인지 확인하십시오.

    https://github.com/couchbasela

  4. 이 정보는 인상적이었습니다. 저는 귀하의 게시물 작성 스타일과 이 주제를 지속적으로 설명하는 방식에 영감을 받았습니다. 시간을 내어 이 주제에 대해 논의해 주셔서 감사드리며, 이 주제에 대해 더 많은 것을 배울 수 있어 기쁩니다.
    감사합니다,
    DevOps 상담

댓글 남기기