Cập nhật hệ thống cho nhiều máy chủ


11

Chúng tôi có nhiều máy chủ và vẫn muốn cập nhật tất cả. Cách thực tế là bất kỳ sysadins nào đi từ máy chủ này sang máy chủ khác và thực hiện aptitude update && aptitude upgrade- nó vẫn không hay.

Bây giờ tôi đang tìm kiếm một giải pháp vẫn tốt hơn và rất thông minh. Con rối có thể làm công việc này? Bạn làm nó như thế nào?


vâng, con rối có thể làm điều này. cssh cũng sẽ khắc phục vấn đề của bạn trong thời gian ngắn.
Sirex

Câu trả lời:


10

Bạn có thể sử dụng execloại như:

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

Thành thật mà nói, tôi đã không thử bản thân mình, nhưng tôi nghĩ bạn chỉ cần tạo một mô-đun mới bao gồm định nghĩa thực thi như vậy.

Các apt-get upgradelệnh là tương tác. Để làm cho nó chạy yên tĩnh, bạn có thể thêm tùy chọn -q=2như được hiển thị ở trên.


nhìn rất tốt! Tôi nghĩ rằng tôi tạo một Puppet Usecase với một số Testmachines để thử điều này. Cảm ơn nhiều!
Dennis Wisnia

3
+1 để giới thiệu Con rối! Thay đổi cuộc sống của bạn dưới dạng một sysadmin :)
Antoine Benkemoun

3
Lưu ý rằng trình thực thi này sẽ chạy trên mỗi lần chạy rối (cứ sau 30 phút) có thể làm hỏng proxy của bạn và / hoặc gương của bạn khá khó khăn nếu bạn có "nhiều máy chủ". Cá nhân, tôi khuyên bạn nên thực hiện một lịch trình cho loại thực thi ở trên, đảm bảo rằng nó chỉ chạy vào ban đêm, ví dụ. Tuy nhiên, theo tôi, Puppet có nghĩa là thực thi trạng thái hệ thống và chạy một lệnh giống như nâng cấp mà không có sự giám sát của con người thông qua nó, vừa đáng sợ vừa có chút lạm dụng Puppet. Công cụ mColective đi kèm với Puppet Enterprise (hoặc tương đương với nguồn mở) có thể là một lựa chọn tốt hơn.
wzzrd

7
Cài đặt con rối của chúng tôi có một trình thực thi tương tự kiểm tra dấu thời gian trên một tệp và chỉ chạy nâng cấp nếu nó mới hơn phiên bản trên máy khách. Khi chúng tôi muốn nâng cấp mọi thứ, chúng tôi touchsẽ gửi tập tin về con rối.
Ladadadada

@wzzrd: Điểm tốt, nhưng nó có thể được làm tốt hơn bằng cách kiểm tra một số điều kiện bên ngoài như Ladadadada nói.
Khaled

7

nếu tất cả các máy chủ của bạn là debian, bạn có thể thử gói nâng cấp không giám sát.

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

Ở đây, chúng tôi đã sử dụng con rối để quản lý các máy ảo debian của chúng tôi, với con rối chúng tôi có thể kích hoạt và quản lý các cấu hình nâng cấp không cần thiết trên tất cả các máy chủ.

Gần đây, nhóm của chúng tôi đang thử nghiệm công cụ mcollective để chạy các lệnh trên tất cả các máy chủ, nhưng để sử dụng các kỹ năng ruby ​​mcollective là cần thiết.

[s] Guto


5

Tôi khuyên bạn nên đi cho Puppet, facter và mCollective.

mCollective là một khung công tác rất đẹp, nơi bạn có thể chạy các lệnh trên một loạt các máy chủ (song song) bằng cách sử dụng facter làm bộ lọc.

Thêm vào đó một proxy / bộ đệm cục bộ và bạn sẽ được thiết lập tốt để quản lý máy chủ.


Tôi đồng ý, Puppet không thực sự là công cụ tốt nhất để quản lý các hành động hành chính như cập nhật gói hàng loạt / được phối hợp.
cướp

3

Sử dụng một công cụ được tạo để chạy một lệnh trên nhiều máy chủ. Và do đó, tôi không có nghĩa là có một thiết bị đầu cuối kazillion mở bằng Terminator hoặc ClusterSSH, mà thay vào đó có một thiết bị đầu cuối duy nhất cho một máy chủ quản lý chạy một công cụ phù hợp với công việc.

Tôi muốn giới thiệu func, Salt hoặc mCollective trong bối cảnh này. Nếu bạn đã có Puppet, hãy tìm mCollective (nó tích hợp độc đáo trong Puppet). Nếu bạn không và bạn có một Python cũ trên máy của mình, bạn có thể thích func. Nếu bạn Python mới, hãy thử Salt. Tất cả các công cụ này chạy lệnh được chỉ định ở dòng lệnh không đồng bộ, điều này thú vị hơn nhiều so với vòng lặp ssh tuần tự hoặc thậm chí thực hiện các lệnh aptitude tương tự trong các cửa sổ Terminator cho các máy chủ.

Bạn chắc chắn sẽ yêu thích Salt .


2

Vì vậy, tôi đoán có nhiều điều góp phần vào một giải pháp tốt:

  • Băng thông
  • Dễ quản trị
  • Đăng nhập chi tiết trong trường hợp một cái gì đó vít lên.

Băng thông : Về cơ bản, hai phương án để tiết kiệm băng thông xuất hiện trong đầu tôi:

  • Thiết lập máy nhân bản Debian và định cấu hình tất cả các máy khách của bạn để sử dụng máy nhân bản này, xem http://www.debian.org/mirror/ để biết thêm chi tiết. (Tôi muốn giới thiệu điều này)
  • Thiết lập proxy (apt-cacher, apt-proxy hoặc Squid) và tăng bộ đệm để tất cả khách hàng của bạn có thể kiếm lợi từ bộ đệm này

Quản trị : Tôi sẽ cấu hình một trình bao song song như PDSH , PSSH , GNU Parallel và ban hành lệnh trên tất cả các máy khách, nếu tôi đã kiểm tra lệnh trước đó trên một máy mẫu. Sau đó, nó không có khả năng rằng nó có thể thất bại trên tất cả những người khác. Ngoài ra, bạn có thể xem xét một công việc định kỳ trên tất cả các khách hàng, nhưng sau đó nó có thể tự động thất bại, vì vậy tôi thích giải pháp đầu tiên.

Nếu bạn lo ngại về tính đồng thời của việc nâng cấp, bạn có thể lên lịch các lệnh của mình với at

Ghi nhật ký : Cũng như các shell song song, bạn có khả năng chuyển hướng đầu ra, tôi sẽ kết hợp stderr và stdout và ghi nó vào một logfile.


Băng thông: có các proxy lưu trữ cụ thể cho các kho lưu trữ deb, hãy tìm apt-cacher hoặc apt-proxy.
S19N

Tuyệt vời tôi sẽ tích hợp điều này trong câu trả lời.
toán

và phần mềm như mCollective sẽ cho phép thực thi các lệnh song song VÀ báo cáo kết quả / kết quả.
CloudWeavers

1

Trình bao bọc ssh song song của riêng tôi: classh là một thay thế cho các công cụ ssh Parallel và cluster khác nhau ngoài kia.

Bạn có thể thích nó tốt hơn hoặc bạn có thể ghét nó. Chỉ có ba lý do tôi đề cập đến ở đây:

  • Việc cài đặt và sử dụng cực kỳ đơn giản: một tệp .py duy nhất không có phụ thuộc bên ngoài ngoài các thư viện chuẩn Python 2.5.
  • Nó cực kỳ đáng tin cậy trong giới hạn của nó. Tôi sử dụng nó mỗi ngày làm việc, thường là gần 100 lần mỗi ngày và thường trên các bộ sưu tập từ hàng trăm đến vài nghìn mục tiêu mỗi lệnh. (Tôi đã thử nghiệm nó trên danh sách mục tiêu của hơn 25 nghìn máy chủ cùng một lúc). Nó không bao giờ thất bại để chạy, không hoàn thành hoặc cho tôi bất kỳ hành vi không xác định. (Những hạn chế chỉ liên quan đến những người của Python subprocess.communicate()phương pháp --- vì vậy bạn chỉ có thể nhận được chụp khoảng 64K của stdout và, riêng biệt lên đến 64K của stderr, ví dụ; còn bất kỳ quá trình từ xa mà cố gắng để đọc từ stdin của nó sẽ chỉ đơn giản là gian hàng cho đến khi bộ xử lý phụ ssh cục bộ bị giết, tự động bằng cách xử lý thời gian chờ của classh )
  • Thật đơn giản để viết một tập lệnh tùy chỉnh, bằng Python, để sử dụng classh.py làm mô-đun. Vì vậy, thật dễ dàng để viết một cái gì đó như:

    
        !#/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>

Thats tất cả để có nó. Ví dụ: trong vòng lặp hoàn thành lồng nhau, bạn có thể thu thập danh sách tất cả những người đã trả lại một số trạng thái thoát cụ thể hoặc để quét các thông báo lỗi cụ thể và thiết lập các công việc tiếp theo để xử lý các công việc đó. (Các công việc sẽ được chạy đồng thời, mặc định 100 công việc bất cứ lúc nào, cho đến khi hoàn thành từng công việc; vì vậy một lệnh đơn giản trên vài trăm máy chủ thường hoàn thành trong vài giây và tập lệnh shell rất phức tạp trong một chuỗi lệnh dài duy nhất .. . nói rằng năm mươi dòng hoặc hơn ... có thể hoàn thành hơn một vài nghìn máy chủ trong khoảng 10 phút ... khoảng 10 nghìn máy chủ mỗi giờ trong môi trường của tôi, với nhiều máy chủ được đặt liên lục địa).

Vì vậy, đây có thể là thứ bạn có thể sử dụng như một biện pháp đặc biệt cho đến khi bạn thực hiện cấu hình con rối của mình và kiểm tra tốt ... và nó cũng khá thuận tiện để thực hiện các khảo sát quảng cáo nhỏ về máy chủ của bạn để xem cái nào đang sai lệch so với tiêu chuẩn của bạn trong nhiều cách nhỏ khác nhau.


Tình cờ trên các trang web của lớp, tại bitbucket.org cũng có một danh sách các trình bao bọc ssh khác mà tôi đã khảo sát trước khi tôi quyết định tự viết. Bất kỳ trong số họ có thể làm việc cho bạn. Ngoài ra, bạn có thể tra cứu Python Fabric, một dự án mới hơn với các tính năng tương tự, mặc dù rộng hơn và phức tạp hơn một chút.
Jim Dennis

1

Câu trả lời sử dụng exec là khá hữu ích.

Tuy nhiên, theo hướng dẫn sử dụng apt-get, không nên sử dụng -q = 2 theo cách này (mặc dù tôi đã sử dụng nó trong nhiều năm mà không gặp vấn đề gì)

-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.

Tôi đã sử dụng một tập lệnh trong nhiều năm, chạy apt-get theo cách sau:

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

Những thứ như con rối và các công cụ khác mà mọi người đề cập chắc chắn có thể hoạt động, nhưng có vẻ như nó quá mức cho những gì về cơ bản chỉ là bắt chước một vài lệnh được gõ bởi một con người. Tôi tin vào việc sử dụng công cụ đơn giản nhất cho một công việc cụ thể, trong trường hợp này, một tập lệnh bash đơn giản như nó có được mà không làm mất chức năng.


Vâng, tôi nghĩ rằng đó là một cách tốt cho một số Máy chủ. Nhưng nếu tôi có thêm một số tùy chọn (triển khai một số cấu hình trên mỗi máy chủ, v.v.) thì con rối của nó là cách thực sự tốt hơn. Tôi làm việc tại thời điểm trên con rối và nó rất đẹp ..
Dennis Wisnia

Tôi không đồng ý. Nhưng với mục đích của những gì người đăng đã hỏi về nó có thể là quá mức cần thiết.
aseq

1

Trong nhiều năm, tôi đã vui vẻ nâng cấp và cài đặt các gói bằng apt-dater . Nó là công cụ nhẹ và hiệu quả để quản lý gói từ xa. Nó sử dụng screen, sudossh.
Đối với quản lý gói apt-dater có thể là giải pháp dễ dàng hơn các công cụ quản lý cấu hình.
apt-dater thuận tiện cho việc quản lý gói tập trung trên các hương vị GNU / Linux khác nhau như Debian và CentOS.


1

bạn có thể sử dụng vải . Fabric là một thư viện và công cụ dòng lệnh Python (2.5-2.7) để hợp lý hóa việc sử dụng SSH để triển khai ứng dụng hoặc quản trị hệ thống.


0

sử dụng webmin ,,, và sử dụng tính năng cụm webmin của nó, trong đó bạn có thể thêm tất cả các hệ thống vào một bảng điều khiển webmin và đưa ra bất kỳ lệnh nào hoặc điều khiển tất cả chúng từ một nơi.

Hoặc là

Sử dụng cụm ssh

Hoặc là

PSS


Vâng, tôi thực sự có thể mở rất nhiều cửa sổ và có thể làm việc song song. Cluster SSH khá tuyệt nhưng tôi nghĩ nó không đủ thông minh.
Dennis Wisnia

0

Một giải pháp khác nếu tất cả các máy chủ của bạn đang chạy Debian (hoặc các dẫn xuất) là sử dụng gói cron-apt . Nhưng, như được đề xuất theo tài liệu, một chút cẩn thận phải được thực hiện.

Tôi hiện đang sử dụng cron-apt trên một tá máy chủ để thực hiện tất cả các cập nhật bảo mật tự động và không cần giám sát. Để tránh mọi nâng cấp không mong muốn, tôi chỉ sử dụng cron-apt trên các máy chủ chạy phân phối ổn định Debian và tôi đảm bảo định cấu hình các nguồn apt của mình để sử dụng tên phân phối, khò khè chứ không phải bí danh của nó (ổn định).

Cấu hình cron-apt cụ thể mà tôi sử dụng được tóm tắt trong một tệp hành động: /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"

Bất kỳ nâng cấp nào khác, được thực hiện thủ công, sử dụng màn hình hoặc bất cứ điều gì phù hợp nhất, vì nó có thể yêu cầu can thiệp thủ công trong quá trình nâng cấp.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.