יצרתי פורום בדיקה עם שני קונטיינרים מסוג web_only, קונטיינר mail-receiver, Postgres ו-Redis ברשת Docker. שני קונטיינרי ה-web nginx היו מול HAProxy. הם עבדו היטב, אבל גיליתי שבבנייה מחדש של אחד משני קונטיינרי ה-web תמיד היה פרק זמן קצר של השבתה שבו הוחזר 503.
למרבה המזל, מצאתי פתרון עוקף, אך לא מושלם;
לפני בנייה מחדש של app1, הרץ
echo "disable server be_discourse/app1" | socat stdio /run/haproxy/admin.sock
ואז לאחר שתהליך הבנייה מחדש של app1 הסתיים, הרץ
echo "enable server be_discourse/app1" | socat stdio /run/haproxy/admin.sock
באופן הפוך, לבנייה מחדש של
app2הרץ
echo "disable server be_discourse/app2" | socat stdio /run/haproxy/admin.sock
ואז לאחר שתהליך הבנייה מחדש של app2 הסתיים, הרץ
echo "enable server be_discourse/app1" | socat stdio /run/haproxy/admin.sock
זה מבוסס על התאמה של
/etc/haproxy/haproxy.cfgבנוגע ל-be_discourse, אני לא אדביק את קובץ התצורה בבלוק קוד עדיין, אבל אם תהיה מסה קריטית שתרצה זאת, אולי אעשה זאת.
אז זה מפחית את ה-503 על ידי אמירה ל-HAProxy להפנות תנועה לפני שהוא יודע שיהיה 503 מהקונטיינר שאינו זמין.
אתה יכול לחילופין ליצור דף שגיאה, אבל לא היה לי הרבה מזל עם זה, ואני מרגיש שזה דורש מחקר נוסף. עם זאת, זה לא באמת פותר את בעיית ההשבתה.