การป้องกันการเชื่อมต่อ NFS ที่เสียหายจากการแช่แข็งระบบไคลเอ็นต์


21

เรามีการแบ่งปัน NFS 4 แบ่งปันปริมาณระหว่างเซิร์ฟเวอร์จำนวนหนึ่ง (เซิร์ฟเวอร์ NFS และลูกค้า Debian 8 ทั้งหมด) เรามีปัญหาบางอย่างเมื่อเร็ว ๆ นี้ที่เครือข่ายจะหยุดชะงักระบบไคลเอ็นต์

ตัวเลือก NFS ของเราได้น้อยที่สุดเพียงrw(และอื่น ๆ เริ่มต้นhard, fgฯลฯ )

ตอนนี้ฉันกำลังทดลองกับตัวเลือกเหล่านี้ แต่ฉันไม่ได้รับพฤติกรรมที่ฉันคาดหวัง: rw,soft,bg,retrans=6,timeo=150

(ฉันได้เพิ่มการส่งสัญญาณใหม่เพื่อชดเชยความเสี่ยงอ่อน ๆ )

ขั้นตอนที่ฉันกำลังจะทดสอบคือ:

  • เครื่องบูต
  • cd ไปยัง /mnt/mountpoint
  • ตรวจสอบการเชื่อมต่อ NFS ok
  • cd /
  • ฆ่าเครือข่าย ifdown eth0
  • cd ไปยัง /mnt/mountpoint
  • ls

ณ จุดนี้บรรทัดคำสั่งค้างและฉันไม่สามารถแทรกแซงได้ หลังจากเวลาผ่านไปข้อความ 'nfs: server [servername] ไม่ตอบสนองหมดเวลาใช้งาน' ซึ่งดูเหมือนว่าจะซ้ำอีกครั้งต่อนาที (ไม่สิ้นสุด)

สิ่งที่ฉันต้องการ / คาดว่าจะเกิดขึ้นสำหรับการดำเนินการล้มเหลวและกลับมาควบคุม

ได้โปรดมีคนบอกฉันว่าฉันจะผิดกับการตั้งค่าเหล่านี้หรือไม่

(PS: ฉันลองติดตั้ง autofs ด้วย แต่เห็นพฤติกรรมคล้ายกัน)

ขอขอบคุณ


3
ฉันจะไม่แนะนำsoftภายใต้สถานการณ์ใด ๆ จะช่วยให้ข้อมูลที่ถูกทิ้งในข้อผิดพลาด hard,intrแต่ผมขอแนะนำให้
roaima

2
@roaima - ขอบคุณ ความคิดเห็นนั้นดูเหมือนจะแพร่หลายมากบนเว็บ :) ปัญหาคือสถานการณ์ปัจจุบันที่เรามีhardอยู่นั้นไม่ดีสำหรับเรา (ระบบที่กำลังจะตายและยังคงตายจนกว่าจะรีบูต) intrไม่รองรับ NFS4 ตามมนุษย์
UpTheCreek

2
(แก้ไขดูเหมือนว่าintrจะรองรับโดย NFS4 แต่ไม่ใช่โดยเคอร์เนล> 2.6.25)
UpTheCreek

ฉันคิดว่าสิ่งที่แตกต่างจากคำตอบ 'มาตรฐาน' คือคุณกำลังเปลี่ยนไดเรกทอรีการทำงานปัจจุบันเป็นจุดเมานท์ คุณได้รับพฤติกรรมเดียวกันโดยไม่ต้องทำcdแต่แทนที่จะทำls /mnt/mountpointอย่างไร เป็นไปได้ว่าหลังจากความlsล้มเหลวเชลล์ของคุณกำลังพยายามดำเนินการระบบไฟล์ขึ้นอยู่กับ PWD (ยิ่งแย่ไปกว่านั้นถ้าคุณโง่พอที่จะใส่.ในของคุณ$PATH)
Toby Speight

คำตอบ:


4

intrควรอนุญาตให้คุณสามารถควบคุมได้อีกครั้งเมื่อคุณกด^Cแต่มักจะไม่ได้ทันที

   intr           If an NFS file operation has a major timeout and it is hard mounted, then allow signals to interupt the
                  file  operation  and cause it to return EINTR to the calling program.  The default is to not allow file
                  operations to be interrupted.

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

นี่คือคำตอบมาตรฐาน แต่ดูหน้าคนปัจจุบันที่ฉันเห็นนี้:

                  The  intr / nointr mount option is deprecated after ker-
                  nel 2.6.25.  Only SIGKILL can interrupt  a  pending  NFS
                  operation on these kernels, and if specified, this mount
                  option is ignored  to  provide  backwards  compatibility
                  with older kernels.

ดังนั้นฉันจึงไม่ปรากฏว่าเป็นปัญหา NFS3 / NFS4 แต่เป็นการตัดสินใจเกี่ยวกับวิธีการintrทำงาน ดังนั้นคุณควรจะสามารถKILLดำเนินการได้ แต่อาจไม่ให้ประโยชน์กับคุณมากนัก

ฉันไม่พบการสนทนาเกี่ยวกับสาเหตุที่ทำให้ตัวเลือกถูกลบ คุณช่วยฆ่ากระบวนการฆ่าของคุณได้ไหม?


ขอบคุณ แต่ตามคนintrได้รับการสนับสนุนโดย nfs 2/3 แต่ไม่ใช่ 4
UpTheCreek

@UpTheCreek ฉันไม่เข้าใจว่าทำไมถึงเป็นเช่นนั้น ฉันไม่มีระบบเดเบียนที่นี่ แต่มีการกล่าวถึงอย่างชัดเจนว่าพร้อมใช้งาน คุณเคยลองไหม "intr สิ่งนี้จะทำให้การดำเนินการ NFS4 (บนฮาร์ดเมาท์) ถูกขัดจังหวะขณะที่รอการตอบสนองจากเซิร์ฟเวอร์"
BowlOfRed

2
ใช่ฉันลองแล้วดูเหมือนจะไม่มีผลอะไรเลย ผู้ชายบอกว่ามันถูกละเว้นในเคอร์เนลเวอร์ชันล่าสุด
UpTheCreek

ไม่สามารถฆ่ากระบวนการได้เนื่องจากทั้งระบบค้าง ไม่มีคำสั่งใดที่สามารถออกใช้ในประสบการณ์ของฉัน (แม้ว่าอาจเป็นไปได้ที่ SSH จะเข้าเครื่องแช่แข็งในบางกรณี)
MountainX สำหรับ Monica Cellio

3

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

  1. NFS 4 ได้รับการพิจารณาว่าเป็นการปรับปรุงในเวอร์ชัน 2 และ 3 อย่างไรก็ตามฉันยังไม่เห็นกรณีการใช้ที่ดีสำหรับการปรับปรุง อาจเป็นเพราะฉันตั้งเป้าที่จะส่งออกระบบไฟล์ไปยังไคลเอนต์ Windows ด้วย Samba และไปยังไคลเอนต์ Unix / Linux ด้วย NFS
  2. ฉันจะไม่แนะนำsoftภายใต้สถานการณ์เกือบทั้งหมด จะช่วยให้ข้อมูลที่ถูกทิ้งในข้อผิดพลาด hard,intrแต่ผมขอแนะนำให้
  3. ตามที่คุณชี้ให้เห็นว่าintrไม่ถูกต้องสำหรับ NFS 4 แต่ดูเหมือนว่านี่เป็นการเปลี่ยนแปลงเคอร์เนลแทนที่จะเป็น NFS
  4. NFS Automounter ( autofs) ทำงานได้ดีสำหรับกรณีการใช้งานของฉันกับ NFS เวอร์ชัน 2 และ 3 และจัดการเพื่อช่วยปกป้องระบบไคลเอนต์ของฉันจากเซิร์ฟเวอร์ล้มเหลวโดยการติดตั้งระบบไฟล์ NFS เฉพาะเมื่อจำเป็นเท่านั้น

ข้อเสนอแนะของฉันคือคุณจะต้องพิจารณาย้ายจาก NFS 4 เป็น NFS 3 และดูว่าจะช่วยให้กรณีการใช้งานเฉพาะของคุณหรือไม่ อย่าคิดว่าเป็นการลดระดับ


1
ขอบคุณ แต่ฉันไม่สามารถเปลี่ยนเป็น NFS3 ได้และถึงแม้ว่าฉันintrจะไม่ได้รับการสนับสนุนบนเคอร์เนลเวอร์ชันล่าสุด
UpTheCreek

2
อ่าใช่ดูเหมือนintr จะได้รับการสนับสนุนใน NFS4 (มันระบุไว้ในทั้งตัวเลือกเดียว 2/3 และตัวเลือกเพียง 4 ในมนุษย์ซึ่งเป็นบิตสับสน) แต่ก็ไม่ได้รับการสนับสนุนในรุ่นเคอร์เนลเมื่อเร็ว ๆ นี้
UpTheCreek

1
"ฉันจะไม่แนะนำให้นุ่มนวลในทุกสถานการณ์" - จริงเหรอ? ในกรณีของฉันฉันมีเว็บเซิร์ฟเวอร์ที่ไม่ว่างซึ่งติดตั้งไดเรกทอรีรูปภาพ หากโฮสต์รูปภาพล่มและเราใช้งานhardเว็บไซต์ทั้งหมดก็จะล่ม ถ้าเราใช้softเราอาจจะได้ภาพที่แตกไม่กี่อัน (แม้ว่าระบบแคชของเราจะลดขนาดลงเกือบทั้งหมด) ความเสี่ยงในการsoftยอมให้ไฟล์เสียหายนั้นเป็นเรื่องใหญ่ ฉันอยากจะมีไฟล์ภาพหนึ่งไฟล์ที่มีความเสียหายมากกว่าเว็บไซต์เสียอีก!
Doug McLean

1
@DougMcLean ยังคงอยู่ในสถานการณ์ที่คล้ายกัน (เว็บฟาร์มที่วุ่นวาย, เซิร์ฟเวอร์ภาพ, NFS ... ) ฉันจะบอกว่ามันเป็นกรณีพิเศษ หากเซิร์ฟเวอร์อิมเมจของฉันไม่น่าเชื่อถือฉันสงสัยว่าฉันอาจจะตัดสินsoftว่าเป็นโซลูชันที่ยอมรับได้ คำตอบที่แก้ไขจาก "ไม่เคย" เป็น "แทบจะไม่เคย" ขอบคุณ!
roaima

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