ฉันควรรีบูตเซิร์ฟเวอร์ Linux บ่อยแค่ไหน


30

ฉันมีเซิร์ฟเวอร์ Linux จำนวนมาก (SUSE 9 & 10) ที่ใช้เพื่อเรียกใช้บริการเว็บที่ให้ข้อมูลแก่กริดการคำนวณขนาดใหญ่ เมื่อเร็ว ๆ นี้เรามีบางอย่างที่ยากที่จะอธิบายภาวะขัดข้อง (เช่นบันทึกของฮาร์ดแวร์และซอฟต์แวร์ไม่แสดงข้อผิดพลาดที่ชัดเจน) และเราเริ่มสงสัยว่าระยะเวลาใช้งานที่ยาวนาน (โดยทั่วไปคือ 200-300 วัน) เป็นปัญหาหรือไม่ เนื่องจากเซิร์ฟเวอร์เหล่านี้มีการใช้งานอย่างหนักฉันควรพิจารณารอบการรีบูตปกติหรือไม่

คำตอบ:


47

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

ป.ล. ถ้าคุณทำการรีบูทเป็นประจำคุณจะต้องแน่ใจว่าคุณปรับแต่งเช็ค fsck ของคุณ (นั่นคือจำนวนการเมาท์สูงสุดระหว่างการตรวจสอบอย่างเหมาะสมมิฉะนั้นการรีบูต 2 นาทีอย่างรวดเร็วอาจใช้เวลา 30 นาทีหากเซิร์ฟเวอร์เริ่ม fsck'ing สองสามเทราไบต์ ฉันมักจะตั้งค่าจำนวนภูเขาของฉันเป็น 0 (tune2fs -c 0) และช่วงเวลาระหว่างการตรวจสอบถึง 6 เดือนหรือมากกว่านั้นจากนั้นบังคับ fsck ด้วยตนเองทุกครั้งในขณะที่และรีเซ็ตจำนวน


1
การทดสอบ DRBCP เป็นประจำเป็นสิ่งที่จำเป็นและการตรวจสอบประเภทนี้เป็นการเริ่มต้นที่ดีในทิศทางนั้น
Scott Pack

คุณไม่จำเป็นต้องรีบูตหลังจากการปรับปรุงเคอร์เนล - ksplice.com
raspi

1
KSplice ถูกต้องด้วย KSplice คุณสามารถใช้งานซอฟต์แวร์การอัพเดทได้ (เคอร์เนลฐานข้อมูล ฯลฯ ) อย่างไรก็ตามเนื่องจาก Oracle ซื้อ KSplice ซึ่งอาจไม่ใช่วิธีแก้ปัญหาสำหรับทุกคนที่ไม่ได้ใช้สิ่ง Oracle (ที่เพิ่งซื้อ KSplice)
เคิร์ต

11

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


6

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

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

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


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

1
@JonasDralle บริการควรหยุดและรีสตาร์ทโดยอัตโนมัติเมื่อได้รับการอัพเกรด มิฉะนั้นจะเป็นข้อผิดพลาดในการใช้บริการนั้น!
Alexis Wilke

4

ไม่จำเป็นจริงๆการจัดการหน่วยความจำ linux นั้นยอดเยี่ยม แต่ถ้าคุณมีปัญหาเกี่ยวกับความยาวคุณอาจต้องใช้เมล็ดที่มีช่องโหว่ที่รู้จัก - คุณอาจต้องการดู


3
Linux อาจจัดการกับหน่วยความจำได้ แต่แอปพลิเคชันแต่ละตัวอาจไม่ทำงาน - ฮีปของพวกเขาอาจแยกส่วนได้หากรันเป็นเวลานาน แน่นอนว่าสิ่งต่าง ๆ เช่น prefork Apache (ซึ่งรีไซเคิลกระบวนการของมัน) โดยทั่วไปจะไม่ประสบกับปัญหานี้ สิ่งอื่น ๆ ที่ใช้กระบวนการยาวนานมาก (เช่น mysql) อาจ ขึ้นอยู่กับใบสมัครของคุณ
MarkR

4

ฉันคิดว่าคุณควรรีบูตหากมีการปรับปรุงเคอร์เนลล่าสุดหรือการปรับปรุง libc มีหลายสิ่งเชื่อมโยงกับ libc และไม่สามารถยกเลิกการโหลด lib จากหน่วยความจำได้อย่างสมบูรณ์และแทนที่ด้วยเวอร์ชันใหม่ยกเว้นว่าคุณทำการรีบูต

ตัวอย่างเช่นแม้แต่สิ่งพื้นฐานเช่น / bin / ls และสิ่งอื่น ๆ ใน / bin ใช้ libc หากคุณเพียงแค่เรียกใช้คอนโซลและใช้ทุบตีคุณกำลังใช้ libc

$ ldd /bin/bash
        linux-gate.so.1 =>  (0xffffe000)
        libtermcap.so.2 => /lib/libtermcap.so.2 (0xb8029000)
        libdl.so.2 => /lib/libdl.so.2 (0xb8025000)
        libc.so.6 => /lib/libc.so.6 (0xb7ed9000)
        /lib/ld-linux.so.2 (0xb804b000)

$ ldd /bin/ls
        linux-gate.so.1 =>  (0xffffe000)
        librt.so.1 => /lib/librt.so.1 (0xb7f3a000)
        libacl.so.1 => /lib/libacl.so.1 (0xb7f33000)
        libc.so.6 => /lib/libc.so.6 (0xb7de7000)
        libpthread.so.0 => /lib/libpthread.so.0 (0xb7dd0000)
        /lib/ld-linux.so.2 (0xb7f61000)
        libattr.so.1 => /lib/libattr.so.1 (0xb7dcc000)

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

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

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


3
+1 สำหรับ "รีบูตก่อน"
kubanczyk

2

สิ่งอื่นที่ต้องมองหาในขณะที่มีการหยุดทำงานที่ไม่คาดคิดนี้คือการดูว่าหน่วยความจำและตัวประมวลผลกำลังถูกใช้งานอย่างไรและจากโปรแกรมใด topควรจะสามารถกำหนดกระบวนการที่เป็นตัวการสำหรับการสูญเสียทรัพยากรและจากนั้นสามารถจัดการได้โดยตรง ความคิดอื่นจะเริ่มต้น cronjob เพื่อปิดและเริ่มกระบวนการของคุณตามกำหนดเวลา


+1 - การหยุดทำงานทั้งหมดไม่ได้เกิดจากปัญหาเคอร์เนล
pcapademic

2

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


1

เซิร์ฟเวอร์ Linux ที่ทำงานอย่างถูกต้องควรจะต้องรีบูตสำหรับการอัพเดตเคอร์เนลเท่านั้น ซอฟต์แวร์บางตัวไม่สามารถพูดแบบเดียวกันได้เสมอตัวอย่างเช่นบางครั้งฉันต้องรีสตาร์ท apache2 หรือ mailman


0

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

สิ่งนี้จะสำเร็จสองสิ่ง ก่อนอื่นมันจะพิสูจน์ว่าไซต์การกู้คืนความเสียหายของเรานั้นทำงานได้อย่างสมบูรณ์ สองมันจะให้เวลาหนึ่งสัปดาห์กับฉันในการลบ cruft สะสมที่ alpha

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


0

คุณสามารถเขียนสคริปต์เพิ่มเติมซึ่งจะตรวจสอบ (มากที่สุดเท่าที่เป็นไปได้) หากสถานะปัจจุบันของเครื่องของคุณกำลังจะเป็นสถานะของเครื่องหลังการรีบูต

สิ่งที่ฉันหมายถึงคือ ...

  • /etc/init.d/*
    • ตรวจสอบว่าบริการทั้งหมดที่กำลังทำงานอยู่ถูกตั้งค่าสถานะให้เริ่มการบู๊ต
    • ตรวจสอบว่าบริการทั้งหมดที่ไม่ได้ทำงานถูกตั้งค่าสถานะว่าจะไม่เริ่มการบู๊ต
  • /etc/fstab
    • ตรวจสอบว่าระบบไฟล์ที่เมาท์ทั้งหมด (เช่น /etc/mtab ) มีรายการที่เกี่ยวข้อง/etc/fstab
    • ตรวจสอบว่าระบบไฟล์ทั้งหมดที่ระบุให้เมานต์เมื่อบู๊ตถูกติดตั้งอยู่ใน/etc/fstabปัจจุบันด้วย

แน่นอนว่านี่ไม่ใช่การตรวจสอบที่สมบูรณ์ แต่อย่างใด แต่ช่วยลดความเสี่ยงในการเกิดปัญหาหลังการรีบูต

ยิ่งไปกว่านี้คุณควร (imo) กำหนดนโยบายสำหรับการอัปเดตแพคเกจเซิร์ฟเวอร์ตามลำดับที่เหมาะสมพูด 1 กลุ่มต่อสัปดาห์ ...

  • เซิร์ฟเวอร์ Crash & Burn
  • เซิร์ฟเวอร์เพื่อการพัฒนา, เซิร์ฟเวอร์ฝึกอบรม
  • เซิร์ฟเวอร์ทดสอบ
  • เซิร์ฟเวอร์ก่อนการผลิต
  • เซิร์ฟเวอร์การผลิต

ยังมีแผนโดยรวมเช่น "เซิร์ฟเวอร์ทั้งหมดจะต้องผ่านการอัพเกรดระบบปฏิบัติการที่สมบูรณ์ทุก ๆ 6 เดือน"


0

ขึ้นอยู่กับภารกิจที่รันบนเซิร์ฟเวอร์ สำหรับเซิร์ฟเวอร์เสมือนบางตัวเรามักใช้ reboot แทนเช่น apachectl restart และใช้เวลานานกว่า 5-10 วินาที แต่เครื่องที่โหลดหนักบางเครื่องจะถูกรีบูทหลายครั้งต่อปีโดยมีผู้ดูแลระบบทั้งหมดคอยตรวจสอบกระบวนการ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.