1. 퍼펫 소개
시스템 관리자는 종종 반복적인 작업들에 갇혀 있습니다: 패키지 업그레이드, 구성 파일 관리, 시스템 서비스, 크론 작업, 새 구성 추가, 버그 수정 등. 이러한 작업들은 종종 반복적이고 비효율적이며, 이를 해결하면 첫 번째 대응은 자동화되어 맞춤형 스크립트가 생성되도록 하는 것입니다. 환경의 복잡성 때문에 맞춤형 스크립트와 애플리케이션이 반복적으로 개발되어 여러 플랫폼에 적용하기 어렵고, 유연성과 기능을 보장하기 어렵기 때문에 Puppet과 같은 자동화된 구성 관리 도구가 등장했습니다.
오픈 소스 세계에서는 선택할 수 있는 다양한 구성 도구가 있으며, 이 분야의 주요 제품들은 다음과 같습니다:
Puppet (http://puppet.reductivelabs.com/): C/S 아키텍처를 사용하여 선언적 언어로 클라이언트를 구성하는 Ruby로 작성된 구성 관리 도구입니다. Cfengine (http://www.cfengine.org): 1993년에 출시된 최초의 오픈 소스 구성 도구 중 하나로, 교육 기관에서 주로 사용되는 C/S 아키텍처입니다. LCFG(http://www.lcfg.org/): XML을 사용하여 구성을 정의하는 C/S 아키텍처용 구성 관리 도구입니다. Bcfg2: Python으로 작성된 C/S 아키텍처용 구성 관리 도구로, 명세와 클라이언트 응답을 사용하여 대상 호스트를 구성합니다.
이 문서는 Puppet을 사용해 호스트, 애플리케이션, 백그라운드 프로그램 및 다양한 서비스를 관리하는 방법을 설명하는 데 전념하고 있습니다.
퍼펫 소개:
1. 퍼펫은 무엇에 사용되나요?
Puppet은 C/S 배포 아키텍처에 의존하는 오픈 소스 루비 기반 시스템 구성 관리 도구입니다. 주요 개발자는 GPLv2 저작권 라이선스를 따르는 Luke Kanies입니다. 1997년부터 카니스는 UNIX 시스템 관리에 참여해 왔으며, 퍼펫의 개발은 이 경험에서 비롯되었습니다. 사용 가능한 구성 도구에 만족하지 못한 카니스는 2001년부터 2005년까지 Reductive 연구실에서 도구 개발을 시작했습니다. 곧 Reductive Labs는 대표 제품인 퍼펫을 출시했습니다.
2. 퍼풋의 특징
많은 시스템 구성 관리 도구들이 매우 유사하게 작동합니다. 예를 들어 cfengine이 있습니다. 퍼펫의 독특한 점은 무엇인가요?
Puppet의 문법은 모든 대상 호스트에서 별도의 스크립트를 만들어 사용자를 빌드할 수 있게 해줍니다. 모든 대상 호스트는 로컬 시스템에 적용 가능한 문법을 사용하여 모듈을 해석하고 실행합니다. 예를 들어, 이 구성이 Red Hat 서버에서 실행된다면, useradd 명령어를 사용하여 사용자를 생성하세요; 이 구성이 FreeBSD 호스트에서 실행될 경우, adduser 명령어를 사용합니다.
Puppet의 또 다른 놀라운 점은 유연성입니다. 오픈 소스 소프트웨어의 특성상 Puppet의 소스 코드를 자유롭게 얻을 수 있으며, 문제가 발생하고 가능하다면 환경에 맞게 코드를 수정하거나 향상시킬 수 있습니다. 또한, 커뮤니티 개발자와 기부자들은 퍼펫의 역량을 계속 강화하고 있습니다. 또한 많은 개발자와 사용자 커뮤니티가 Puppet의 문서와 기술 지원을 제공하는 데 헌신하고 있습니다.
퍼펫도 크기 조절이 쉽습니다. 맞춤형 패키지 지원과 특수 시스템 환경 구성을 Puppet 설치 프로그램에 빠르고 쉽게 추가할 수 있습니다.
3. 퍼펫의 작업 모드
퍼펫은 중앙 서버에 퍼펫 서버 패키지(퍼펫 마스터로 알려짐)를 설치하는 C/S 아키텍처 구성 관리 도구입니다. 관리해야 할 대상 호스트에 Puppet 클라이언트 소프트웨어(Puppet Client라고 불립니다)를 설치하세요. 클라이언트가 퍼펫 마스터에 연결하면, 퍼펫 마스터에 정의된 구성 파일이 컴파일되어 클라이언트에서 실행됩니다. 기본적으로 각 클라이언트는 30분마다 서버와 통신하여 구성 정보 업데이트를 확인합니다. 새로운 구성 정보가 있거나 변경 사항이 있을 경우, 해당 구성은 다시 컴파일되어 각 클라이언트에 실행을 위해 게시됩니다. 서버에서 구성 정보를 적극적으로 업데이트하여 각 클라이언트가 설정하도록 강제할 수도 있습니다. 클라이언트의 구성 정보가 변경되면, 서버로부터 원래 구성을 받아 수정할 수 있습니다.
구성 관리: 퍼펫 설치 및 사용 (1)
4. 퍼펫의 미래
마지막으로, 퍼펫은 아직 개발 중인 젊은 도구입니다. 퍼펫 커뮤니티는 빠르게 성장하고 있으며, 끊임없이 많은 새로운 아이디어가 도입되어 개발, 업데이트, 모듈이 매일 발표되고 있습니다.
2. 구성 및 설치 (Puppet 2.6.4 CentOS 5.4 설치):
퍼펫 서버와 클라이언트에서 저장소를 구성하세요: RPM -으악 http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-4.noarch.rpm [root@puppetmaster ~]# vi /etc/yum.repos.d/epel.repo 추가: [에펠 인형] 이름=에펠 인형 baseurl=http://tmz.fedorapeople.org/repo/puppet/epel/5/$basearch/ enabled=0 GPGCHECK=0
저장소 puppet.repo를 추가하세요: [root@puppetmaster ~]# vi /etc/yum.repos.d/puppet.repo [퍼펫랩] name=Puppet Labs 패키지 baseurl=http://yum.puppetlabs.com/base/ enabled=0 GPGCHECK=0
인형극장 설치: [root@puppetmaster ~]# yum --enablerepo=epel,epel-puppet install puppet-server
호스트를 수정하고 다음 두 레코드를 추가하세요: [root@puppetmaster ~]# vi /etc/호스트 192.168.0.10 puppetmaster.leju.com 퍼펫 192.168.0.100 puppetclient.leju.com
퍼펫 설정: [root@puppetmaster ~]# CD /etc/퍼펫/ [root@puppetmaster 인형]# vi 인형.conf
[주인공] # 퍼펫 로그 디렉토리. # 기본 값은 '$vardir/로그'입니다. logdir = /var/log/puppet
# 퍼펫 PID 파일이 보관되는 곳. # 기본 숫자는 '$vardir/run'입니다. rundir = /var/run/puppet
# 여기는 SSL 인증서가 보관되는 곳입니다. # 기본 값은 '$confdir/ssl'입니다. ssldir = $vardir/ssl
[요원] # 퍼펫이 클래스 목록을 저장하는 파일 # 회수된 구성과 관련되어 있습니다. 로딩할 수 있습니다 # '--loadclasses'를 사용하는 별도의 '''puppet''' 실행 파일 # 옵션. # 기본 값은 '$confdir/classes.txt'입니다. classfile = $vardir/classes.txt
# 여기서 puppetd가 로컬 구성을 캐시합니다. An # 확장자는 캐시 형식이 자동으로 추가됨을 나타냅니다. # 기본 값은 '$confdir/localconfig'입니다. localconfig = $vardir/localconfig 서버 = puppetmaster.leju.com 보고서 = 참 듣기 = 진짜
[스승] ssl_client_header = SSL_CLIENT_S_DN ssl_client_verify_header = SSL_CLIENT_VERIFY 자동서명 = 참 보고서 = 저장
[root@puppetmaster 꼭두각시]# vi fileserver.conf [파일] path /etc/puppet/files 허락 *
[모듈들] 허락 *
[플러그인] 허락 *
[root@puppetmaster 인형]# mkdir /etc/puppet/files
[root@puppetmaster 인형]# CD 매니페스트/ site.pp를 만들고, 이는 꼭두각시 입력 설정 파일입니다: [root@puppetmaster manifests]# vi site.pp "modules.pp" 가져오기 "roles.pp" 가져오기 "nodes.pp" 가져오기
# 표준 유형에 대한 일반 설정 Exec { path => "/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin" }
Filebucket { main: server => "puppetmaster.leju.com" } 파일 { 백업 => 메인 }
modules.pp를 생성하여 모듈을 가져오세요: [root@puppetmaster 현현]# vi 모듈s.pp import "test"
서버 역할을 정의하기 위해 roles.pp를 생성하세요: [root@puppetmaster 현현]# vi 역할.pp 클래스 베이스클래스 { 포함 테스트
}
nodes.pp를 생성하여 서버 노드를 구성하세요: [root@puppetmaster 현현]# vi nodes.pp 노드 '베이스노드' { 기본 클래스 포함
}
노드 'puppetclient.leju.com'은 basenode {를 계승합니다. 태그("테스트")
}
노드 'puppetmaster.leju.com'은 basenode {를 상속합니다. 태그("테스트")
}
[root@puppetmaster 나타나며]# CD .. [root@puppetmaster 인형]# MKDIR 모듈 테스트 모듈 만들기: [root@puppetmaster 모듈]# mkdir -p 테스트/manifests/ [root@puppetmaster 모듈]# mkdir 테스트/파일/ [root@puppetmaster 모듈]# CD 테스트/파일/ [root@puppetmaster 파일]# vi test.txt 시험 선! [root@puppetmaster 파일]# CD .. /manifests/ 클라이언트에게 파일을 전달하는 테스트 클래스를 생성하세요: [root@puppetmaster 나타나]# vi init.pp 클래스 테스트 { 파일 { "/tmp/test.txt": ensure => 현재, 그룹 => "근", 소유자 => "뿌리", mode => "0644", 출처 => "puppet:///test/test.txt" }
}
퍼펫 마스터 출시: [root@puppetmaster 나타나]# /etc/init.d/puppetmaster 시작 포트 8140이 켜져 있는지 확인해.
퍼펫 클라이언트 설치: [root@puppetclient ~]# yum --enablerepo="epel, epel-puppet" 꼭두각시 설치
호스트를 수정하고 다음 두 레코드를 추가하세요: [root@puppetclient ~]# vi /etc/호스트 192.168.0.10 puppetmaster.leju.com 퍼펫 192.168.0.100 puppetclient.leju.com
인형 구성 방법: [root@puppetclient ~]# CD /etc/퍼펫/ [root@puppetclient 인형]# vi 꼭두각시.conf [주인공] # 퍼펫 로그 디렉토리. # 기본 값은 '$vardir/로그'입니다. logdir = /var/log/puppet
# 퍼펫 PID 파일이 보관되는 곳. # 기본 숫자는 '$vardir/run'입니다. rundir = /var/run/puppet
# 여기는 SSL 인증서가 보관되는 곳입니다. # 기본 값은 '$confdir/ssl'입니다. ssldir = $vardir/ssl
[요원] # 퍼펫이 클래스 목록을 저장하는 파일 # 회수된 구성과 관련되어 있습니다. 로딩할 수 있습니다 # '--loadclasses'를 사용하는 별도의 '''puppet''' 실행 파일 # 옵션. # 기본 값은 '$confdir/classes.txt'입니다. classfile = $vardir/classes.txt
# 여기서 puppetd가 로컬 구성을 캐시합니다. An # 확장자는 캐시 형식이 자동으로 추가됨을 나타냅니다. # 기본 값은 '$confdir/localconfig'입니다. localconfig = $vardir/localconfig
서버 = puppetmaster.leju.com 보고서 = 참 듣기 = 진짜
[root@puppetclient 인형]# vi namespaceauth.conf [꼭두각시 달리기자] 허락 puppetmaster.leju.com *.leju.com
[root@puppetclient 인형]# vi auth.conf 마지막 줄에 allow *를 추가하세요 ...... 경로 / 누구든 승인하세요 허락 *
[root@puppetclient 인형]# CD 꼭두각시 처형: [root@puppetclient ~]# 꼭두각시 --아니 --테스트 --추적 --디버그 만약 퍼펫 마스터가 autosign=true를 설정하지 않는다면, Puppet Master에서 실행해야 합니다: [root@puppetmaster ~]# 꼭두각시 인증 -l puppetclient.leju.com [root@puppetmaster ~]# 인형 인증 -s puppetclient.leju.com 이렇게 서명 puppetclient.leju.com 해. 그 다음 클라이언트로 돌아가 여기서 실행하세요: [root@puppetclient ~]# 꼭두각시 --아니 --테스트 --추적 --디버그 Join --noop, 이 구성은 클라이언트에 적용되지 않고, 주로 테스트용으로 출력물에 오류가 있는지 확인하고, 오류 없이 실행됩니다: [root@puppetclient ~]# 꼭두각시 --테스트 --추적 --디버그
문서 보기: [root@puppetclient ~]# ll /tmp/ 총 8개 -rw-r--r-- 1 어근 2월 25일 2월 11일 22:35 test.txt 문서가 발행되었습니다.
퍼펫 마스터를 누르는 것도 가능합니다: [root@puppetmaster ~]# 인형 차기 -d --호스트 puppetclient.leju.com 트리거 puppetclient.leju.com 지위 획득 지위는 성공입니다 puppetclient.leju.com 종료 코드 0으로 마무리했다 끝났어 0을 반환하면 클라이언트의 퍼펫이 성공적으로 트리거되었음을 의미합니다.
퍼펫을 자동 부팅 모드로 설정하세요: chkconfig --level 2345 puppet on
패웬트마스터를 승객 모드로 수정하세요 Passengary는 Apache 2.x의 확장판으로, Apache에서 Rails 또는 Rack 애플리케이션을 실행하기 위한 것입니다. puppetmaster는 기본적으로 WEBrick을 사용해 파일 서비스를 제공하지만, 많은 Puppetmaster 클라이언트가 있다면 puppetmaster의 파일 서비스 성능이 떨어질 수 있으니, Puppetmaster를 더 견고하게 만들기 위해 Apache를 사용해 파일 서비스를 제공하세요.
설치: [root@puppetmaster ~]# yum install httpd httpd-devel Ruby-devel rubygems Passenger 2.2.2 RHEL5는 잘 작동합니다. foreman.repo 저장소 추가: [root@puppetmaster ~]# vi /etc/yum.repos.d/foreman.repo [현장 감독] name=Foreman 스테이블 저장소 baseurl=http://yum.theforeman.org/stable GPGCHECK=0 활성화=1 [root@puppetmaster ~]# 얌 설치 루비젬-패신저-2.2.2-1 [root@puppetmaster ~]# 루비젬-랙-1.0.1-1 [root@puppetmaster ~]# 승객-설치-아파치2-모듈
Apache SSL 모듈 설치: [root@puppetmaster ~]# 맛있게 설치mod_ssl
Puppet 랙 애플리케이션을 구성하려면: mkdir -p /etc/퍼펫/rack/퍼펫마스터드/ mkdir /etc/puppet/rack/puppetmasterd/public /etc/puppet/rack/puppetmasterd/tmp CP /USR/Share/Puppet/EXT/Rack/files/apache2.conf /etc/httpd/conf.d/puppetmasterd.conf CP /USR/share/puppet/ext/rack/files/config.ru /etc/puppet/rack/puppetmasterd/ chown puppet /etc/puppet/rack/puppetmasterd/config.ru
[root@puppetmaster ~]# vi /etc/httpd/conf.d/passenger.conf 로드모듈 passenger_module /usr/lib/ruby/gems/1.8/gems/passenger-2.2.2/ext/apache2/mod_passenger.so PassengerRoot /usr/lib/ruby/gems/1.8/gems/passenger-2.2.2 승객루비 /usr/bin/ruby 승객 최대 수영장 크기 30 패신저풀들타임 1500 패신거맥스퀘이즈 1000 승객 통계 스로틀 속도 120 RackAutoDetect 끄기 레일 자동 감지 꺼짐
[root@puppetmaster ~]# vi /etc/httpd/conf.d/puppetmasterd.conf # 아마 이 설정을 조정하는 게 좋을 거야 승객 하이퍼포먼스 패신저맥스풀사이즈 12 패신저풀들타임 1500 # 승객 최대 요청 1000 승객 통계 스로틀 속도 120 RackAutoDetect 끄기 레일 자동 감지 꺼짐
8140 들어보세요
<VirtualHost *:8140> SSLEngine on SSLProtocol -ALL +SSLv3 +TLSv1 SSLCipherSuite 전부:! ADH:RC4+RSA:+HIGH:+MEDIUM:-LOW:-SSLv2:-EXP
SSLCertificateFile /var/lib/puppet/ssl/certs/puppetmaster.leju.com.pem SSLCertificateKeyFile /var/lib/puppet/ssl/private_keys/puppetmaster.leju.com.pem SSLCertificateChainFile /var/lib/puppet/ssl/ca/ca_crt.pem SSLCACertificateFile /var/lib/puppet/ssl/ca/ca_crt.pem # Apache가 CRL의 잘못된 서명에 대해 불만을 제기하면, 비활성화를 시도해 보세요 # CRL 다음 줄에 댓글로 확인하지만, 권장하지 않습니다. SSLCARevocationFile /var/lib/puppet/ssl/ca/ca_crl.pem SSLVerifyClient 선택 사항 SSLVerifyDepth 1 SSLOptions +StdEnvVars
# 다음 클라이언트 헤더는 동일한 구성을 Pound와 함께 작동시킬 수 있게 합니다. RequestHeader set X-SSL-Subject %{SSL_CLIENT_S_DN}e RequestHeader set X-Client-DN %{SSL_CLIENT_S_DN}e RequestHeader set X-Client-Verify %{SSL_CLIENT_VERIFY}e
DocumentRoot /etc/puppet/rack/puppetmasterd/public/ RackBaseURI / <디렉토리 /etc/puppet/rack/puppetmasterd/> 옵션 없음 허용 오버라이드 없음 명령 허용, 거부 모두에게 허용한다 </Directory> </VirtualHost>
puppetmaster 설정 파일을 수정하여 다음 두 줄을 추가하세요: [root@puppetmaster ~]# vi /etc/puppet/puppet.conf [스승] ssl_client_header = SSL_CLIENT_S_DN ssl_client_verify_header = SSL_CLIENT_VERIFY
/etc/sysconfig/puppetmaster를 수정하세요: [root@puppetmaster ~]# vi /etc/sysconfig/puppetmaster # 마지막에 다음 줄을 추가하세요: PUPPETMASTER_EXTRA_OPTS="--리포트 스토어" 만약 현장 감독과 퍼펫-대시보드 모두에게 보고해야 한다면, 다음 줄을 추가하세요: PUPPETMASTER_EXTRA_OPTS="--보고, 매장 감독, puppet_dashboard"
퍼펫마스터 서비스를 중단하고 아파치 서비스를 시작하세요: [root@puppetmaster ~]# /etc/init.d/꼭두각시 조종사 멈춤 [root@puppetmaster ~]# /etc/init.d/httpd 시작
부트는 퍼펫마스터 서비스를 시작하는 것이 아니라 httpd 서비스를 시작합니다: [root@puppetmaster ~]# chkconfig --레벨 2345 꼭두각시 조종자 꺼짐 [root@puppetmaster ~]# chkconfig --level 2345 httpd on
포트 8140이 활성화되어 있는지 확인하세요: [root@puppetmaster ~]# netstat -tunlp |grep 8140 TCP 0 0 :::8140 :::* 들어보세요 9834/httpd
클라이언트 측에서 오류 로그가 인쇄되는지 테스트해 보세요: [root@puppetclient ~]# 꼭두각시 --테스트 --추적 --디버그 |