הרבה מערכות תוכנה שתלויות ברצף מדויק של אירועים מסתמכות על שעון מערכת יציב ועקבי. במערכות האלה נעשה לרוב שימוש ביומני מערכת עם חותמות זמן כדי לוודא שהזמן מסונכרן ולנפות באגים בזמן שהם מתרחשים. כדי לשמור על סנכרון של שעוני המערכת, המופעים של Compute Engine מוגדרים מראש לשימוש ב-Network Time Protocol (NTP), פתרון משולב של חומרה ותוכנה לסנכרון זמן.
פרוטוקול NTP שימושי גם במקרים נדירים של שנייה מעוברת, שהיא התאמה של שנייה אחת שנעשית לשעון UTC כדי להתחשב בשינויים בסיבוב כדור הארץ. הוספת שניות מעוברות לא מתרחשת במרווחי זמן קבועים, כי מהירות הסיבוב של כדור הארץ משתנה באופן לא סדיר בתגובה לאירועים אקלימיים וגיאולוגיים. שניות עיבור קודמות השפיעו באופן משמעותי על מגוון שירותים ואפליקציות באינטרנט. שרתי NTP עוזרים לוודא שכל השרתים מדווחים על אותה שעה במהלך אירוע של שנייה מעוברת.
במאמר הזה מוסבר איך להגדיר שרתי NTP במכונות הווירטואליות, כולל טיפול נכון בשניות מעוברות.
סקירה כללית על שרתי NTP של Google ועל leap smearing
בדרך כלל, כדי להטמיע שניות מעוברות במערכת הפעלה של Unix, חוזרים על השנייה האחרונה של היום. הדבר עלול לגרום לבעיות בתוכנות שמצפות שחותמות הזמן רק יגדלו. כדי לפתור את הבעיה הזו, שרתי הזמן Cloud de Confiance by S3NSמפזרים את השנייה הנוספת על פני 24 שעות – 12 שעות לפני אירוע השנייה המעוברת ו-12 שעות אחריו – כדי שהמחשבים לא יראו את השנייה הנוספת בבת אחת כחותמת זמן חוזרת. כך אפשר להפחית את הסיכון במערכות שתלויות בחותמת זמן עקבית. מומלץ להגדיר את כל מופעי החישוב לשימוש בשירותי ה-NTP הפנימיים של Google.
המלצה שלא להשתמש בשירותי NTP חיצוניים
Cloud de Confiance לא יכול לחזות איך שירותי NTP חיצוניים, כמו
pool.ntp.org, מטפלים בשניות מעוברות. מומלץ מאוד לא להשתמש במקורות NTP חיצוניים עם מופעי המחשוב. אם משתמשים גם בשירות NTP של Google וגם בשירות חיצוני, יכולים להתרחש שינויים בלתי צפויים בשעון המערכת. עדיף להשתמש במקור NTP חיצוני יחיד מאשר בשילוב של כמה מקורות, אבל שירותי NTP חיצוניים, כמו pool.ntp.org, משתמשים לעיתים קרובות בשיטת stepping כדי לטפל בשניות מעוברות. כתוצאה מכך, יכול להיות שיופיעו חותמות זמן חוזרות במופעים שלכם.
הגישה הבטוחה ביותר היא להגדיר את מופעי המחשוב כך שישתמשו בשרת NTP יחיד – שרת ה-NTP הפנימי ש-Google מספקת. מידע נוסף על שרת ה-NTP הפנימי ש-Google מספקת זמין בשאלות הנפוצות על Google Public NTP.
שימוש בשיטת ההחלקה של יום מעובר במערכות חיצוניות ל- Cloud de Confiance by S3NS
התכונה leap smearing של שרתי NTP של Google היא דרך נוחה לנהל את הסיכון שקשור להפעלה מחדש של שנייה במערכות רגישות לזמן. שירותי NTP אחרים עשויים לספק פתרון עקיף מקובל לרוב מערכות התוכנה. עם זאת, חשוב לא לערבב בין שירותי NTP של Google עם תיקון של שניות עודפות לבין שירותי NTP ציבוריים עם תיקון של שניות עודפות.
כדי לסנכרן מכשירים מחוץ ל- Cloud de Confiance by S3NS עם זמן מרוח, אפשר להשתמש ב-Google Public NTP במכשירים האלה. Google Public NTP משתמש באותה שיטה של מריחת שניות מעוברות שמועברת למכונות של Compute Engine.
הגדרת NTP למופעים
כדי לוודא שהמכונות הווירטואליות שלכם מוגדרות בצורה נכונה, צריך לפעול לפי ההוראות הבאות:
Linux (chrony)
כברירת מחדל, ברוב הגרסאות של Linux נעשה שימוש ב-chrony כדי לנהל את הגדרות ה-NTP ואת סנכרון השעה. כדי לוודא ש-chrony משתמש רק בשירות NTP פנימי, בודקים את ההגדרה של chrony ומסירים שרתי NTP חיצוניים.
משתמשים ב-
sshכדי להתחבר למופע של Compute.המסוף
כדי להשתמש במסוף כדי להתחבר למופע של Compute באמצעות SSH, פועלים לפי השלבים הבאים:
נכנסים לדף VM instances במסוף Cloud de Confiance .
לוחצים על הלחצן SSH של המכונה שרוצים להגדיר.
gcloud
כדי להשתמש ב-Google Cloud CLI כדי להתחבר למופע של Compute באמצעות SSH, מריצים את הפקודה הבאה:
gcloud compute instances ssh INSTANCE_NAME
מחליפים את
INSTANCE_NAMEבשם המכונה שאליה מתחברים.במופע, מריצים את הפקודה
chronyc sourcesכדי לבדוק את המצב הנוכחי של הגדרת ה-NTP:$ chronyc sourcesהפלט אמור להיראות כך:
210 Number of sources = 2 MS Name/IP address Stratum Poll Reach LastRx Last sample =============================================================================== ^* metadata.google.internal 2 6 377 4 -14us[ -28us] +/- 257us ^- 38.229.53.9 2 6 37 4 -283us[ -297us] +/- 28ms
אם מופיע רשומה אחת שמצביעה על
metadata.googleאו עלmetadata.google.internal, לא צריך לבצע שינויים. אם אתם רואים כמה מקורות, חלקםmetadata.googleומקור ציבורי כמוpool.ntp.org, צריך לעדכן את המקורות כדי להסיר שרתים חיצוניים של NTP.בדוגמה של הפלט, יש שתי רשומות: אחת שמפנה אל
metadata.google.internalואחת שמפנה אל כתובת חיצונית. מכיוון שיש כמה מקורות, צריך לעדכן את שרתי ה-NTP כדי להסיר את כתובת38.229.53.9, כמו שמתואר בשלב הבא.צריך להגדיר את שרתי ה-NTP כך ששרתי NTP חיצוניים יוסרו.
כדי להסיר את שרת ה-NTP הנוסף מהרשימה, עורכים את הקובץ
/etc/chrony/chrony.confבאמצעות כלי לעריכת טקסט. מאתרים את כל השורות שמתחילות ב-server external_source_ip_or_nameומסירים אותן.אחרי עריכת הקובץ
/etc/chrony/chrony.conf, מפעילים מחדש את השירותchrony. הפקודה להפעלה מחדש עשויה להשתנות בהתאם להפצת Linux, כמו בדוגמאות הבאות:sudo service chrony restart
sudo systemctl restart chrony
כדי לוודא שההגדרות תקינות, מריצים שוב את הפקודה
chronyc sources:$ chronyc sourcesהפלט אמור להיראות כך:
210 Number of sources = 1 MS Name/IP address Stratum Poll Reach LastRx Last sample =============================================================================== ^* metadata.google.internal 2 7 377 98 -1343ns[-1588ns] +/- 396us
Linux (ntpd)
בגרסאות ישנות יותר של הפצות לינוקס שלא תומכות ב-chrony, נעשה שימוש ב-ntpd כדי לנהל את הגדרות ה-NTP ולסנכרן את השעה. כדי לוודא ש-ntpd משתמש רק בשירות NTP פנימי, צריך לבדוק את ההגדרה של ntpd ולהסיר שרתי NTP חיצוניים.
משתמשים ב-
sshכדי להתחבר למופע של Compute.המסוף
כדי להשתמש במסוף כדי להתחבר למופע של Compute באמצעות SSH, פועלים לפי השלבים הבאים:
נכנסים לדף VM instances במסוף Cloud de Confiance .
לוחצים על הלחצן SSH של המכונה שרוצים להגדיר.
gcloud
כדי להשתמש ב-Google Cloud CLI כדי להתחבר למופע של Compute באמצעות SSH, מריצים את הפקודה הבאה:
gcloud compute instances ssh INSTANCE_NAME
מחליפים את
INSTANCE_NAMEבשם המכונה שאליה מתחברים.במופע, מריצים את הפקודה
ntpq -pכדי לבדוק את המצב הנוכחי של הגדרת ה-NTP:$ ntpq -pהפלט אמור להיראות כך:
remote refid st t when poll reach delay offset jitter ============================================================================== *metadata.google 255.28.23.83 2 u 27 64 1 0.634 -2.537 2.285 *217.162.232.173 130.149.17.8 2 u 191 1024 176 79.245 3.589 27.454
אם מופיע רשומה אחת שמצביעה על
metadata.googleאו עלmetadata.google.internal, לא צריך לבצע שינויים. אם מופיעים כמה מקורות, חלקםmetadata.googleוחלקם מקורות ציבוריים כמוpool.ntp.org, צריך לעדכן את המקורות כדי להסיר את כל שרתי ה-NTP החיצוניים.בדוגמה של הפלט, יש שתי רשומות: אחת שמפנה אל
metadata.googleואחת שמפנה אל כתובת חיצונית. מכיוון שיש כמה מקורות, צריך לעדכן את שרתי ה-NTP כדי להסיר את הכתובת*217.162.232.173, כמו שמתואר בשלב הבא.מגדירים את שרתי ה-NTP כך שיוסרו מקורות חיצוניים.
כדי להגדיר את שרתי ה-NTP, עורכים את הקובץ
/etc/ntp.confבאמצעות עורך הטקסט המועדף. מאתרים את הקטעserversבהגדרות ומסירים את כל מקורות ה-NTP שאינם של Google, לדוגמה:vim /etc/ntp.conf# You do need to talk to an NTP server or two (or three). #server ntp.your-provider.example ... server metadata.google.internal iburstאחרי עריכת הקובץ
/etc/ntp.conf, מפעילים מחדש את שירות ה-NTP. הפקודה להפעלה מחדש עשויה להיות שונה מהדוגמה הבאה, בהתאם להפצת Linux שלכם:sudo service ntp reloadכדי לוודא שההגדרות תקינות, מריצים שוב את הפקודה
ntpq -p:ntpq -premote refid st t when poll reach delay offset jitter ============================================================================== *metadata.google 255.28.23.83 2 u 27 64 1 0.634 -2.537 2.285
Windows
נכנסים לדף VM instances במסוף Cloud de Confiance .
לוחצים על הלחצן RDP לצד מופע Windows שאליו רוצים להתחבר.
אחרי שמתחברים, לוחצים לחיצה ימנית על סמל PowerShell ובוחרים באפשרות הפעלה כמנהל מערכת.
כששורת הפקודה נטענת, מריצים את הפקודה הבאה כדי לראות את הגדרת ה-NTP הנוכחית:
w32tm /query /configuration[Configuration] ... Type: NTP (Local) NtpServer: metadata.google.internal, ...
אם מופיע רשומה אחת שמצביעה על
metadata.googleאו עלmetadata.google.internal, לא צריך לבצע שינויים. אם מופיעים כמה מקורות, חלקםmetadata.googleוחלקם מקור ציבורי, צריך להסיר את השרת החיצוני. פועלים לפי המדריך של Windows להגדרת שרת NTP.כדי להבטיח את התאימות הרחבה ביותר של תוכנות במכונות וירטואליות של Windows, Google ממליצה להשתמש במנהל ההתקן gVNIC כדי להבטיח דיוק של NTP ברמת אלפית השנייה עם
metadata.google.אם אתם חייבים להשתמש ב-VirtIO עם מכונת Windows וירטואלית, כדי לקבל דיוק של פחות מאלפית השנייה עם שרתי NTP, Google ממליצה לא להשתמש בשירות Windows Time (צריך לעצור ולבטל את הרישום של
w32tm).מפסיקים את שירות הזמן של Windows:
net stop w32timeמסירים את שירות הזמן של Windows מהרישום:
w32tm /unregisterאחרי שמפסיקים את שירות הזמן של Windows ומסירים אותו מהרישום, מתקינים את לקוח Meinberg NTP.
פועלים לפי הוראות ההגדרה שמפורטות במסמכי התיעוד של Meinberg.
מגדירים את שרת ה-NTP עבור לקוח ה-NTP של Meinberg כ-
metadata.google.internal.אחרי שמסיימים להגדיר את NTP, צריך לחכות בין חמש ל-15 דקות עד שהשעון במכונה יתייצב עם שרת ה-NTP.
מידע על הסיבות שבגללן אנחנו לא ממליצים להשתמש ב-
w32tmמופיע במאמרי העזרה בנושא בעיות מוכרות.