การอัปเดตระบบสำหรับเซิร์ฟเวอร์จำนวนมาก


11

เรามีเซิร์ฟเวอร์จำนวนมากและยังต้องการอัปเดตทั้งหมด วิธีที่แท้จริงคือ sysadmins ใด ๆ ไปจากเซิร์ฟเวอร์ไปยังเซิร์ฟเวอร์และสร้าง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ตามที่แสดงด้านบน


ดูดีมาก! ฉันคิดว่าฉันสร้างหุ่นเชิด Usecase ด้วย Testmachines เพื่อลองทำสิ่งนี้ ขอบคุณมาก!
Dennis Wisnia

3
+1 สำหรับการแนะนำ Puppet! เปลี่ยนชีวิตของคุณในฐานะผู้ดูแลระบบ :)
Antoine Benkemoun

3
โปรดทราบว่า exec นี้จะทำงานในทุก Puppet run (ทุก ๆ 30 นาที) ซึ่งอาจใช้ค้อนและ / หรือมิเรอร์ของคุณค่อนข้างยากหากคุณมี "เซิร์ฟเวอร์จำนวนมาก" โดยส่วนตัวผมขอแนะนำให้ติดตั้งกำหนดการสำหรับประเภท exec ด้านบนตรวจสอบให้แน่ใจว่ามันจะทำงานในเวลากลางคืนเท่านั้น ในความคิดของฉัน Puppet มีจุดมุ่งหมายเพื่อบังคับใช้สถานะของระบบและใช้คำสั่ง upgrade_packages เหมือนกันโดยที่ไม่ต้องคอยควบคุมดูแลโดยมนุษย์ เครื่องมือ mColective ที่มาพร้อมกับ Puppet Enterprise (หรือเทียบเท่ากับโอเพ่นซอร์ส) อาจเป็นตัวเลือกที่ดีกว่า
wzzrd

7
การติดตั้งหุ่นกระบอกของเรานั้นมี exec ที่คล้ายกันซึ่งจะตรวจสอบการประทับเวลาบนไฟล์และจะทำการอัพเกรดถ้ามันใหม่กว่าเวอร์ชั่นบนไคลเอนต์ เมื่อเราต้องการอัปเกรดทุกสิ่งเราจะtouchบันทึกไฟล์นั้นบนต้นแบบหุ่นเชิด
Ladadadada

@wzzrd: จุดดี แต่สามารถทำได้ดีขึ้นโดยการตรวจสอบสภาพภายนอกบางอย่างที่ Ladadadada กล่าว
Khaled

7

หากโฮสต์ทั้งหมดของคุณเป็นเดเบียนคุณสามารถลองแพ็คเกจการอัพเกรดแบบอัตโนมัติได้

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

ที่นี่เราใช้หุ่นเชิดเพื่อจัดการเครื่องเดเบียนเสมือนจริงของเราด้วยหุ่นกระบอกเราสามารถเปิดใช้งานและจัดการการกำหนดค่าที่ไม่จำเป็นสำหรับการอัพเกรดบนเซิร์ฟเวอร์ทั้งหมด

เมื่อเร็ว ๆ นี้ทีมของเรากำลังทดสอบเครื่องมือ mcollective เพื่อเรียกใช้คำสั่งบนเซิร์ฟเวอร์ทั้งหมด แต่จำเป็นต้องใช้ทักษะ ruby ​​mcollective

[s] Guto


5

ฉันอยากจะแนะนำให้ไปหา Puppet, facter และ mCollective

mCollective เป็นกรอบที่ดีมากที่คุณสามารถเรียกใช้คำสั่งมากกว่าชุดของโฮสต์ (ในแนว) โดยใช้ facter เป็นตัวกรอง

เพิ่มไปยังที่พร็อกซี / แคชในท้องถิ่นและคุณจะถูกตั้งค่าอย่างดีสำหรับการจัดการเซิร์ฟเวอร์


ฉันเห็นด้วยหุ่นกระบอกไม่ใช่เครื่องมือที่ดีที่สุดในการจัดการการดูแลระบบเช่นการอัปเดตแพคเกจจำนวนมาก
robbyt

3

ใช้เครื่องมือที่สร้างขึ้นเพื่อรันคำสั่งเดียวบนเซิร์ฟเวอร์หลายเครื่อง และโดยที่ฉันไม่ได้หมายถึงการเปิดเทอร์มินัล kazillion กับ Terminator หรือ ClusterSSH แต่แทนที่จะมีเทอร์มินัลเดียวไปยังเซิร์ฟเวอร์การจัดการที่รันเครื่องมือที่เหมาะสมสำหรับงาน

ฉันจะแนะนำ func, Salt หรือ mCollective ในบริบทนี้ หากคุณมีหุ่นกระบอกอยู่แล้วให้ไปที่ mCollective (มันรวมเข้ากับหุ่นเชิด) หากคุณไม่มีและคุณมี Python เก่าบนเครื่องของคุณคุณอาจสนุกไปกับ func หากคุณเป็น Python ใหม่ให้ลอง Salt เครื่องมือทั้งหมดเหล่านี้เรียกใช้คำสั่งที่ระบุที่บรรทัดคำสั่งแบบอะซิงโครนัสซึ่งสนุกกว่าการวนซ้ำ ssh วนวนวนมากหรือแม้กระทั่งการทำคำสั่งความถนัดแบบเดียวกันในวินโดว์เทอร์มิเนเตอร์เพื่อเพิ่มเซิร์ฟเวอร์

แน่นอนคุณจะรัก เกลือ


2

ดังนั้นฉันเดาว่ามีหลายสิ่งหลายอย่างที่นำไปสู่ทางออกที่ดี:

  • แบนด์วิดธ์
  • ความง่ายในการบริหาร
  • การบันทึกโดยละเอียดในกรณีที่มีบางอย่างผิดพลาด

แบนด์วิดธ์ : โดยทั่วไปมีสองทางเลือกในการประหยัดแบนด์วิดท์เข้ามาในใจของฉัน:

  • การตั้งค่ามิเรอร์ Debian และกำหนดค่าไคลเอนต์ทั้งหมดของคุณเพื่อใช้มิรเรอร์นี้ดูhttp://www.debian.org/mirror/สำหรับรายละเอียดเพิ่มเติม (ฉันอยากจะแนะนำสิ่งนี้)
  • การตั้งค่าพร็อกซี (apt-cacher, apt-proxy หรือ Squid) และเพิ่มแคชเพื่อให้ลูกค้าของคุณสามารถทำกำไรจากแคชนี้

การดูแลระบบ : ฉันจะกำหนดค่าเชลล์แบบขนานเช่นPDSH , PSSH , GNU Parallelและออกคำสั่งบนไคลเอนต์ทั้งหมดหากฉันทดสอบคำสั่งก่อนหน้านี้บนเครื่องตัวอย่าง จากนั้นก็ไม่น่าเป็นไปได้มากที่มันจะล้มเหลว อีกทางหนึ่งคุณอาจพิจารณางาน cron กับลูกค้าทุกคน แต่จากนั้นอาจล้มเหลวโดยอัตโนมัติดังนั้นฉันต้องการโซลูชั่นแรก

หากคุณกังวลเกี่ยวกับการอัพเกรดพร้อมกันคุณสามารถกำหนดเวลาคำสั่งของคุณด้วย at

การบันทึก : เช่นเดียวกับเชลล์แบบขนานคุณมีความเป็นไปได้ที่จะเปลี่ยนเส้นทางเอาต์พุตฉันจะรวม stderr และ stdout แล้วเขียนมันไปยังล็อกไฟล์


แบนด์วิดท์: มีพร็อกซีแคชเฉพาะสำหรับที่เก็บ deb, ค้นหา apt-cacher หรือ apt-proxy
S19N

ยิ่งใหญ่ฉันจะรวมสิ่งนี้ในคำตอบ
คณิตศาสตร์

และซอฟต์แวร์เช่น mCollective จะช่วยให้การดำเนินการคำสั่งแบบขนานและรายงานผลลัพธ์ / ผลลัพธ์
CloudWeavers

1

wrapper ssh แบบขนานของฉัน: classhเป็นทางเลือกสำหรับเครื่องมือ ssh แบบขนานและคลัสเตอร์แบบต่างๆ

คุณอาจจะชอบมันมากกว่าหรืออาจเกลียด มีเพียงสามเหตุผลที่ฉันพูดถึงที่นี่:

  • มันง่ายมากในการติดตั้งและใช้งาน: ไฟล์. py ไฟล์เดียวที่ไม่มีการอ้างอิงภายนอกนอกเหนือจากไลบรารีมาตรฐาน Python 2.5
  • มันน่าเชื่อถืออย่างยิ่งภายในขีด จำกัด ฉันใช้มันทุกวันทำงานบ่อยครั้งเกือบ 100 ครั้งต่อวันและมักจะเป็นชุดของเป้าหมายหลายร้อยถึงไม่กี่พันต่อคำสั่ง (ฉันได้ทดสอบในรายการเป้าหมายของเซิร์ฟเวอร์มากกว่า 25,000 เซิร์ฟเวอร์ในแต่ละครั้ง) มันไม่เคยล้มเหลวในการทำงานล้มเหลวในการทำให้สมบูรณ์หรือทำให้ฉันมีพฤติกรรมที่ไม่แน่นอน (ข้อ จำกัด เฉพาะที่เกี่ยวข้องกับsubprocess.communicate()วิธีการPython --- ดังนั้นคุณจะได้รับการจับ stdout ประมาณ 64K และเช่น stderr สูงสุด 64K แยกเช่นกระบวนการระยะไกลใด ๆ ที่พยายามอ่านจาก stdin จะหยุดทำงาน จนกว่า subporcess ssh ท้องถิ่นจะถูกฆ่าโดยอัตโนมัติโดยการจัดการการหมดเวลาของclassh )
  • มันง่ายมากที่จะเขียนสคริปต์ที่กำหนดเองใน Python เพื่อใช้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 งานตลอดเวลาจนกว่าแต่ละงานจะเสร็จสิ้นดังนั้นคำสั่งง่าย ๆ กับโฮสต์สองสามร้อยคนมักจะเสร็จสิ้นภายในไม่กี่วินาทีและเชลล์สคริปต์ที่ซับซ้อนมากในสตริงคำสั่งยาวเดียว .. . พูดห้าสิบบรรทัดหรือมากกว่านั้น ... สามารถทำให้เสร็จสิ้นกว่าสองพันโฮสต์ในเวลาประมาณ 10 นาที ... ประมาณ 10K โฮสต์ต่อชั่วโมงในสภาพแวดล้อมของฉัน

ดังนั้นนี่อาจเป็นสิ่งที่คุณสามารถใช้เป็นการวัดแบบเฉพาะกิจจนกว่าคุณจะมีการกำหนดค่าหุ่นกระบอกและทดสอบอย่างดี ... และมันก็ค่อนข้างเหมาะสำหรับการทำแบบสำรวจเฉพาะกิจเล็ก ๆ ของโฮสต์ของคุณเพื่อดูว่าแบบไหนเบี่ยงเบนมาตรฐานของคุณ วิธีต่าง ๆ เล็กน้อย


บังเอิญบนเว็บเพจที่ classb ที่ bitbucket.org นอกจากนี้ยังมีรายการของ wraps 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.

ฉันใช้สคริปท์มานานหลายปีใช้วิธีฉลาด - รับวิธีต่อไปนี้

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

สิ่งต่าง ๆ เช่นหุ่นเชิดและเครื่องมืออื่น ๆ ที่คนพูดถึงอาจใช้งานได้ แต่ดูเหมือนว่ามันเกินความจริงสำหรับสิ่งที่โดยพื้นฐานแล้วเป็นการเลียนแบบคำสั่งเพียงไม่กี่คำที่มนุษย์พิมพ์ ฉันเชื่อในการใช้เครื่องมือที่ง่ายที่สุดสำหรับงานเฉพาะในกรณีนี้สคริปต์ทุบตีนั้นเรียบง่ายเท่าที่ได้รับโดยไม่สูญเสียฟังก์ชันการทำงาน


ใช่ฉันคิดว่ามันเป็นวิธีที่ดีสำหรับเซิร์ฟเวอร์บางตัว แต่ถ้าฉันควรได้รับตัวเลือกเพิ่มเติม (แนะนำการกำหนดค่าบางอย่างในแต่ละเซิร์ฟเวอร์ ฯลฯ ) ดังนั้นหุ่นกระบอกของมันจะเป็นวิธีที่ดีกว่าจริงๆ ผมทำงานในขณะนี้บนหุ่นและความสวยงามของมัน ..
เดนนิส Wisnia

ฉันไม่เห็นด้วย แต่สำหรับจุดประสงค์ของสิ่งที่โปสเตอร์ถามเกี่ยวกับมันอาจจะเกินกำลัง
aseq

1

สำหรับปีฉันได้รับการอัพเกรดอย่างมีความสุขและติดตั้งแพคเกจการใช้apt-dater มันเป็นเครื่องมือที่มีน้ำหนักเบาและมีประสิทธิภาพสำหรับการจัดการแพคเกจระยะไกล มันใช้screen, และsudo สำหรับการจัดการแพคเกจapt-daterอาจจะแก้ปัญหาได้ง่ายขึ้นกว่าเครื่องมือจัดการการกำหนดค่า apt-daterนั้นมีประโยชน์สำหรับการจัดการบรรจุภัณฑ์แบบรวมศูนย์ใน GNU / Linux ที่มีรสชาติแตกต่างกันเช่น Debian และ CentOSssh


1

คุณสามารถใช้ผ้า Fabric เป็นไลบรารี Python (2.5-2.7) และเครื่องมือบรรทัดคำสั่งสำหรับการทำให้การใช้ SSH เป็นไปอย่างราบรื่นสำหรับการปรับใช้แอปพลิเคชันหรืองานการดูแลระบบ


0

ใช้ webmin ,,, และใช้คุณสมบัติของคลัสเตอร์ webmin ซึ่งคุณสามารถเพิ่มระบบทั้งหมดไปยังคอนโซล webmin เดียวและออกคำสั่งใด ๆ หรือควบคุมทั้งหมดจากที่เดียว

หรือ

ใช้คลัสเตอร์ ssh

หรือ

PSSH


ใช่ฉันสามารถเปิดหน้าต่างได้มากและสามารถทำงานได้ในแบบคู่ขนาน กลุ่ม SSH ค่อนข้างเท่ห์ แต่ฉันคิดว่ามันไม่ฉลาดพอ
Dennis Wisnia

0

ทางออกก็ถ้าครอบครัวของคุณทั้งหมดจะถูกเรียกใช้ Debian (หรือสัญญาซื้อขายล่วงหน้า) คือการใช้แพคเกจ cron-ฉลาด แต่ตามที่แนะนำตามเอกสารต้องใช้ความระมัดระวัง

ขณะนี้ฉันใช้ cron-apt บนเซิร์ฟเวอร์หลายสิบเครื่องเพื่อดำเนินการอัปเดตความปลอดภัยทั้งหมดโดยอัตโนมัติและไม่ต้องใส่ข้อมูล เพื่อหลีกเลี่ยงการอัพเกรดที่ไม่พึงประสงค์ฉันใช้ cron-apt บนเซิร์ฟเวอร์ที่รันการกระจาย Debian ที่เสถียรและฉันแน่ใจว่าได้กำหนดค่าแหล่งที่มา apt ของฉันดังนั้นให้ใช้ชื่อการแจกจ่ายเสียงดังและไม่ใช่นามแฝง (เสถียร)

การกำหนดค่า 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.