תיאור הבעיה
כשמשכפלים נתונים במהלך הרחבה של מספר אזורים, יכול להיות שהסטטוס של CassandraDataReplication
יציג מצב שגיאה ושכפול הנתונים ייכשל.
הודעת השגיאה
כשמשתמשים ב-
kubectl כדי לראות את סטטוס הבנייה מחדש:
kubectl -n apigee get apigeeds \
-o jsonpath="{.items[].status.cassandraDataReplication}{'\n'}"
אחד או יותר מ-pods של Cassandra מציגים מצב שגיאה והודעה שבה מצוין שהבנייה מחדש נכשלה. לדוגמה:
{
"rebuildDetails": {
"apigee-cassandra-default-0": {
"message": "failed to rebuild from us-west1: java.lang.IllegalStateException : Unable to find sufficient sources for streaming range (-8567285182390470134,-8567154549835592965] in keyspace system_distributed",
"state": "error",
"updated": 1641581899
},
…
}
}סיבות אפשריות
| מטרה | תיאור | הוראות לפתרון בעיות שרלוונטיות ל |
|---|---|---|
| אזור המקור שגוי | צוין ערך שגוי ל-source.region בקובץ ה-YAML של שכפול הנתונים ב-Cassandra. |
Apigee Hybrid |
| בעיות בקישוריות לרשת | יכול להיות שיש בעיות בקישוריות לרשת בין תרמילי Cassandra במרכזי נתונים שונים. | Apigee Hybrid |
שלבים נפוצים לאבחון
- אחזור הסטטוס של שכפול הנתונים:
kubectl -n apigee get apigeeds \
-o jsonpath="{.items[].status.cassandraDataReplication}{'\n'}" - אם מופיעה שגיאה עם הודעה שדומה לזו שצוינה בהודעת השגיאה, סימן שאתם נתקלים בבעיה הזו.
הסיבה: אזור המקור שגוי
אם מציינים אזור מקור (datacenter) בקובץ ה-YAML של שכפול הנתונים ששונה מהמקור בפועל datacenter, שכפול הנתונים ייכשל. כדי לנתח את התרחיש הזה, מבצעים את השלבים שבקטע אבחון, וכדי לתקן אותו, מבצעים את השלבים שבקטע פתרון.
אבחון
- מציגים רשימה של כל ה-pods של Cassandra באזור המקור:
kubectl -n apigee get pods -l app=apigee-cassandra
- מקבלים את הערך בפועל של
datacenterמאחד מ-pods של Cassandra שמוחזרים בשלב 1:kubectl -n apigee exec -it apigee-cassandra-default-0 -- \ nodetool -u JMX_user -pw JMX_password status
- מקבלים את הערך שמשמש ל-
source.regionבקובץ המשאב המותאם אישית (YAML) של שכפול נתונים ב-Cassandra שיצרתם ב פריסה בכמה אזורים. אם אתם משתמשים בשם הקובץ לדוגמה שמופיע במסמכי התיעוד בנושא פריסה בכמה אזורים, שם הקובץ צריך להיותdatareplication.yaml.cat datareplication.yaml
תוצאות לדוגמה:
apiVersion: apigee.cloud.google.com/v1alpha1 kind: CassandraDataReplication metadata: name: region-expansion namespace: apigee spec: organizationRef: apigee-hybrid-example-org force: false source: region: "us-west1"
בודקים את התוצאה של הפלט
nodetool statusומוודאים אם הערךdatacenterתואם לערךsource.region:kubectl -n apigee exec -it apigee-cassandra-default-0 -- \ nodetool -u jmxuser -pw iloveapis123 status
תוצאות לדוגמה:
Datacenter: dc-1 ================ Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns (effective) Host ID Rack UN 10.104.13.2 491.84 KiB 256 100.0% 7254711c-fe0a-4b34-b50f-861109f97936 ra-1 UN 10.104.11.3 527.36 KiB 256 100.0% 5ec389f0-fd67-4de6-9f21-172d5899ff78 ra-1 UN 10.104.12.7 838.46 KiB 256 100.0% 7a88be82-1f81-4117-86e3-2cda434c0878 ra-1
- הערה: הערך
source.region(us-west1) מקובץdatareplication.yamlלא תואם לערךdatacenterבפועל (dc-1) מהפלט של סטטוסnodetool. כדי לתקן את ההגדרה, פועלים לפי השלבים שבקטע פתרון.
רזולוציה
כדי לתקן את שכפול הנתונים, צריך למחוק את משימת שכפול הנתונים וליצור אותה עם datacenterהשם הנכון. כך עושים את זה:
- מוחקים את תהליך השכפול הנוכחי של הנתונים. אם משתמשים בשם הקובץ לדוגמה שמופיע במסמכי התיעוד בנושא
פריסה בכמה אזורים, שם הקובץ צריך להיות
datareplication.yaml.kubectl delete -f datareplication.yaml
- מעדכנים את שם האזור בקובץ ה-YAML לערך
datacenterהנכון, לדוגמה:dc-1:apiVersion: apigee.cloud.google.com/v1alpha1 kind: CassandraDataReplication metadata: name: region-expansion namespace: apigee spec: organizationRef: apigee-hybrid-example-org force: false source: region: "dc-1"
- החלת שכפול הנתונים המעודכן:
kubectl apply -f datareplication.yaml
- בודקים את סטטוס הבנייה מחדש באמצעות הפקודה הבאה ומוודאים שלא מוצג יותר מצב השגיאה שדווח קודם:
kubectl -n apigee get apigeeds \ -o jsonpath="{.items[].status.cassandraDataReplication}{'\n'}" - אם הבעיה נמשכת, עוברים אל הסיבה: בעיות בקישוריות לרשת.
הסיבה: בעיות בקישוריות לרשת
שגיאה בשכפול הנתונים יכולה להיות גם תוצאה של בעיות בקישוריות בין צמתי Cassandra.
אבחון
כדי לנתח את התרחיש הזה, מבצעים את השלבים הבאים:
- מציגים רשימה של כל ה-pods של Cassandra:
# list cassandra pods kubectl -n=apigee get pods -l app=apigee-cassandra
- מריצים את הפקודות הבאות כדי לבצע Telnet ל-pod הראשון של Cassandra במרכז הנתונים השני (
dc-2) מה-pod הראשון של Cassandra במרכז הנתונים הראשון (dc-1) באמצעות יציאה7001:k debug -it apigee-cassandra-default-0 -n apigee --image=nginx -- sh curl -v telnet://DC_2_APIGEE_CASSANDRA_DEFAULT_0_POD_IP:7001
- אם telnet הצליח, מוצג פלט שדומה לזה:
* Rebuilt URL to: telnet://10.0.4.10:7001/ * Trying 10.0.4.10... * TCP_NODELAY set * Connected to 10.0.4.10 (10.0.4.10) port 7001 (#0)
- אחרת, מוצגת שגיאה דומה לזו שמופיעה בהמשך:
* Rebuilt URL to: telnet://10.0.4.10:7001/ * Trying 10.0.4.10... * TCP_NODELAY set * connect to 10.0.4.10 port 7001 failed: Connection refused * Failed to connect to 10.0.4.10 port 7001: Connection refused * Closing connection 0 curl: (7) Failed to connect to 10.0.4.10 port 7001: Connection refused
החיבור מ-Cassandra pod במרכז נתונים אחד אל Cassandra pod במרכז נתונים אחר נכשל, מה שמצביע על כך שיש הגבלה בחומת האש או בעיה בחיבור לרשת.
רזולוציה
- אם פריסת Apigee Hybrid הזו מתבצעת ב-GKE, צריך לבדוק אם הוגדרו כללי חומת אש שחוסמים את התנועה ממרכז נתונים אחד למרכז נתונים אחר, ולנתח את בעיית הקישוריות לרשת באמצעות המאמר סקירה כללית של כללי חומת אש ב-VPC.
- אם Apigee Hybrid פרוסה ב-GKE-on-prem, צריך לעבוד עם צוות הרשת הרלוונטי ולנתח את בעיית הקישוריות לרשת.
אם הבעיה נמשכת, עוברים אל איסוף מידע לצורך אבחון.
צריך לאסוף פרטי אבחון
אם הבעיה נמשכת גם אחרי שמבצעים את ההוראות שלמעלה, צריך לאסוף את נתוני האבחון הבאים ואז לפנות אל Cloud Customer Care של Google:
- מזהה הפרויקט ב-Google Cloud.
- הארגון ב-Apigee Hybrid.
- את קובצי ה-
overrides.yamlמהאזורים המקוריים ומהאזורים החדשים, תוך הסתרת מידע רגיש. - קובץ ה-YAML
CassandraDataReplication. - פלט של Cassandra
nodetool status:kubectl -n apigee exec -it apigee-cassandra-default-0 -- \ nodetool -u JMX_user -pw JMX_password status
- פלט של Cassandra
nodetool describecluster:kubectl -n apigee exec -it apigee-cassandra-default-0 -- \ nodetool -u JMX_user -pw JMX_password describecluster