내부 IT 인프라 외에도 온라인 서비스를 호스팅하는 약 500대의 Linux 시스템이 있습니다. 이들은 Database An, Product An, NFS, Backoffice 등과 같은 클러스터 세트로 그룹화됩니다. 또한 당사의 사양 및 요구 사항에 따라 외부 공급자가 관리합니다.
그러나 (웹) 소프트웨어 개발, 롤아웃 및 배포 중에 많은 문제에 부딪혔습니다. 특히 개발 및 스테이징 환경이 라이브 시스템과 거의 공통점이 없었기 때문에(귀찮은 세부 사항은 생략하겠습니다..)
그래서 저는 다양한 라이브 시스템을 최대한 정확하게 복제하고 개발자에게 투명한 "실제" 데이터베이스가 아닌 개발 데이터베이스에 연결되도록 준비하는 가상 머신을 만들려고 노력합니다 root
. 이것은 잘 작동하지만 ...
이러한 시스템을 원격으로 관리하는 방법을 알고 싶습니다.대부분? 내가 모르는 소프트웨어 제품군이 있나요? 아니면 적어도 몇 가지 기술이나 원리에 대해 잘 알고 있어야 합니까?
우리는 각 개발자에게 로컬에서 실행되는 여러 이미지(VirtualBox)를 제공할 것입니다. 품질 보증에서는 가상 클러스터(XEN 또는 Hyper-V)를 얻습니다. 추가 서버 모듈을 프로비저닝해야 하거나 새 데이터베이스 연결을 다시 라우팅해야 하거나 패키지 관리자가 제공하는 모든 것을 업데이트하려는 경우...각 시스템에 강제로 로그인하거나 동료가 다운로드하도록 하지 않고 어떻게 이 작업을 수행할 수 있습니까? 미리 준비된 스크립트를 실행하시겠습니까?
나는 많은 해결책이 있다고 확신합니다. 글쎄요, 제가 너무 멍청해서 검색 엔진에 올바른 키워드를 입력하지 못하는 걸까요... 아니면 이 문제가 들리는 것만큼 사소하지 않은 걸까요?
참고로:
- 거의 모든 시스템은 Debian GNU/Linux 6.x "squeeze"를 실행합니다.
- 어떤 개발자도 자신의 워크스테이션에서 특정 운영 체제를 사용하도록 강요받지 않습니다.
- 물론 예산은 제한되어 있지만 독점 소프트웨어를 구입할 수 없을 정도로 적지는 않습니다.
- 위의 공급자와 관련된 솔루션이 선호됩니다.
답변1
정확히 무엇이 필요한지, 무엇을 찾고 있는지에 따라 다릅니다. 그러나 일반적으로 여러 가지 솔루션이 존재합니다."구성 관리좋다:
퍼핏은 대규모 커뮤니티와 외부에서 제공되는 레시피가 많기 때문에 개인적으로 추천하고 싶습니다. 이를 통해 시스템을 자동으로 구성하고 관리할 수 있습니다. 이를 자신의 저장소 및 자동 업데이트와 결합하면 다음과 같습니다.unattended-upgrades
시스템을 자동으로 업데이트할 수 있습니다.
company-base
또 다른 해결책은 필요한 소프트웨어에 자동으로 의존하고 시스템을 자동으로 구성할 수 있는 자체 패키지 등을 제공하는 것입니다 .
또한 자동화된 배포(베어본 및 가상화)도 조사해야 합니다. 이를 구성 관리 또는 자체 저장소와 결합하면 시스템을 쉽게 자동화하고 다시 설치할 수 있습니다. 자동 설치를 시작하려면 다음을 확인하세요.남자를위한libvirt 및 베어 메탈 설치를 지원하며 통합형 인형 지원 기능을 갖추고 있습니다. 직접 해보고 싶으시면 한번 가보세요시작하다 (redhat 등) 또는 "사전 설정"을 사용하여 시스템을 자동으로 구성합니다. 데비안의 경우 다음과 같은 것을 사용할 수도 있습니다부팅 방지 프로그램또는 이름이 지정된 래퍼grml-debootstrap가상화된 이미지를 지원합니다.
개발자에게 VirtualBox 이미지를 제공하려면 다음을 확인하세요.도보 여행가VirtualBox를 사용하여 가상화된 시스템을 자동으로 생성할 수 있으며 Chef, Puppet 및 쉘 스크립트를 지원하여 가상 환경을 사용자 정의할 수 있습니다.
기존 공급자의 솔루션을 사용하려면 시스템을 어떻게 관리하는지 물어봐야 하지만 이는 일종의 구성 관리일 가능성이 높습니다. 구성 서버에 대한 액세스 권한이 있으면 시스템에서 해당 에이전트를 실행할 수 있습니다.
devops
Google 키워드에 대해서는 , 및 을 확인하세요 configuration management
.it automation
server orchestration
간단히 말해서, 가능한 한 많이 자동화하고 작업을 수동으로 수행할 생각조차 하지 마십시오.
답변2
Ulrich는 소프트웨어 배포 및 자동화된 서버 설정에 대한 답변을 제공했습니다.
이것의 뒤에 있는 원리는
- 서버의 모양과 느낌을 정의하세요. 여기에는 기본적으로 설치된 일반 소프트웨어, 파티션 구성표 및 파일 시스템 레이아웃이 포함됩니다.
- 프로덕션, 스테이징, 테스트 및 개발 서버는 이러한 기본 기준 측면에서 다르지 않아야 합니다(그렇지 않으면 나중에 그랬던 것처럼 문제가 발생하게 됩니다).
- 적절한 변경 관리를 사용하여 모든 구성의 작은 한 줄 변경 사항을 포함하여 모든 변경 사항을 문서화하세요.
- 항상 테스트 단계에서 먼저 변경한 다음 개발 단계에서, 그 다음 준비 단계에서 마지막으로 프로덕션 단계에서 변경합니다.
많은 수의 서버를 관리하려면 편리한 도구가 필요합니다. 제가 개인적으로 가장 좋아하는 도구는 Cluster-Ssh( cssh
)입니다. 한 번 입력하면 여러 서버에서 동시에 변경이 가능합니다.
문제를 발견하고 이를 해결하기 위해 수정하는 경우:
- 수정 사항이 작동하면 test/dev/staging/production에 수정 사항을 적용하십시오(위 참조).
- 향후 가상 머신 복제에서 이 오류가 발생하지 않도록 가상 템플릿에 수정 사항을 적용하세요.
- 실제 설치 프로세스(kickstart/autoyast/기타)에 수정 사항을 적용합니다.
- 모든 서버에 수정사항 적용
패치할 서버 수가 많은 경우 프로세스를 자세히 문서화하고 마지막에 다른 팀에서 패치가 완전히 적용되었는지 확인해야 합니다.
이를 위해 우리는 Mantis(오픈 소스, PHP)를 사용합니다.
답변3
저는 여러 국가에서 약 30개 제품과 수백 대의 서버를 관리하고 있습니다. 저는 소프트웨어 구성 관리자이므로 루트 액세스 권한이 없고(설계상) 데이터베이스나 서버에 접근하지 않으며(역시 설계상) 회사 보안으로 인해 많은 어려움을 겪어야 합니다. . 하지만 데이터베이스 링크 및 변경 사항을 포함하여 테스트, 준비 및 프로덕션 구성을 관리합니다. ssh
, python
및 쉘 스크립트의 조합을 사용하여 서버에 보내는 스크립트가 많이 있습니다 .
고려해야 할 주요 사항은 다음과 같습니다.
- 서버와 어떤 유형의 상호 작용을 하게 됩니까? 그냥 파일업로드? 명령줄 프로그램을 실행하시겠습니까? 원격 X 클라이언트를 실행 중이신가요?
- 이러한 서버에 액세스하려면 어떤 수준의 보안이 필요합니까? 방화벽, 보안 네트워크, VPN?
ssh
적절하고 중앙의 안전한 위치에 위치해 있습니까 ? - 각 서버에서 얼마나 많은 자동화를 수행할 수 있습니까? 각 서버에 프로그램을 설치해서 실행할 수 있나요? 아니면
ssh
원격으로 실행하는 등의 방법으로 프로그램을 스트리밍 해야 하나요 ? 스크립트를 작성expect
하거나 명령줄에서 호출할 수 있나요 ?
ssh
VirtualBox는 Ulrich가 언급한 시스템을 통해 관리 할 수 있는 다양한 명령줄 도구를 제공합니다 .puppet
답변4
지난 몇 년 동안 스크립트를 사용하여 구성을 구축하는 기능에 초점을 맞춘 새로운 미니멀리스트 시스템 세트가 등장했습니다. 스크립팅 프레임워크이기 때문에 순서가 필요한 작업에 능숙한 경향이 있습니다.
핀포라
pyinfra는 대규모 인프라를 초고속으로 자동화합니다. Ad Hoc 명령 실행, 서비스 배포, 구성 관리 등에 사용할 수 있습니다.
유도
간단한 오케스트레이션 및 구성 관리
http://github.com/rollcat/judo
재설정(1) : pln(5)
모든 스크립팅 언어를 사용하여 시스템 구성