chrony vs. systemd-timesyncd - อะไรคือความแตกต่างและการใช้เคสเป็นไคลเอนต์ NTP?


18

อย่างใด แต่ไม่ค่อนข้างสร้างตามคำถามเก่า"ntpd กับ systemd-timesyncd - วิธีการซิงค์ NTP ที่เชื่อถือได้?" ผมอยากจะถามเกี่ยวกับความแตกต่างระหว่าง chrony และ systemd-timesyncd ในแง่ของ NTP ลูกค้า

ฉันรู้ว่า systemd-timesyncd เป็นการใช้งาน ntp ไคลเอนต์น้อยมากหรือน้อยที่สุดในขณะที่ chrony เป็นโซลูชัน NTP daemon ที่เต็มเปี่ยมที่เกิดขึ้นเพื่อรวมไคลเอ็นต์ NTP

บันทึกย่อประจำรุ่น ubuntu Bionic Beaverระบุสิ่งต่อไปนี้:

สำหรับการซิงค์เวลาแบบง่ายความต้องการระบบพื้นฐานมาพร้อมกับ systemd-timesyncd Chrony จำเป็นต้องทำหน้าที่เป็นเซิร์ฟเวอร์เวลาเท่านั้นหรือหากคุณต้องการให้การซิงค์มีความแม่นยำและมีประสิทธิภาพมากขึ้น

ฉันชอบความคิดในการใช้เครื่องมือที่ติดตั้งไว้ล่วงหน้าเพียงเล็กน้อยเพื่อทำงานและฉันค่อนข้างมั่นใจว่า systemd-timesyncd จะทำงานให้กับกรณีการใช้งานของฉัน แต่ฉันก็ยังสงสัยอยู่:

  • อะไรคือความแตกต่างของโลกแห่งความเป็นจริงระหว่างสองสิ่งนี้ในแง่ของความแม่นยำ?
  • ประสิทธิภาพต่างกันอย่างไร
  • การซิงค์เวลาแบบ "ไม่ง่าย" อะไรที่ต้องใช้ในกรณีของการใช้ chrony เป็นไคลเอนต์ NTP

คำตอบ:


13

การประกาศ systemd-timesyncd ในไฟล์ systemd NEWSทำงานได้ดีในการอธิบายความแตกต่างของเครื่องมือนี้เมื่อเปรียบเทียบกับ Chrony และเครื่องมือที่ชอบ (เน้นที่เหมือง):

ใหม่"systemd-timesyncd"ภูตได้รับการเพิ่มสำหรับการอัพเดทนาฬิกาของระบบเครือข่าย จะดำเนินลูกค้า SNTP ในทางตรงกันข้ามกับการใช้งาน NTP เช่นchronyหรือเซิร์ฟเวอร์ NTP อ้างอิงเท่านั้นนี้การดำเนินการด้านลูกค้าและไม่รำคาญกับความซับซ้อน NTP เต็มเน้นเฉพาะในการสอบถามเวลาจากเซิร์ฟเวอร์ระยะไกลและตรงกันนาฬิกาท้องถิ่นเพื่อมัน ถ้าคุณไม่ต้องการให้บริการ NTP ไปยังไคลเอนต์เครือข่ายหรือต้องการเชื่อมต่อกับนาฬิกาฮาร์ดแวร์ภายในเครื่องไคลเอนต์ NTP แบบง่ายนี้ควรมากกว่าเหมาะสมสำหรับการติดตั้งส่วนใหญ่ [ ... ]

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


พยายามตอบคำถามเฉพาะของคุณ:

อะไรคือความแตกต่างของโลกแห่งความเป็นจริงระหว่างสองสิ่งนี้ในแง่ของความแม่นยำ?

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

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

ประสิทธิภาพต่างกันอย่างไร

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

การซิงค์เวลาแบบ "ไม่ง่าย" อะไรที่ต้องใช้ในกรณีของการใช้ chrony เป็นไคลเอนต์ NTP

ที่ระบุไว้ในใบเสนอราคาข้างต้น แต่ในกรณีใด ๆ สิ่งเหล่านี้เป็นกรณีการใช้งานสำหรับ Chrony ที่ไม่ครอบคลุมโดย systemd-timesyncd:

  • ใช้เซิร์ฟเวอร์ NTP (เพื่อให้โฮสต์อื่นสามารถใช้โฮสต์นี้เป็นแหล่งที่มาสำหรับการซิงโครไนซ์);
  • รับข้อมูลการซิงโครไนซ์ NTP จากหลายแหล่ง (ซึ่งเป็นสิ่งสำคัญสำหรับโฮสต์ที่รับข้อมูลจากเซิร์ฟเวอร์สาธารณะบนอินเทอร์เน็ต); และ
  • การรับข้อมูลการซิงโครไนซ์จากนาฬิกาท้องถิ่นซึ่งโดยปกติจะเกี่ยวข้องกับฮาร์ดแวร์พิเศษเช่นอุปกรณ์ GPS ซึ่งสามารถรับข้อมูลเวลาที่แม่นยำจากดาวเทียม

กรณีใช้งานเหล่านี้ต้องการ Chrony หรือ ntpd หรือคล้ายกัน


1
ขอบคุณมากสำหรับคำตอบที่ซับซ้อนและยกนิ้วให้กับการตอบคำถามของฉันโดยเฉพาะ เพื่ออธิบายรายละเอียดเกี่ยวกับสิ่งนั้น: - - 1. ลำดับความสำคัญของเดลต้าที่ถูกต้องคืออะไร การรู้สิ่งนี้จะเพิ่มเนื้อหาบางอย่างให้กับการตัดสินใจ พวกเรากำลังพูดถึง 10 ^ -9 หรือ 10 ^ -1 วินาที? - - 2. คำตอบของคุณเกี่ยวกับประสิทธิภาพทำให้ฉันยิ่งใหญ่ขึ้น: - พูดอย่างดูหมิ่น - ค่าเฉลี่ยของตัวเลขไม่กี่ตัวเลขเพิ่มภาระซีพียูที่คุณต้องพูดถึงใน Ubuntu รีลีสโน้ตไหม?
wedi

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

1
ขอบคุณ @TooTea! ตกลง. ฉันเห็น. ดังนั้นความแม่นยำที่เพิ่มขึ้นมาจากการใช้มากกว่าหนึ่งแหล่งและเวทมนตร์ลำดับพิเศษใด ๆ ที่ทำกับแหล่งเดียวสามารถถูกละเลยได้ ความเข้าใจของฉัน: - - 1. การใช้ metadata.google.internal timeserver เดียวบนอินสแตนซ์ GCE => ไม่มีความแตกต่างที่วัดได้ในความถูกต้อง (ขอยกเว้น timesmearing et.al. ) - 2. การใช้เซิร์ฟเวอร์เวลาสามครั้งที่มีชื่อเสียงอย่างมากใน vm ที่ บริษัท โฮสติ้งที่ตัดสินบางแห่ง => คุณเห็นความแตกต่าง แต่ไม่ "มาก" (สิ่งนี้อาจจะเป็น) - - 3. การใช้ pool.ntp.org บน raspi ที่เชื่อมต่อผ่าน ISP บางตัว => คุณมีความสุขมาก
WEDI

ฉันจะบอกว่าถูกต้องทั้งสาม @wedi โดยเฉพาะอย่างยิ่ง (1) หากคุณใช้ timeserver ใน "เครือข่ายท้องถิ่น" เดียวกันกับเครื่องของคุณและเป็นหลักในดาต้าเซ็นเตอร์เดียวกัน (rtt ต่ำมากและกระวนกระวายใจต่ำมาก) ประโยชน์ของ NTP และ timesmearing vs SNTP เกี่ยวกับความแม่นยำ จะต่ำมาก ดังนั้นมีเหตุผลเล็กน้อยที่จะรัน NTP (ไม่ใช่ SNTP) ในกรณีการใช้งานเหล่านั้น!
filbranden

@wedi อัปเดตคำตอบเพื่อกล่าวถึงอย่างชัดเจนโดยใช้เซิร์ฟเวอร์ที่เชื่อถือได้ในเครือข่ายท้องถิ่น
filbranden

14

เมื่อคำตอบอื่น ๆ ระบุอย่างถูกต้องให้chronyใช้ NTP และsystemd-timesyncdSNTP

จากมุมมองของไคลเอ็นต์บริการเวลา:

SNTP เป็นโปรโตคอลที่ใช้ง่ายกว่ามาก
NTP อนุญาตให้มีการเพิ่ม / แก้ไขทีละขั้นตอนตามเวลา ข้อดีอย่างหนึ่งที่สำคัญของ NTP ก็คือมันต้องคำนึงถึง RTT ของคำตอบเพื่อให้ได้เวลาที่แน่นอนยิ่งขึ้น

จากhttps://www.meinbergglobal.com/english/faq/faq_37.htm

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

SNTP ใช้วิธีที่ง่ายกว่ามาก ความซับซ้อนหลายอย่างของอัลกอริทึม NTP จะถูกลบออก มากกว่าที่จะบิดเบือนเวลาลูกค้า SNTP จำนวนมากเวลาขั้นตอน นี่เป็นสิ่งที่ดีสำหรับหลาย ๆ แอปพลิเคชั่นที่ต้องการการประทับเวลาอย่างง่าย นอกจากนี้ SNTP ยังขาดความสามารถในการตรวจสอบและกรองเซิร์ฟเวอร์ NTP หลายตัว บ่อยครั้งที่ใช้วิธีการปัดเศษแบบง่าย ๆ ซึ่งหากเซิร์ฟเวอร์หนึ่งล้มเหลวจะใช้วิธีถัดไปในรายการ

จากhttps://www.masterclock.com/company/masterclock-inc-blog/ntp-vs-sntp

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

จุดอ่อนสำคัญอย่างหนึ่งของ SNTP คือคุณไม่สามารถทำให้แม่นยำมากขึ้นได้โดยการดึงเวลาจากแหล่งต่าง ๆ เช่น Network Time Protocol ทำตามค่าเริ่มต้น

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

PS ไม่ควรจะเป็นทางเลือกที่ให้คำแนะนำเมื่อไม่ได้ใช้systemd-timesyncdsystemd


1
มันไม่ชัดเจนเลย ในทางทฤษฎีหนึ่งสามารถเรียกใช้systemd-timesyncdโปรแกรมภายใต้ผู้จัดการบริการอื่น ฉันได้ให้บริการบันเดิลสำหรับใช้งานภายใต้ชุดเครื่องมือ nosh service-managerตั้งแต่ปี 2561 สิ่งที่คุณพลาดคือผู้คน systemd (ต่อ Debian bug # 812522) สนับสนุนบริการแขก VirtualBox และผู้อื่นให้ขัดแย้งกับsystemd-timesyncdบริการอย่างชัดเจนเพื่อป้องกันการใช้งาน ในเครื่องเสมือน
JdeBP

@JdeBP หมายเหตุที่น่าสนใจฉันใช้ Debian โดยไม่ต้องsystemd.... อย่างไรก็ตาม vmtools timesync สามารถและจะถูกปิดการใช้งานและควรปิดการใช้งานในเซิร์ฟเวอร์ที่ใช้บริการ NTP (เช่นเซิร์ฟเวอร์ NTP VM) และ sysadmins บางตัวจะทำการซิงโครไนซ์โดย vmtools คนอื่นทำตามเอกสาร VmWare ของการปิดใช้งาน vmtools timesync (ซึ่งควรใช้เมื่อคุณรู้ว่าคุณกำลังทำอะไรอยู่) ข้อผิดพลาดนั้นไม่ได้เป็นเชิงเส้นที่จะแก้ไขและมันจะเป็นจุดพิเศษของการกำหนดค่าที่พลาดโดยคนที่ทำตามคำแนะนำ VmWare ที่ไม่ได้ใช้ vmtools timesync
Rui F Ribeiro

(แก้ไขคำตอบของฉันจากคำพูดของคุณมีข้อผิดพลาดหนึ่งข้อเกี่ยวกับการจัดการ vmtools vs (S) NTP และทำให้ชัดเจนยิ่งขึ้น)
Rui F Ribeiro

1
@wedi ในกรณีของ VmWare timesync ด้วยไฮเปอร์ไวเซอร์สามารถปิดได้ทั้งที่ Vcenter, การกำหนดค่าภาพ VM หรือทางด้าน Linux ดูunix.stackexchange.com/questions/492487/ที่เกี่ยวข้องฉันทำvmware-toolbox-cmd timesync disableในเซิร์ฟเวอร์ NTP ของฉันเสมอไม่ว่าพวก VmWare จะปิดใช้งานไทม์ซิงค์สำหรับ VM เหล่านั้นหรือไม่ (ฉันมักจะชอบใช้ chrony เป็นไคลเอนต์ NTP)
Rui F Ribeiro

1
ฉันดีใจที่คุณชี้ให้เห็นถึงการแข่งขันซิงค์เวลาที่เป็นไปได้! ดีที่จะเก็บไว้ในใจ!
wedi

0

chronyไม่ใช่รูปแบบส้อมntpdแต่นำมาใช้ตั้งแต่เริ่มต้น ใช้ทั้งโหมดไคลเอนต์และเซิร์ฟเวอร์ของโปรโตคอล NTPv4 เต็มรูปแบบ ( RFC5905 ) เกี่ยวกับผู้ใช้เกรดขององค์กรเราจะเห็นการเปลี่ยนแนวโน้มจากเดิมntpdไปchronyเช่น Red Hat (RHEL 7 เป็นต้นไป) และ SuSE (จาก SLES 15)

systemd-timesyncdใช้โหมดไคลเอนต์โปรโตคอล SNTP ( RFC4330 ) เท่านั้น ดังนั้นกรณีการใช้งานที่ซับซ้อนจะไม่ครอบคลุมโดย ตัวอย่างเช่น SNTP ไม่สามารถทำให้ถูกต้องมากขึ้นโดยการดึงเวลาจากหลายแหล่งเช่น NTP โดยค่าเริ่มต้น เป็นผลให้ไม่สามารถให้เวลาที่มีความแม่นยำสูงถึงsystemd-timesyncdsystemd-timesyncdchrony


1
mmmh ฉันไม่ได้สังเกตเห็นว่าใครก็ตามที่อ้างว่าโครนีเป็นทางแยกและฉันพูดถึงคำถามของฉันว่า chrony ใช้เซิร์ฟเวอร์และไคลเอนต์ในขณะที่ systemd-timesyncd เป็นลูกค้าเท่านั้น ขอบคุณที่กล่าวถึง RFC ที่เกี่ยวข้อง
WEDI
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.