puppetconf 2013 주제들

문태준의 이미지

puppetconf 라고 puppet 관련한 행사가 있습니다.
아래 행사일정보면 puppet 가지고 화수목금 4일간 컨퍼런스를 합니다.
http://puppetconf.com/schedule/

중국에서도 puppetconf는 하던데 언제 국내에서 할 날이 있을까나... 모르겠네요.

근데 혹시 그냥 스크립트로 관리하는 것 말고 puppet 이나 chef 등의 설정관리툴 사용하시는 분 있어요? cfengine 도 좋구요.
도통 국내에서는 puppet 등의 사용자를 못 찼겠네요.

생각해보니 제가 puppet 은 간단한 설치법만 공유를 했었네요.
저는 현재 5천에서 6천여대의 리눅스 서버를 puppet 으로 설정 관리하고 있습니다.
한대의 CA 서버(인증서버)가 있고 배포서버를 여러 대 두어서 로드밸런싱하고 있습니다.
그전에 cfengine 으로 관리하던 2천여대가 있었는데 올해 초에 puppet 으로 마이그레이션을 했지요.

puppet 정보는 svn 으로 관리하고 있습니다. svn commit 을 할 때 svn hook 스크립트를 이용하여 puppet 문법을 체크합니다.
puppet 을 실행을 할 때에는 puppet 서버와 puppet agent 의 revision 정보를 비교하여 보안을 강화했습니다. 혹시나 puppet 서버에 문제가 생겨서 예전 정보를 이용하는 일을 방지하기 위해서이지요.
시스템 설정은 무조건 puppet 으로 관리하고 있습니다.
코드로 인프라를 관리한다고 했는데 예를 들면 acl 같은 경우 puppet 에서 변수로 빼 놓고 이 변수 하나를 업데이트하면 자동으로 관련된 정보가 변경이 됩니다.
예를 들어 apache acl 정보 업데이트하고 apache 재시작, iptables 정책 업데이트하고 iptables 재시작.
이걸 따로 따로 수동으로 관리하려면 일이지만 puppet 의 템플릿 기능을 이용하면 자동화할 수가 있지요.

puppet 실행결과는 예전에 puppet report를 이용했는데 최근에 puppetdb라는 프로그램으로 바꾸었습니다.
http://docs.puppetlabs.com/puppetdb/
puppet 을 실행할 때 시스템의 여러가지 정보를 수집을 하는데 puppetdb에서는 이것을 이용, 원하는 인벤토리 정보를 쉽게 찾을 수 있습니다.
puppetdb에서는 질의 결과를 json 형태로 돌려주며 curl 같은 것으로 질의하면 되지요.
예를 들어 각 시스템의 커널 버전 정보 검색 등등..

puppet을 만든 회사에서 mcollective 라고 하는 프로그램도 만들었는데 예전 제가 한번 소개했었지요.
puppetdb 가 안 나왔으면 mcollective 라는 프로그램을 이용하여 실시간 검색을 하거나 원하는 프로그램을 실행했을 건데요 실시간 검색은 아니지만 puppetdb 로 웬만한 시스템 정보는 검색이 가능해서 굳이 mcollective 는 필요하지 않은 것 같습니다.
mcollective 에서는 MQ를 이용하여 대규모 처리를 하는데 이건 참고할 필요가 있지요.
다른 이야기이지는 하지만 MQ를 시스템 관리하는데 응용을 해보려고 합니다.

http://wiki.tunelinux.pe.kr/display/sysadmin/Configuration+management#Configurationmanagement-applicationserviceorchestration
mcollective http://www.puppetlabs.com/mcollective/introduction/
이 툴은 puppet 만든 곳에서 함께 만든 것입니다. puppet은 중앙에서 시스템 설정을 가져와 적용하는 시스템이라면 Mcollective는 병렬 ssh 툴이나 애플리케이션 배포쪽에 더 가깝습니다.
Mcolective 사이트를 보면 Publish Subscribe Middleware 기술을 쓴다고 나옵니다. 이 부분은 MQ라고 하는 기능을 이용하는 것인데요 저도 이 기술에 아직 익숙하지 않지만 개발쪽 하시는 분들은 많이 접하는 기술일 겁니다. (RabbitMQ, AcitveMQ 등의 오픈소스 프로그램이 있음)
예를 들어 apache 가 돌아가고 있는 시스템을 찾아보자고 Mcollective 서버에 질의를 하면 Mcollective 서버는 브로드캐스팅으로 요청을 보냅니다. 그러면 Mcollective 서버에 가입되어 있는 모든 시스템에서 이 요청을 받고 자기가 여기에 해당하면 Mcollective 서버로 응답을 해 줍니다. Mcollective 서버는 이러한 응답을 모아서 레포팅을 해 줍니다.
병렬 ssh 툴의 경우 멀티스레드를 이용하고 요청을 분산시킨다고 하더라도 이런 작업을 처리해야하고 다시 결과를 모아야합니다. 시스템규모가 커지면 어찌되었건 결과모으기가 쉽지 않습니다. Mcollective 는 각 시스템에 대한 요청과 응답받고 하는 부분을 MQ 기능을 이용하여 분산처리하는 것입니다. 시스템 규모가 커지면 MQ서버를 좀 더 늘리고 MQ 서버에 대한 failover 구성 등을 통하여 장애가 나도 상관없이 결과를 받을 수 있도록 구성하는 것이 가능합니다.

댓글

아르아의 이미지

Puppet을 사용해보려고 개인적으로 사용중인 서버들 만져줄 일이 생길때마다 해야 하는 일을 puppet으로 해가면서 차츰 코드를 쌓아가고 있는데, 여태까지의 경험으로는 아주 좋은것 같습니다. Perceus로 관리중인 계산용 리눅스 클러스터가 있는데 나중에 이것도 조만간에 Puppet으로 관리 해볼까 고려중입니다. PuppetLabs의 Razor라는 bare metal provisioning툴을 사용하면 Perceus나 Rocks같은 클러스터 관리툴의 대부분의 기능도 대체 가능하지 않을까 싶네요.

그리고 등장한지는 얼마 안되었지만 SaltStack도 많이들 쓰는것 같던데 혹시 접해보신적 있나요? 보니까 Puppet보다 더 간결하고 사용이 쉬운것 같아 보이네요. 전 아직은 기본적인 기능만 쓰는지라 Puppet코드도 단순해서 SaltStack의 편이성이 그다지 부럽지는 않은데다가, SaltStack은 문서화나, 특히 제가 필요로 하는 기능인 bere metal provisioning쪽은 아직 잘 안되있는것 같아서 전 계속 Puppet을 사용중입니다.

문태준의 이미지

SaltStack 써보지는 않았습니다만 해외 컨퍼런스에는 간혹 언급이 되던데요.
PuppetLabs의 Razor 툴은 사용해보지 않았는데 puppet에서 이런 것도 만들었나보군요.
bere metal provisioning 은 현재 실환경에서 쓰는게 아니라서요. 예전에 내부적으로 pxe/dhcp 등을 이용해서 직접 구현을 했는데 현재는 그냥 대량으로 설치할 일 있을 때 pxe/dhcp 이용하여 처리합니다.

제가 언급했던 http://kldp.org/node/138439 여기 tumblr 운영사례에서도 보면 발표한 사람이 기존 툴들에 불만을 가져서 Collins 라고 만든거 있습니다. 언제 한번 자세히 볼까 생각만 하고 있습니다.

puppet 에서 Externerl Node 기능을 이용해야 자동으로 OS 설치하고 PUPPET DEPLOY 하기가 좋을 건데 아직 이 기능은 사용하지 않습니다. 왜냐하면 자체 cmdb갈은 것이 있어서 아직 이쪽과 연동하지는 않았습니다. 그렇지만 궁극적으로는 CMDB와 연동해야 자동화할 수 있겠지요.

puppet 2.6, 2.7 부터 hiera 라는 기능이 있는데 이건 puppet puppet module을 훨씬 간단하게 만들고 여러가지 변수를 따로 빼서 관리하기가 편할 것 같아서 조만간 테스팅하여 도입할 예정입니다.
http://docs.puppetlabs.com/hiera/1/index.html

configuration management 프로그램으로 puppet, chef, cfengine(저는 cfengine2썼지만 써본 결과 puppet이 훨씬 좋습니다.) 등 어떤 것을 써도 상관이 없다고 생각을 합니다. 그냥 자기가 익숙하고 정보를 많이 쉽게 접할 수 있는것 이용하면 되지요.
중요한 것은 인프라를 수동이 아니라 코드로 관리하고 표준화된 툴을 정해서 관리하는 정책이라는 생각이 드네요.

아르아님 제가 운영하는 메일링쪽에 글 펌 좀 하겠습니다. kldp쪽에서는 이런 주제 올려도 별다른 반응이 없더라구요.
https://groups.google.com/forum/#!topic/sysadminstudy/JlXZls9Rm84

---------------------------
문태준
http://groups.google.co.kr/group/sysadminstudy 시스템어드민 공부모임
http://tunelinux.pe.kr
http://database.sarang.net

문태준의 이미지

http://missingm.co/2013/06/ansible-and-salt-a-detailed-comparison/
여기 글을 읽어보면 ainsible, salt 같은 틀과 puppet, chef 간단히 비교를 해 놓은 게 있네요.
chet, puppet 과 같이 configuration management 도 하면서 Capistrano, Fabric, Func와 같은 application deployment, 원격 명령어 실행 기능도 함께 지원을 한다는 이야기네요.
configuration management 툴들은 현재 시스템 설정이 어떠해야 한다는 것을 미리 정의하고 그것을 맞추는 작업입니다.
사용을 하다보면 applcation deployemtn , 원격 실행 기능도 함께 있으면 좋겠다라는 생각을 하게 되거든요.
왜냐하면 예를 들어 apache 설치하고 세팅하는 것을 puppet 으로 해야 하나? 아니면 applcation deployment 로 해야하나? 이건 고민은 항상 들거든요.
시스템적인 요소와 서비스와 연관된 세팅 요소라는게 때에 따라서는 명확히 구분하기 힘든 경우들이 많이 있습니다.

puppet 에서는 mcollective 라는 것을 따로 만들어 이것을 이용하여 application deployment, 원격 명령어 실행 기능을 사용할 수는 있지만 어찌되었건 별도의 프로그램이지요.
mcollective 에서 원격 명령어 실행 기능은 미리 사전에 모듈로 만들어 놓아야 하기 때문에 dist, pssh 등과는 좀 다르지요.

저는 내년에 mcollective 와 같이 MQ를 이용하여 대규모 시스템에서 필요한 정보를 빠르게 뽑을 수 있되 controltier 와 같이 명령행과 GUI에서 명령어 실행을 제공하고 로그도 볼 수 있는 것을 어떻게 결합해보면 좋을까 생각만 하고 있습니다.
잘만 조합하면 멋진 그림이 나올 수 있을 것 같기도 한데요.
참고로 최근 controltier 사이트를 가보니 프로그램 이름이 바뀌었더군요. 그래서 난중에 다시 한번 살펴볼 예정입니다. 동일한 명령을 CMD 와 GUI에서 제공하는 것은 정말 멋진 기능이라는 생각이 드는데요. controlltier 의 경우에는 시스템 댓수가 커지면 확장성을 고려했을 때 그런 의문은 들어서요. 여기에 MQ를 활용해서 어떤 변경을 할 때 MQ로 보내고 각 에지들이 그 큐의 내용을 가져과 변경하는 것을 생각해 보고 있습니다.
물론 제 생각대로 될지는 모르지만...

---------------------------
문태준
http://groups.google.co.kr/group/sysadminstudy 시스템어드민 공부모임
http://tunelinux.pe.kr
http://database.sarang.net

아르아의 이미지

링크주신 블로그 포스트에도 설명한대로 Salt의 경우도 ZeroMQ를 썼기에 속도가 아주 빠르다고 하네요. MQ는 이런 용도에 참 유용해 보입니다. 그런데 ZeroMQ의 경우 순수 MQ기능만 있기때문에 Pub/Sub정도의 용도라면 Redis를 쓰는것이 더 편할수도 있을것 같습니다. 나름 DB인 녀석이기 때문에 persistence store나 log 기능을 기본으로 포함하니까요. 사용도 편하구요.

문태준의 이미지

redis 에도 Message Queue 기능이 있군요.
저는 Message Queue 로는 RabbitMQ를 이용하려고 하는데요.
지금은 메모리 기반의 Key/Value Store 말고 메시징 기능을 시스템 운영하는데 여러가지로 활용할 수 있을 듯 해서요.
혹시 RabbitMQ나 ActiveMQ를 쓰는 것에 비해서 redis의 메시지 큐 기능을 이용하는 것이 장점이 있는 건가요?

---------------------------
문태준
http://groups.google.co.kr/group/sysadminstudy 시스템어드민 공부모임
http://tunelinux.pe.kr
http://database.sarang.net

어허야의 이미지

.

아르아의 이미지

RabbitMQ를 염두에 두고 있으셨군요.
무슨 일을 하려고 하느냐에 달린 문제이긴 할텐데,
기능상으로 비교하기에는 Redis가 RabbitMQ/ActiveMQ랑 비교할때 별로 장점이 없을것 같습니다.
Redis의 경우 메세지 큐라고 하기는 좀 그렇고 Pub/Sub기능 정도만 제공할 뿐이니까요.
더 작고 단순하다는것을 장점으로 볼 수도 있을것 같기는 합니다.
셋팅이나 사용법, 문제발생시 분석/디버깅은 상대적으로 쉬울테니까요.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.