मैं एक वेब अनुप्रयोग के लिए कई PostgreSQL सर्वर है। आमतौर पर हॉट स्टैंडबाई मोड (अतुल्यकालिक स्ट्रीमिंग प्रतिकृति) में एक मास्टर और कई दास।
मैं कनेक्शन पूलिंग के लिए PGBouncer का उपयोग करता हूं: लोकलहोस्ट पर डेटाबेस से कनेक्ट होने वाले प्रत्येक पीजी सर्वर (पोर्ट 6432) पर स्थापित एक उदाहरण। मैं लेनदेन पूल मोड का उपयोग करता हूं।
गुलामों पर मेरे रीड-ओनली कनेक्शनों को लोड-बैलेंस करने के लिए, मैं HAProxy (v1.5) का उपयोग इस से कम या ज्यादा करता हूं:
listen pgsql_pool 0.0.0.0:10001
mode tcp
option pgsql-check user ha
balance roundrobin
server master 10.0.0.1:6432 check backup
server slave1 10.0.0.2:6432 check
server slave2 10.0.0.3:6432 check
server slave3 10.0.0.4:6432 check
इसलिए, मेरा वेब एप्लिकेशन haproxy (पोर्ट 10001) से जुड़ता है, जो कि प्रत्येक पीजी ब्वॉय पर कॉन्फ़िगर किए गए मल्टीपल पेगॉन्सर पर लोड-बैलेंस कनेक्शन है।
यहाँ मेरी वर्तमान वास्तुकला का प्रतिनिधित्व ग्राफ है:
यह इस तरह से काफी अच्छी तरह से काम करता है, लेकिन मुझे लगता है कि कुछ इसे अलग तरीके से लागू करता है: वेब एप्लिकेशन एक एकल PGBouncer उदाहरण से कनेक्ट होता है जो HAproxy से जुड़ता है जो कई पीजी सर्वरों पर लोड-बैलेंस करता है:
सबसे अच्छा तरीका क्या है? पहला वाला (मेरा वर्तमान वाला) या दूसरा वाला? क्या दूसरे पर एक समाधान के कोई लाभ हैं?
धन्यवाद