[이 블로그는 http://nitschinger.at/ 에서 신디케이트되었습니다.]
동기 부여
저는 Couchbase에서 엔지니어링 팀의 일원으로 일하기 때문에 다양한 서버 배포에 대해 코드를 실행해야 합니다. 우리는 다양한 운영 체제와 소프트웨어 버전을 실행하며 고객도 마찬가지입니다. 버그를 안정적으로 수정하고 새로운 기능을 구축하려면 이러한 배포와 최대한 유사하게 클러스터를 설정하고 실행하는 것이 중요합니다. EC2에서 이러한 모든 조합을 실행할 수 있다는 것을 알고 있지만 비용이 매우 많이 들며 대부분의 경우 과잉입니다.
저에게 필요한 것은 클러스터를 구성하는 데 너무 많은 시간을 소비하지 않고 몇 분 안에 클러스터를 가동하고 실행하는 것입니다. 제가 들은 바로는 방랑자 그리고 인형 를 사용했지만, 제 박스에는 사용하지 못했습니다 (저는 항상 VirtualBox 를 사용하여 가상 머신을 직접 만들 수 있습니다).
오늘 아침 저는 이러한 도구가 생산성을 높이는 데 어떻게 도움이 되는지 자세히 살펴보기 위해 앉아서 놀랍게도 30분 이내에 4노드 Couchbase Server 클러스터를 실행할 수 있었습니다(모든 구성 세부 정보를 조회한 후). 너무 쉬워서 여러분과 공유하고 싶었습니다.
전제 조건
노드를 프로비저닝하기 전에 Vagrant와 VirtualBox가 설치되어 있는지 확인해야 합니다. 저처럼 MacOS를 사용하는 경우에는 .dmg 파일을 추가하면 설정이 완료됩니다. 이제 구성 파일을 저장할 디렉터리를 만들면 됩니다. 저는 제 디렉터리를 'vagrants'라고 이름 붙였습니다.
이 디렉터리에서 방랑자 파일. 방랑자처럼 메이크파일 를 입력하면 노드를 프로비저닝하는 방법을 알아내기 위해 이를 선택합니다. 이 경우 OS 상에서 소프트웨어를 구성하지 않으며(예: Couchbase 설치), 이는 별도의 단계에서 puppet이 처리합니다. 전체 구성은 다음과 같습니다:
# 프로비저닝할 노드 수
numNodes = 4
사설 네트워크용 # IP 주소 기반
ipAddrPrefix = "192.168.56.10"
# 각 노드에 대한 RAM 수 정의
config.vm.provider "virtualbox" do |v|
v.customize ["modifyvm", :id, "-memory", 1024]
끝
# 퍼펫으로 서버 자체 프로비저닝하기
config.vm.provision :퍼펫
# 이 URL에서 초기 상자를 다운로드하세요.
config.vm.box_url = "http://files.vagrantup.com/precise64.box"
각 노드에 대한 # 프로비저닝 구성
1.upto(numNodes) do |num|
nodeName = ("node" + num.to_s).to_sym
config.vm.define nodeName do |node|
node.vm.box = "precise64"
node.vm.network :private_network, ip: ipAddrPrefix + num.to_s
node.vm.provider "virtualbox" do |v|
v.name = "카우치베이스 서버 노드 " + num.to_s
끝
끝
끝
끝
이 파일은 Vagrant를 구성하는 루비 코드일 뿐입니다. 각 지시어를 살펴보고 어떤 기능을 하는지 살펴보겠습니다.
numNodes = 4
사설 네트워크용 # IP 주소 기반
ipAddrPrefix = "192.168.56.10"
이 값은 변경할 수 있으며, 여기서는 제 환경에 맞게 만들었습니다. 이 값의 양에 따라 numNodes
설정하면 VM이 생성됩니다. 이 설정에 따라 아래에 루프를 추가하여 코드를 많이 복제할 필요가 없도록 했습니다. IP 주소 접두사는 서버의 (고정) IP 주소를 쉽게 결정하는 데 사용됩니다. 숫자는 점진적으로 위로 카운트되므로 다음을 통해 액세스할 수 있는 서버가 4개가 됩니다. 192.168.56.101
에 192.168.56.104
.
config.vm.provider "virtualbox" do |v|
v.customize ["modifyvm", :id, "-memory", 1024]
끝
이 구성 블록은 VM의 메모리 크기를 늘리는 데 필요합니다. 기본적으로 이보다 작으며(약 512MB), 각각 1기가의 RAM을 사용하려고 합니다. 물론 이 값을 자유롭게 조정하거나 완전히 제거할 수 있습니다.
config.vm.provision :퍼펫
서버 소프트웨어를 프로비저닝하는 데 퍼펫을 사용할 것이므로 Vagrant에 퍼펫을 사용하도록 지시해야 합니다.
config.vm.box_url = "http://files.vagrantup.com/precise64.box"
Vagrant는 미리 정의된 이미지를 재사용하므로 모든 것을 처음부터 다시 설치할 필요가 없습니다. 여기서는 미리 정의된 Ubuntu 12.04 64비트 박스를 사용합니다.
1.upto(numNodes) do |num|
nodeName = ("node" + num.to_s).to_sym
config.vm.define nodeName do |node|
node.vm.box = "precise64"
node.vm.network :private_network, ip: ipAddrPrefix + num.to_s
node.vm.provider "virtualbox" do |v|
v.name = "카우치베이스 서버 노드 " + num.to_s
끝
끝
끝
이 코드 블록은 각 가상 머신을 구성합니다. 생성하려는 노드 수가 주어지면 각 노드에 대해 IP 주소를 할당하고 Virtualbox 내에서 노드를 설명하는 이름을 지정합니다. 서버 종속 설정을 추가하려는 경우 "노드" 블록이 적합한 위치입니다. 그렇지 않으면 "구성" 블록에 정의된 클러스터 전체 설정을 선택합니다.
이제 실행하면 방랑자 업
명령줄에서 이 디렉터리의 명령어를 실행하면 SSH를 사용할 수 있는 Ubuntu 머신 네 대가 설정되지만 다른 것은 설치되지 않습니다. 이 컴퓨터들이 무언가를 하도록 하기 위해 Couchbase Server를 설치하려고 합니다. Puppet은 시스템 자동화 소프트웨어로 시스템 프로비저닝에 매우 능숙합니다. Vagrant는 이를 훌륭하게 지원하며, 우리가 해야 할 일은 단지 default.pp
파일 안에 매니페스트
디렉토리에 다음과 같이 표시됩니다:
명령 => "/usr/bin/wget http://packages.couchbase.com/releases/2.0.1/couchbase-server-enterprise_x86_64_2.0.1.deb",
cwd => "/home/vagrant/",
creates => "/home/vagrant/couchbase-server-enterprise_x86_64_2.0.1.deb",
before => Package['couchbase-server']
}
실행 { "설치-뎁스":
명령 => "/usr/bin/apt-get install libssl0.9.8",
before => Package['couchbase-server']
}
패키지 { "카우치베이스-서버":
공급자 => dpkg,
확인 => 설치됨,
소스 => "/home/vagrant/couchbase-server-enterprise_x86_64_2.0.1.deb"
}
내부를 다시 한 번 살펴보겠습니다.
명령 => "/usr/bin/wget http://packages.couchbase.com/releases/2.0.1/couchbase-server-enterprise_x86_64_2.0.1.deb",
cwd => "/home/vagrant/",
creates => "/home/vagrant/couchbase-server-enterprise_x86_64_2.0.1.deb",
before => Package['couchbase-server']
}
퍼펫에서는 실행할 몇 가지 작업을 정의합니다. 이 작업은 셸 명령을 실행합니다. wget 를 실행하고 사용자의 홈 디렉토리에 파일을 저장합니다. 퍼펫에게 서버의 데비안 패키지를 다운로드하라고 지시합니다. 참고로 전에 파일을 다운로드하지 않으면 설치할 수 없으므로 패키지 설치 작업에 대한 종속성을 제거합니다.
명령 => "/usr/bin/apt-get install libssl0.9.8",
before => Package['couchbase-server']
}
또한 다음을 설치해야 합니다. libssl0.9.8
서버에 대한 유일한 종속성입니다. 명령줄 도구를 사용합니다. apt-get 를 사용하세요.
공급자 => dpkg,
확인 => 설치됨,
소스 => "/home/vagrant/couchbase-server-enterprise_x86_64_2.0.1.deb"
}
마지막으로 파일이 제자리에 있고 모든 종속성이 충족되었으므로 couchbase-server에서 debian 패키지를 설치할 수 있습니다.
물론 이 퍼펫 파일은 매우 간단하고 훨씬 더 많은 것을 할 수 있지만(어쩌면 더 단순화할 수도 있습니다), 제 필요에는 이 정도면 충분합니다. 다른 서버 버전을 원하면 퍼펫 파일을 변경하여 새 데비안 패키지를 가리키면 됩니다.
이제 다음을 실행하면 방랑자 업 를 사용하면 훨씬 더 많은 일이 일어납니다. 퍼펫 파일을 가지고 놀고 싶다면 다음을 사용할 수도 있습니다. 방랑자 조항 를 클릭하여 노드가 실행되는 동안 변경 사항을 적용합니다.
모든 것이 정상이면 출력은 다음과 같아야 합니다:
머신 'node2'를 'virtualbox' 공급자로 불러오기...
머신 'node3'을 'virtualbox' 공급자로 불러오기...
머신 'node4'를 'virtualbox' 공급자로 불러오기...
[node1] 이전에 설정된 포워딩 포트를 지우는 중...
[node1] 공유 폴더 메타데이터 만들기...
[node1] 이전에 설정한 네트워크 인터페이스 지우기...
[node1] 구성에 따라 네트워크 인터페이스 준비 중...
[node1] 포워딩 포트...
[node1] - 22 => 2222(어댑터 1)
[node1] VM 사용자 지정 실행 중...
[node1] 부팅하는 VM...
[node1] VM이 부팅되기를 기다리는 중입니다. 몇 분 정도 걸릴 수 있습니다.
[node1] VM이 부팅되어 사용할 준비가 되었습니다!
[node1] 네트워크 인터페이스 구성 및 활성화...
[node1] 공유 폴더 마운트 중...
[node1] - /방랑자
[노드1] - /tmp/방랑자-퍼펫/매니페스트
[node1] 실행 중인 프로비저닝: 퍼펫...
기본값으로 퍼펫 실행...
STDIN: Tty가 아닙니다.
notice: /Stage[main]//Exec[install-deps]/returns: 성공적으로 실행되었습니다.
알림: 0.77초 만에 카탈로그 실행 완료
.... 다른 모든 노드에 대해 자세히 알아보세요.
그런 다음 브라우저에서 다음을 가리킬 수 있습니다. 192.168.56.10[1-4] 를 클릭하고 Couchbase 클러스터로 작업하세요. 이 작업이 완료되면 다음을 사용할 수 있습니다. 방랑자 중지 명령으로 깔끔하게 종료할 수 있습니다. 매우 편리한 기능도 있습니다. 방랑자 일시 중단를 사용하여 노드를 완전히 종료하는 대신 노드의 상태를 저장합니다.
전체 클러스터가 아닌 노드 중 하나와 상호 작용하려면 언제든지 노드 식별자를 지정할 수 있습니다. 예를 들어, 첫 번째 노드만 시작하려는 경우 방랑자 업 노드1 명령을 사용합니다.
저에게는 이 방법이 서버 노드를 프로비저닝하는 매우 빠르고 깔끔한 방법입니다. 파일에서 몇 줄만 변경하면 큰 번거로움 없이 새 클러스터를 생성할 수 있습니다. 더 중요한 것은 이러한 구성 파일을 버전 제어에 넣을 수 있고 공유 다른 사람들과 함께!
좋은 내용입니다. 리포지토리의 스크립트를 몇 가지 변경했습니다. 퍼펫 매니페스트에서 프로비저닝 중 시간 초과를 비활성화하고, vagrant파일에 루비 스타일을 추가했습니다. 모두 이미 통합되었습니다.
와우, 정말 쉽게 작동했어요. 10분도 채 안 되는 작업으로 4노드 클러스터를 만들었습니다. 고마워요!
안녕하세요 감사합니다.
마법처럼 작동합니다.
저와 같은 초보 사용자를 위한 팁: 카우치베이스 클러스터는 설치 후 기본 포트 번호인 192.168.56.10[1-4]:8091로 브라우저에서 사용할 수 있습니다.