많은 서버를위한 시스템 업데이트


11

많은 서버가 있으며 여전히 모든 서버를 업데이트하려고합니다. 실제 방법은 모든 sysadmin이 서버에서 서버로 이동하여 aptitude update && aptitude upgrade여전히 멋지지 않다는 것입니다.

나는 여전히 더 좋고 매우 똑똑한 솔루션을 찾고 있습니다. 꼭두각시가이 일을 할 수 있습니까? 어떻게합니까?


예, 꼭두각시가 이것을 할 수 있습니다. cssh는 단기적으로도 문제를 해결합니다.
Sirex

답변:


10

다음 exec과 같은 유형을 사용할 수 있습니다 .

exec { "upgrade_packages":
    command => "apt-get upgrade -q=2",
    path    => "/usr/local/bin/:/bin/:/usr/bin/",
    # path  => [ "/usr/local/bin/", "/bin/" ],  # alternative syntax
}

솔직히 직접 시도하지는 않았지만 그러한 exec 정의가 포함 된 새 모듈을 작성해야한다고 생각합니다.

apt-get upgrade명령은 상호 작용이다. 자동으로 실행되도록 -q=2위와 같이 옵션 을 추가 할 수 있습니다 .


아주 좋아 보인다! 나는 이것을 시도하기 위해 일부 테스트 머신으로 꼭두각시 유스 케이스를 작성한다고 생각합니다. 많은 감사합니다!
데니스 Wisnia

3
꼭두각시 추천 +1! sysadmin으로 인생을 바꾼다 :)
Antoine Benkemoun

3
이 exec는 모든 Puppet 실행 (30 분마다)마다 실행되므로 "서버가 많을 경우"프록시 및 / 또는 미러를 손상시킬 수 있습니다. 개인적으로 위의 exec 유형에 대한 일정을 구현하여 예를 들어 밤에만 실행되도록하는 것이 좋습니다. 내 의견으로는, Puppet은 시스템 상태를 시행하기위한 것이며 인간을 감독하지 않고 upgrade_packages와 같은 명령을 실행하는 것은 약간 무섭고 약간의 Puppet 남용입니다. Puppet Enterprise와 함께 제공되는 mColective 도구 (또는 오픈 소스와 동등한 도구)가 더 나은 옵션 일 수 있습니다.
wzzrd

7
퍼펫 설치에는 파일의 타임 스탬프를 확인하고 클라이언트의 버전보다 최신 버전 인 경우에만 업그레이드를 실행하는 유사한 실행 파일이 있습니다. 모든 것을 업그레이드하고 싶을 때 touch꼭두각시 마스터에있는 파일입니다.
Ladadadada

@ wzzrd : 좋은 지적이지만 Ladadadada가 말한 것처럼 외부 상태를 확인하면 더 나아질 수 있습니다.
Khaled

7

모든 호스트가 데비안 인 경우 무인 업그레이드 패키지를 사용해 볼 수 있습니다.

http://packages.debian.org/sid/unattended-upgrades

여기서는 꼭두각시를 사용하여 데비안 가상 머신을 관리했으며, 꼭두각시로 모든 서버에서 무인 업그레이드 구성을 활성화하고 관리 할 수 ​​있습니다.

최근 우리 팀은 모든 서버에서 명령을 실행하기 위해 mcollective 도구를 테스트하고 있지만 mcollective 루비 기술을 사용해야합니다.

[s] 구토


5

꼭두각시, 사실 및 mCollective를 추천합니다.

mCollective는 사실을 필터로 사용하여 일련의 호스트 (병렬로)를 통해 명령을 실행할 수있는 매우 유용한 프레임 워크입니다.

로컬 프록시 / 캐시를 추가하면 서버 관리가 잘 설정됩니다.


Puppet은 대량 / 오케스트레이션 된 패키지 업데이트와 같은 관리 작업을 관리하는 가장 좋은 도구는 아닙니다.
robbyt

3

여러 서버에서 단일 명령을 실행하도록 만들어진 도구를 사용하십시오. 그리고 그것은 터미네이터 또는 ClusterSSH로 열린 kazillion 터미널을 갖는 것이 아니라 작업에 적합한 도구를 실행하는 관리 서버에 대한 단일 터미널을 갖는 것을 의미합니다.

이 맥락에서 func, Salt 또는 mCollective를 추천합니다. 이미 Puppet을 가지고 있다면 mCollective로 이동하십시오 (Puppet에 잘 통합됨). 그렇지 않고 컴퓨터에 오래된 Python이 있으면 func을 즐길 수 있습니다. 새로운 파이썬이라면, Salt를 사용해보십시오. 이러한 모든 도구는 명령 행에 지정된 명령을 비동기식으로 실행합니다. 이는 순차 ssh 루프보다 훨씬 재미 있으며 심지어 종료 된 터미네이터 창에서 동일한 서버에 대해 동일한 적성 명령을 수행하는 것입니다.

당신은 확실히 것이다 사랑 소금 .


2

그래서 좋은 해결책에 기여하는 많은 것들이 있다고 생각합니다.

  • 대역폭
  • 관리 용이성
  • 문제가 발생할 경우 자세한 로깅.

대역폭 : 기본적으로 대역폭 을 절약 할 수있는 두 가지 대안이 있습니다.

  • 데비안 미러를 설정하고이 미러를 사용하도록 모든 클라이언트를 구성 하십시오. 자세한 내용 은 http://www.debian.org/mirror/ 를 참조하십시오. (이것이 좋습니다)
  • 모든 클라이언트가이 캐시에서 이익을 얻을 수 있도록 프록시 (apt-cacher, apt-proxy 또는 Squid) 설정 및 캐시 증가

관리 : PDSH , PSSH , GNU Parallel 과 같은 병렬 쉘을 구성하고 이전에 예제 머신에서 명령을 테스트 한 경우 모든 클라이언트에서 명령을 발행합니다. 그런 다음 다른 모든 것에서는 실패 할 가능성이별로 없습니다. 또는 모든 클라이언트에서 크론 작업을 고려할 수 있지만 자동으로 실패 할 수 있으므로 첫 번째 솔루션을 선호합니다.

업그레이드 동시성에 대해 염려되는 경우 다음을 사용하여 명령을 예약 할 수 있습니다. at

로깅 : 병렬 쉘과 마찬가지로 출력을 리디렉션 할 수 있으므로 stderr과 stdout을 결합하여 로그 파일에 씁니다.


대역폭 : deb 저장소에 특정한 캐싱 프록시가 있습니다. apt-cacher 또는 apt-proxy를 찾으십시오.
S19N

나는 이것을 대답에 통합 할 것입니다.
math

mCollective와 같은 소프트웨어는 병렬 명령 실행을 허용하고 출력 / 결과를보고합니다.
CloudWeavers

1

내 자신의 병렬 ssh 래퍼 : classh 는 다양한 병렬 및 클러스터 ssh 도구의 대안입니다.

당신은 그것을 좋아하거나 싫어할 수 있습니다. 내가 여기에 언급 한 이유는 세 가지뿐입니다.

  • 설치 및 사용이 매우 간단합니다. Python 2.5 표준 라이브러리 이외의 외부 종속성이없는 단일 .py 파일입니다.
  • 한계 내에서 매우 신뢰할 수 있습니다. 나는 매일 하루에 거의 100 번 사용하며 일반적으로 명령 당 수백에서 수천 개의 대상을 수집합니다. (한 번에 25,000 개가 넘는 서버의 대상 목록에서 테스트했습니다.) 그것은 결코 실행되지 않았거나, 완료하지 못했거나 나에게 불확실한 행동을주지 못했습니다. (Python subprocess.communicate()메소드 의 제한 사항과 관련된 유일한 제한 사항 -예를 들어 약 64K의 stdout과 최대 64K의 stderr 만 캡처 할 수 있습니다. 또한 stdin에서 읽으려고 시도하는 원격 프로세스는 단순히 정지됩니다 로컬 ssh subporcess가 classh 의 시간 초과 처리에 의해 자동으로 종료 될 때까지 )
  • classh.py 를 모듈 로 사용하기 위해 파이썬에서 커스텀 스크립트를 작성하는 것은 매우 간단 합니다. 따라서 다음과 같은 것을 작성하는 것이 매우 쉽습니다.

    
        !#/bin/env python
        import classh
        job = classh.SSHJobMan(cmd, targets)
        job.start()
        while not job.done():
            completed = job.poll()
            for i in completed:
                # do something with the classh.JobRecord object referenced by i
        # done

    # You can optionally do post-processing on the dictionary of JobRecords here # keyed off the target strings (hostnames) </code></pre>

그것이 전부입니다. 예를 들어, 내포 된 완료 루프에서 특정 종료 상태를 리턴 한 특정 목록을 수집하거나 특정 오류 메시지를 스캔하고 해당 작업을 처리하기위한 후속 작업을 설정할 수 있습니다. 작업은 각각 완료 될 때까지 언제든지 100 개의 작업을 동시에 실행하므로 수백 개의 호스트에 대한 간단한 명령은 보통 몇 초 안에 완료되며 하나의 긴 명령 문자열에 매우 복잡한 쉘 스크립트가 있습니다. 예를 들어, 50 줄 정도는 ... 내 환경에서 시간당 약 10K 개의 호스트를 10 분 안에 몇 천 개가 넘는 호스트로 완료 할 수 있습니다.

따라서 이것은 꼭두각시 구성을 구현하고 테스트를 잘 수행 할 때까지 임시 측정으로 사용할 수있는 것일 수 있습니다. 또한 호스트에서 표준을 벗어나는 호스트를 거의 임시로 조사하지 않아도됩니다. 다양한 작은 방법.


덧붙여서 bitbucket.org의 고급 웹 페이지에는 직접 작성하기로 결정하기 전에 조사한 다양한 ssh 래퍼 목록도 있습니다. 그들 중 누구라도 당신을 위해 일할 수 있습니다. 또한 비슷하지만 다소 더 광범위하고 약간 더 복잡한 기능을 갖춘 새로운 프로젝트 인 Python Fabric을 찾을 수 있습니다.
Jim Dennis

1

exec를 사용하는 대답은 매우 유용합니다.

그러나 apt-get 매뉴얼에 따르면 -q = 2를 이런 식으로 사용하는 것은 좋지 않습니다 (문제없이 몇 년 동안 사용했지만)

-q, --quiet
       Quiet; produces output suitable for logging, omitting progress indicators. More q's will produce more quiet up to a maximum of 2. You can also use -q=# to set the
       quiet level, overriding the configuration file. Note that quiet level 2 implies -y, you should never use -qq without a no-action modifier such as -d, --print-uris or
       -s as APT may decided to do something you did not expect. Configuration Item: quiet.

나는 몇 년 동안 스크립트를 사용하여 apt-get을 다음과 같이 실행했습니다.

ssh example.org "apt-get update && apt-get -y upgrade && apt-get -y dist-upgrade && apt-get clean"

꼭두각시 및 사람들이 확실히 언급 한 다른 도구와 같은 것들이 효과가있을 수 있지만 기본적으로 인간이 입력 한 몇 가지 명령을 모방하는 것은 과잉 것 같습니다. 특정 작업에 가장 간단한 도구를 사용한다고 생각합니다.이 경우 bash 스크립트는 기능을 잃지 않고 얻는 것만 큼 간단합니다.


예, 일부 서버에는 좋은 방법이라고 생각합니다. 그러나 더 많은 옵션을 얻으려면 (각 서버에서 일부 구성을 롤 아웃하는 등) 꼭두각시가 더 나은 방법입니다. 저는 현재 꼭두각시와 그 아름다운 곳에서 일하고 있습니다.
Dennis Wisnia

동의하지 않습니다. 그러나 포스터가 무엇을 요구했는지에 따라 지나치게 과장된 것일 수 있습니다.
aseq

1

수년 동안 apt-dater를 사용하여 패키지를 행복하게 업그레이드하고 설치했습니다 . 원격 패키지 관리를위한 가볍고 효과적인 도구입니다. 그것은 사용 screen, sudo하고 ssh.
패키지 관리의 경우 apt-dater 가 구성 관리 도구보다 쉬운 솔루션 일 수 있습니다.
apt-dater 는 데비안 및 CentOS와 같은 다양한 GNU / Linux 버전에서 중앙 집중식 패키지 관리에 편리합니다.


1

Fabric 을 사용할 수 있습니다 . Fabric은 응용 프로그램 배포 또는 시스템 관리 작업에 SSH 사용을 간소화하기위한 Python (2.5-2.7) 라이브러리 및 명령 줄 도구입니다.


0

webmin을 사용하고 webmin 클러스터 기능을 사용하면 모든 시스템을 하나의 webmin 콘솔에 추가하고 모든 명령을 발행하거나 한 곳에서 모든 시스템을 제어 할 수 있습니다.

또는

클러스터 ssh 사용

또는

PSSH


예, 정말 많은 창을 열 수 있고 동시에 작동 할 수 있습니다. 클러스터 SSH는 꽤 멋지지만 충분히 똑똑하지 않다고 생각합니다.
데니스 Wisnia

0

모든 호스트가 데비안 (또는 파생 제품)을 실행중인 경우 다른 해결책은 cron-apt 패키지 를 사용하는 것 입니다. 그러나 설명서에 제안 된대로 약간의주의를 기울여야합니다.

현재 수십 대의 서버에서 cron-apt를 사용하여 모든 보안 업데이트를 자동 및 무인으로 수행하고 있습니다. 원치 않는 업그레이드를 피하려면 데비안 안정적인 배포를 실행하는 서버에서만 cron-apt를 사용하고 적절한 소스를 구성해야하므로 별칭 (안정적)이 아닌 배포 이름 wheezy를 사용하십시오 .

내가 사용하는 특정 cron-apt 구성은 하나의 작업 파일에 요약되어 있습니다. /etc/cron-apt/action.d/5-install

dist-upgrade -y -o APT::Get::Show-Upgraded=true -o Dir::Etc::SourceList=/etc/apt/sources.list.d/security.list -o Dir::Etc::SourceParts="/dev/null"

다른 업그레이드는 업그레이드 중 수동 개입이 필요할 수 있으므로 화면 또는 가장 적절한 것을 사용하여 수동으로 수행됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.