יצירת מכונות של Compute Engine עם ULL

בדף הזה מוסבר איך ליצור מופעים של Compute Engine עם זמן אחזור נמוך במיוחד (ULL) באמצעות סוגי מכונות U4P או U4C ממשפחת המכונות U4.

סקירה כללית של תהליך הגדרת התשתית של ULL Solution

לפני שמתחילים

לפני שיוצרים מכונות וירטואליות עם ULL, כדאי לעיין בקטעים הבאים.

יצירת רשתות VPC

אם עדיין לא עשיתם זאת, צרו רשתות VPC לכל אחד מממשקי הרשת של המכונה, כמו שמתואר במאמר סקירה כללית של ההגדרה של פתרון ULL.

יצירת מדיניות בנושא מיקומי מודעות

אפשר להחיל על מופע ULL מדיניות למיקום מרווח כדי לשפר את העמידות. מידע נוסף זמין במאמר בנושא יצירה והחלה של מדיניות בנושא מיקומי מודעות במסמכי התיעוד של Compute Engine.

הגדרת הפרויקט

מגדירים את ה-CLI של gcloud לשימוש בפרויקט. לחלופין, אפשר לכלול את הדגל --project=PROJECT_ID בכל פקודה מהפקודות הבאות.

gcloud config set project PROJECT_ID

מחליפים את PROJECT_ID במזהה הפרויקט.

הפעלת ממשקי ה-API

אם עדיין לא עשיתם זאת, מפעילים את ממשקי ה-API הבאים.

המסוף

מפעילים את Compute Engine API, אם הוא עדיין לא מופעל.

תפקידים שנדרשים להפעלת ממשקי API

כדי להפעיל ממשקי API, נדרשת ההרשאה serviceusage.services.enable. אם יצרתם את הפרויקט, סביר להניח שכבר יש לכם את ההרשאה הזו דרך התפקיד 'בעלים' (roles/owner). אחרת, תוכלו לקבל את ההרשאה הזו דרך התפקיד 'אדמין בממשק Service Usage' (roles/serviceusage.serviceUsageAdmin). איך מקצים תפקידים

להפעלת ה-API

gcloud

מפעילים את Compute Engine API, אם הוא עדיין לא מופעל:

תפקידים שנדרשים להפעלת ממשקי API

כדי להפעיל ממשקי API, נדרשת ההרשאה serviceusage.services.enable. אם יצרתם את הפרויקט, סביר להניח שכבר יש לכם את ההרשאה הזו דרך התפקיד 'בעלים' (roles/owner). אחרת, תוכלו לקבל את ההרשאה הזו דרך התפקיד 'אדמין בממשק Service Usage' (roles/serviceusage.serviceUsageAdmin). איך מקצים תפקידים

gcloud services enable compute.googleapis.com

התפקידים הנדרשים

כדי לקבל את ההרשאות שדרושות ליצירת מכונות של Compute Engine, צריך לבקש מהאדמין להקצות לכם את תפקידי ה-IAM הבאים:

  • כדי ליצור ולנהל מכונות וירטואליות: Compute Instance Admin ‏ (compute.instanceAdmin) בפרויקט

להסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.

יכול להיות שאפשר לקבל את ההרשאות הנדרשות גם באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש.

סקירה כללית על הגדרת מופע ULL

כדי ליצור מכונת VM עם ULL ולהגדיר את המכונה לשליחה או לקבלה של תנועת נתונים ב-ULL בשידור יחיד ובשידור מרובה:

שלב תיאור
יצירת מכונה של ULL יוצרים מכונה באמצעות סוג מכונה U4P או U4C ומחברים את ממשקי הרשת שלה לרשת VPC למטרות כלליות ולרשת VPC עם ULL. אם אתם מתכננים להשתמש במופע כצרכן של שידור מרובה משתתפים, צריך להגדיר את הדגל igmp-query לערך IGMP_QUERY_V2.
הגדרת ניתוב לממשקי nic0 שאינם מיועדים לתעבורת נתונים מסוג unicast של ULL כדי לוודא שחבילות יוצאות עוזבות דרך הממשק הנכון ולמנוע ניתוב אסימטרי, צריך להגדיר ניתוב מדיניות מבוסס-מקור במערכת ההפעלה של האורח.
הגדרת מכונה כצרכן של שידור מרובה כתובות עם זמן אחזור נמוך במיוחד כדי לקבל תעבורת נתונים של Multicast בממשקי רשת של ULL, צריך לבצע את הפעולות הבאות:
כדי לבצע אופטימיזציה נוספת של הביצועים, מומלץ גם לפעול לפי ההנחיות במאמרים עבודה עם Onload או עבודה עם DPDK.

בנוסף, אפשר להשתמש בפקודות לדוגמה שמופיעות בדף הזה כדי לבדוק את הקישוריות של שידור מרובה משתתפים.

יצירת מכונת ULL

בקטע הזה מוסבר איך ליצור מופע חדש לשימוש ב-ULL unicast וב-multicast.

מידע כללי על יצירת מכונות ועל אפשרויות הגדרה נוספות מופיע במאמר יצירה והפעלה של מכונה ב-Compute Engine.

gcloud

כדי ליצור מכונת ULL, משתמשים בפקודה compute instances create.

סוג ממשק הרשת הנתמך עבור מופעי ULL הוא GVNIC. צריך לכלול את השדה queue-count ולציין את הערך 32 לתמיכה ב-XDP.

עבור ממשקי הרשת שמצורפים לרשת ULL VPC, צריך לציין את no-address.

בנוסף, הפקודה הבאה כוללת את הדגל igmp-query כדי לאפשר למופע להיות צרכן של שידור מרובה משתתפים. לא צריך להשתמש בדגל הזה אם המופע הוא רק יצרן מולטיקאסט, או אם המופע שולח ומקבל רק יוניקאסט.

gcloud compute instances create INSTANCE_NAME \
    --zone=ZONE \
    --machine-type=MACHINE_TYPE \
    --image-project=IMAGE_PROJECT \
    --image-family=IMAGE_FAMILY \
    --maintenance-policy=TERMINATE \
    --network-interface=nic-type=GVNIC,queue-count=32,network=GENERAL_PURPOSE_VPC_NETWORK,subnet=GENERAL_PURPOSE_SUBNET \
    --network-interface=nic-type=GVNIC,queue-count=32,network=ULL_VPC_NETWORK,subnet=ULL_SUBNET_1,no-address,igmp-query=IGMP_QUERY_V2 \
    --network-interface=nic-type=GVNIC,queue-count=32,network=ULL_VPC_NETWORK,subnet=ULL_SUBNET_2,no-address,igmp-query=IGMP_QUERY_V2

מחליפים את הערכים הבאים:

  • ‫ZONE: האזור שבו רוצים ליצור את המכונה
  • ‫INSTANCE_NAME: שם למכונה
  • ‫MACHINE_TYPE: סוג המכונה U4P או U4C של המכונה
  • ‫IMAGE_PROJECT: פרויקט התמונה, כמו rhel-cloud. מערכות הפעלה שנתמכות בסוגי מכונות U4
  • ‫IMAGE_FAMILY: משפחת התמונות, למשל rhel-10-2-eus-oot-gve. מערכות הפעלה שנתמכות בסוגי מכונות U4

    כשמציינים משפחת תמונות, המערכת יוצרת את המופע מהגרסה העדכנית ביותר של תמונת מערכת ההפעלה במשפחת התמונות, שלא הוצאה משימוש. אפשר גם להשתמש בדגל --image ולציין גרסת תמונה.

  • ‫GENERAL_PURPOSE_VPC_NETWORK, GENERAL_PURPOSE_SUBNET: רשת ה-VPC ותת-הרשת שאליהן יצורף ממשק nic0 של המכונה

  • ‫ULL_VPC_NETWORK: רשת ה-VPC של ULL שאליה יצורפו הממשקים שאינם nic0

    • ‫ULL_SUBNET_1: תת-הרשת ברשת ה-VPC של ULL שאליה רוצים לצרף את הממשק nic1

    • ‫ULL_SUBNET_2: תת-הרשת ברשת ה-VPC של ULL שאליה רוצים לצרף את הממשק nic2

הגדרת ניתוב לממשקי nic0 שאינם מיועדים לתעבורת נתונים מסוג unicast של ULL

כברירת מחדל, מכונה משתמשת בנתיב ברירת המחדל שמשויך לממשק nic0 שלה כדי לשלוח תעבורה לכל יעד מחוץ לתת-הרשת שמחוברת אליה ישירות. מידע נוסף זמין במאמר סקירה כללית על ממשקי רשת מרובים.

כדי שממשקי nic1 ו-nic2 של המופע יוכלו לשלוח ולקבל תנועת ULL unicast, צריך להגדיר ניתוב מדיניות מבוסס-מקור במערכת ההפעלה של האורח. ההגדרה הזו מבטיחה שחבילות יוצאות יעברו דרך הממשק הנכון, ומונעת ניתוב אסימטרי שבו התנועה נכנסת לממשק אחד אבל מנסה לצאת דרך nic0.

דוגמה להגדרת ניתוב מדיניות מופיעה במאמר הגדרת ניתוב מדיניות במדריך הגדרת ניתוב לממשק רשת נוסף.

הגדרת מופע כצרכן של שידור מרובה כתובות עם השהיה נמוכה מאוד

בקטע הזה מוסבר איך להגדיר מופע ULL קיים כצרכן מולטיקאסט.

הפעלת שאילתת IGMP במכונת ULL קיימת

אם לא הפעלתם את IGMP כשנוצר המופע, תוכלו להפעיל אותו במופע הקיים שלכם כמו שמתואר בקטע הזה.

gcloud

כדי להפעיל שאילתת IGMP במכונת ULL קיימת, משתמשים בפקודה compute instances network-interfaces update.

חוזרים על הפקודה הבאה לכל ממשק רשת שרוצים לקבל בו תעבורת נתונים של Multicast.

gcloud compute instances network-interfaces update INSTANCE_NAME \
    --zone=ZONE \
    --network-interface=NETWORK_INTERFACE_NAME \
    --igmp-query=IGMP_QUERY_V2

מחליפים את הערכים הבאים:

  • ‫INSTANCE_NAME: השם של המכונה
  • ‫ZONE: האזור של המכונה
  • ‫NETWORK_INTERFACE_NAME: השם של ממשק הרשת שבו רוצים להפעיל שאילתת IGMP. ב- Google Cloud, הפורמט הוא nicNUMBER, כמו nic0, nic1 או nic2.

הגדרת IGMPv2 במערכת ההפעלה של האורח

כדי להגדיר IGMPv2 במערכת ההפעלה של האורח במופע:

  1. מתחברים למופע באמצעות SSH.

  2. מריצים את הפקודה הבאה ומזהים את שמות המכשירים של ממשקי הרשת שרוצים לקבל תנועת מולטיקאסט.

    sudo ifconfig
    
  3. לכל ממשק רשת רלוונטי, מריצים את הפקודה הבאה כדי לכפות IGMPv2.

    sudo -i
    echo "2" > /proc/sys/net/ipv4/conf/NETWORK_INTERFACE_DEVICE_NAME/force_igmp_version
    

    מחליפים את NETWORK_INTERFACE_DEVICE_NAME בשם המכשיר של ממשק הרשת, כמו eth0,‏ eth1 או eth2.

הגדרת סינון של נתיבים הפוכים (rp_filter)

במקרים מסוימים, כמו מקרים של מופעי multi-NIC, אימות מקור קפדני באמצעות סינון נתיב הפוך (rp-filter) עלול לגרום להשמטה של מנות מרובות שידור לגיטימיות. כדי למנוע את זה, אפשר להגדיר סינון הפוך של נתיבים כדי להרחיב את אימות המקור או להשבית אותו בממשקי רשת שאינם nic0 שמקבלים תנועת מולטיקאסט. לדוגמה, הפקודות הבאות מגדירות סינון של נתיב הפוך כדי להשבית את אימות המקור ב-eth1 וב-eth2 על ידי הגדרת rp_filter ל-0.

sudo sysctl -w net.ipv4.conf.all.rp_filter=0
sudo sysctl -w net.ipv4.conf.eth1.rp_filter=0
sudo sysctl -w net.ipv4.conf.eth2.rp_filter=0

מידע נוסף על rp_filter זמין במאמר IP Sysctl במסמכי התיעוד של ליבת לינוקס.

הגדלת הגודל של שטח האחסון הזמני של הדרייבר ברשת

בקטע הזה מוסבר איך להגדיל את הגודל של מאגר הנתונים הזמני של מנהל התקן הרשת במופע.

לצרכני multicast שמקבלים רמות גבוהות של תעבורה, מומלץ להגדיל את גודל שטח האחסון הזמני של טבעת מנהל ההתקן של הרשת לערך של 2048 כדי למנוע אובדן מנות. צריך לעשות את זה לכל ממשק רשת שמקבל תנועת מולטיקאסט.

בדוגמאות הבאות של פקודות, מוגדרים nic1 ו-nic2:

sudo ethtool -G eth1 rx 2048 tx 2048
sudo ethtool -G eth2 rx 2048 tx 2048

דוגמאות לפקודות לבדיקת קישוריות של שידור מרובה משתתפים ב-ULL

בקטע הזה מופיעות פקודות לדוגמה לבדיקת תעבורת multicast בלי להפעיל עומס עבודה של אפליקציה באמצעות כלי iperf. כדי לבצע את השלבים בקטע הזה, צריך להשלים את הגדרת ה-Multicast שמתוארת במאמר סקירה כללית של הגדרת פתרון ULL.

שליחת תנועת Multicast של ULL ממפיק Multicast

  1. מתחברים למופע באמצעות SSH.

  2. מתקינים את iperf אם עוד לא עשיתם זאת. ‫iperf3 לא תומך בשידור מרובה משתתפים. הפקודה הבאה משתמשת ב-iperf, שמתקין את iperf2.

    sudo yum install iperf
    
  3. כדי לשלוח תעבורת נתונים של Multicast לכתובת ה-IP של קבוצת ה-Multicast, מריצים את הפקודה הבאה:

    iperf -c MULTICAST_GROUP_ADDRESS%NIC -p 1234 -l 512 -i 1 -u -b 1000pps -t 999999 -B NIC_IP_ADDRESS
    

    מחליפים את הערכים הבאים:

    • MULTICAST_GROUP_ADDRESS: כתובת ה-IP של קבוצת ה-Multicast
    • ‫NIC שם המכשיר של ממשק הרשת, כמו eth1 או eth2
    • NIC_IP_ADDRESS כתובת ה-IP שמוקצית ל-NIC שציינתם

הצטרפות לקבוצה וקבלת תנועת multicast של ULL מצרכן multicast

  1. מתחברים למופע באמצעות SSH.

  2. מתקינים את iperf אם עוד לא עשיתם זאת.

    sudo yum install iperf
    
  3. כדי להצטרף לקבוצת מולטיקאסט ולתעד ביומן את התנועה שמתקבלת, מריצים את הפקודה הבאה:

    iperf -s -p 1234 -B MULTICAST_GROUP_ADDRESS%NIC -l 512 -u -i 1
    

    מחליפים את הערכים הבאים:

    • MULTICAST_GROUP_ADDRESS כתובת ה-IP של קבוצת ה-multicast
    • ‫NIC שם המכשיר של ממשק הרשת, כמו eth1 או eth2

    לדוגמה, הפקודה הבאה מצטרפת לקבוצה עם כתובת ה-IP‏ 224.1.0.176 כדי לקבל חבילות של עד 512 בייט, ומתעדת ביומן את התנועה שהתקבלה:

    iperf -s -p 1234 -B 224.1.0.176%eth1 -l 512 -u -i 1
    

בממשקי הרשת של ULL במופע, ethtool מוצג הסטטוס בפועל של קישור היציאה הפיזית (up/down) ומהירויות הקישור הפיזי.

כדי לבדוק את הסטטוס של הקישור הפיזי ואת המהירות של ממשק רשת ULL, מריצים את הפקודה הבאה:

sudo ethtool NIC

מחליפים את NIC בשם של ממשק הרשת שהוקצה על ידי מערכת ההפעלה של האורח, כמו ens8f0 או ens48f0.

המאמרים הבאים

  • למידע כללי על פתרון בעיות שקשורות לביצועי הרשת במופעי Bare Metal, אפשר לעיין במאמר פתרון בעיות שקשורות לביצועי הרשת במאמרי העזרה של Compute Engine. לדוגמה, אפשר להשבית את מצבי השינה של המעבד כדי להשיג ביצועים מלאים של רוחב הפס ברשת.
  • כדי להגדיר את Onload או DPDK לביצוע אופטימיזציה של הביצועים, אפשר לעיין במאמרים עבודה עם Onload ועבודה עם DPDK.
  • כדי לסנכרן את שעון המערכת של המופע עם השעון של כרטיס ה-NIC הפיזי של שרת המארח, אפשר לעיין במאמר בנושא הגדרת שעה מדויקת.