कहां से शुरू करें?
शुरू करने के लिए मुझे सबसे अच्छी जगह और कोई नहीं बल्कि आधिकारिक दस्तावेज ही मिले। मल्टीमीडिया पसंद करने वालों के लिए एक GCP Youtube चैनल भी है। एक बार जब मैं खुद को क्लाउड एसक्यूएल दस्तावेज़ीकरण भूमि में पा गया, तो मैंने कॉन्सेप्ट की ओर रुख किया, जहाँ हमसे उत्पाद की "गहरी समझ विकसित करने" का वादा किया जाता है।
तो चलिए शुरू करते हैं!
PostgreSQL Google क्लाउड सुविधाएं
पोस्टग्रेएसक्यूएल के लिए Google क्लाउड एसक्यूएल वे सभी मानक सुविधाएं प्रदान करता है जिनकी हम एक प्रबंधित समाधान से अपेक्षा करते हैं:स्वचालित विफलता के साथ उच्च उपलब्धता, स्वचालित बैकअप, आराम और पारगमन में एन्क्रिप्शन, उन्नत लॉगिंग और निगरानी, और बेशक सभी सेवाओं के साथ बातचीत करने के लिए एक समृद्ध एपीआई।
और कुछ इतिहास के लिए, PostgreSQL समर्थन मार्च 2017 में शुरू हुआ, तब तक केवल समर्थित डेटाबेस इंजन MySQL था।
क्लाउड SQL Google के सेकेंड जेनरेशन कंप्यूटिंग प्लेटफॉर्म पर PostgreSQL चलाता है। सुविधाओं की पूरी सूची यहां और यहां भी उपलब्ध है। पूर्व की समीक्षा करने पर यह स्पष्ट है कि PostgreSQL के लिए कभी भी पहली पीढ़ी का मंच नहीं था।
दूसरी पीढ़ी के प्लेटफॉर्म पर चलने वाले डेटाबेस के 7x तेज गति से चलने और 20x अधिक भंडारण क्षमता के लाभ की उम्मीद है। दूसरी पीढ़ी के प्लेटफ़ॉर्म की घोषणा करने वाला ब्लॉग Google क्लाउड SQL की तुलना RDS और Aurora दोनों अवतारों में तत्कालीन मुख्य प्रतियोगी AWS से करने के लिए sysbench परीक्षण चलाने के विवरण में जाता है। परिणामों ने मुझे आश्चर्यचकित कर दिया क्योंकि वे क्लाउड एसक्यूएल को बेहतर प्रदर्शन करते हुए दिखाते हैं जबकि लगभग एक साल बाद जारी किए गए एडब्ल्यूएस बेंचमार्क का उपयोग करके किए गए हालिया परीक्षणों ने इसके विपरीत निष्कर्ष निकाला। यह लगभग उसी समय था जब PostgreSQL समर्थन उपलब्ध था। जबकि मुझे बेंचमार्क चलाने के विचार में खुजली हो रही है, मैं अनुमान लगा रहा हूं कि दो संभावित कारक हैं जो परिणामों को प्रभावित कर सकते थे:Google के sysbench बेंचमार्क ने विभिन्न मापदंडों का उपयोग किया और उस दौरान AWS ने अपने उत्पादों में सुधार किया होगा।पी>
GCP PostgreSQL संगतता
जैसा कि अपेक्षित था PostgreSQL के लिए Google क्लाउड SQL समुदाय संस्करण के लिए लगभग एक ड्रॉप-इन प्रतिस्थापन है और सभी PL/pgSQL SQL प्रक्रियात्मक भाषाओं का समर्थन करता है।
सुरक्षा कारणों से कुछ सुविधाएं उपलब्ध नहीं हैं, उदाहरण के लिए SUPERUSER एक्सेस। उत्पाद स्थिरता और प्रदर्शन के लिए संभावित जोखिमों के कारण अन्य सुविधाओं को हटा दिया गया था। अंत में, कुछ विकल्पों और मापदंडों को बदला नहीं जा सकता है, हालांकि उस व्यवहार को बदलने का अनुरोध क्लाउड SQL चर्चा समूह के माध्यम से किया जा सकता है।
क्लाउड SQL भी PostgreSQL प्रोटोकॉल के साथ संगत है।
जब लेन-देन अलगाव की बात आती है तो Cloud SQL PostgreSQL डिफ़ॉल्ट व्यवहार का अनुसरण करता है, जो रीड कमिटेड आइसोलेशन स्तर पर डिफ़ॉल्ट होता है।
कुछ सर्वर कॉन्फ़िगरेशन पैरामीटर के लिए, Cloud SQL दस्तावेज़ों में अस्पष्टीकृत कारणों के लिए विभिन्न श्रेणियों को लागू करता है, फिर भी याद रखने वाली एक महत्वपूर्ण बात है।
नेटवर्किंग
डेटाबेस से कनेक्ट करने के कई तरीके हैं, यह इस पर निर्भर करता है कि इंस्टेंस निजी नेटवर्क पर है या सार्वजनिक नेटवर्क (जीसीपी के बाहर से कनेक्ट होने वाले एप्लिकेशन)। दोनों मामलों में सामान्य है Google द्वारा प्रबंधित पूर्वनिर्धारित VPC जहां सभी Cloud SQL डेटाबेस इंस्टेंस रहते हैं।
निजी आईपी
निजी आईपी पते से कनेक्ट होने वाले क्लाइंट क्लाइंट को होस्ट करने वाले वीपीसी और क्रमशः डेटाबेस इंस्टेंस के बीच एक पीयरिंग कनेक्शन के माध्यम से रूट किए जाते हैं। हालांकि PostgreSQL के लिए विशिष्ट नहीं है, लेकिन कनेक्शन समस्याओं से बचने के लिए नेटवर्क आवश्यकताओं की समीक्षा करना महत्वपूर्ण है। एक गोचा:एक बार सक्षम हो जाने पर, निजी आईपी क्षमता को हटाया नहीं जा सकता।
बाहरी ऐप्लिकेशन से कनेक्ट करना
GCP के बाहर होस्ट किए गए एप्लिकेशन से कनेक्शन एन्क्रिप्ट किए जा सकते हैं, और होने चाहिए। इसके अतिरिक्त, विभिन्न हमलों से बचने के लिए, क्लाइंट कनेक्शन और एप्लिकेशन को प्रदान किए गए क्लाइंट प्रमाणपत्र को स्थापित करना होगा। प्रमाणपत्रों को बनाने और कॉन्फ़िगर करने की प्रक्रिया कुछ जटिल है, यह सुनिश्चित करने के लिए कस्टम टूल की आवश्यकता होती है कि प्रमाणपत्रों का समय-समय पर नवीनीकरण किया जाता है। यह एक कारण हो सकता है कि Google क्लाउड SQL प्रॉक्सी का उपयोग करने का विकल्प क्यों प्रदान करता है।
क्लाउड SQL प्रॉक्सी का उपयोग करके कनेक्ट करना
सेटअप काफी सीधा है, जो वास्तव में, मैंने Google क्लाउड SQL दस्तावेज़ में सभी निर्देशों के मामले में पाया है। संबंधित नोट पर, दस्तावेज़ीकरण फ़ीडबैक सबमिट करना बहुत आसान है, और स्क्रीनशॉट सुविधा मेरे लिए पहली थी।
प्रॉक्सी कनेक्शन को अधिकृत करने के कई तरीके हैं और मैंने एक सेवा खाते को कॉन्फ़िगर करना चुना, जैसा कि क्लाउड SQL प्रॉक्सी दस्तावेज़ में उल्लिखित है।
एक बार सब कुछ ठीक हो जाने के बाद प्रॉक्सी शुरू करने का समय आ गया है:
~/usr/local/google $ ./cloud_sql_proxy -instances=omiday:us-west1:s9s201907141919=tcp:5432 -credential_file=omiday-427c34fce588.json
2019/07/14 21:22:43 failed to setup file descriptor limits: failed to set rlimit {&{8500 4096}} for max file descriptors: invalid argument
2019/07/14 21:22:43 using credential file for authentication; [email protected]
2019/07/14 21:22:43 Listening on 127.0.0.1:5432 for omiday:us-west1:s9s201907141919
2019/07/14 21:22:43 Ready for new connections
रिमोट इंस्टेंस से कनेक्ट करने के लिए अब हम प्रॉक्सी का उपयोग स्थानीय आईपी एड्रेस के बजाय लोकलहोस्ट निर्दिष्ट करके कर रहे हैं:
~ $ psql "user=postgres dbname=postgres password=postgres hostaddr=127.0.0.1"
Pager usage is off.
psql (11.4, server 9.6.11)
Type "help" for help.
ध्यान दें कि कोई एन्क्रिप्शन नहीं है क्योंकि हम स्थानीय रूप से कनेक्ट हो रहे हैं और प्रॉक्सी क्लाउड में आने वाले ट्रैफ़िक को एन्क्रिप्ट करने का ध्यान रखता है।
एक सामान्य डीबीए कार्य pg_stat_activity को क्वेरी करके डेटाबेस से कनेक्शन देखना है। प्रलेखन में कहा गया है कि प्रॉक्सी कनेक्शन को क्लाउडस्क्लप्रोक्सी ~ 1.2.3.4 के रूप में प्रदर्शित किया जाएगा, इसलिए मैं उस दावे को सत्यापित करना चाहता था। मैंने पोस्टग्रेज के रूप में दो सत्र खोले हैं, एक प्रॉक्सी के माध्यम से और दूसरा मेरे घर के पते से, इसलिए निम्नलिखित प्रश्न करेंगे:
[email protected]:5432 postgres> select * from pg_stat_activity where usename = 'postgres';
-[ RECORD 1 ]----+-----------------------------------------------------------
datid | 12996
datname | postgres
pid | 924
usesysid | 16389
usename | postgres
application_name | psql
client_addr |
client_hostname |
client_port | -1
backend_start | 2019-07-15 04:25:37.614205+00
xact_start | 2019-07-15 04:28:43.477681+00
query_start | 2019-07-15 04:28:43.477681+00
state_change | 2019-07-15 04:28:43.477684+00
wait_event_type |
wait_event |
state | active
backend_xid |
backend_xmin | 8229
query | select * from pg_stat_activity where usename = 'postgres';
-[ RECORD 2 ]----+-----------------------------------------------------------
datid | 12996
datname | postgres
pid | 946
usesysid | 16389
usename | postgres
application_name | psql
client_addr | <MY_HOME_IP_ADDRESS>
client_hostname |
client_port | 60796
backend_start | 2019-07-15 04:27:50.378282+00
xact_start |
query_start |
state_change | 2019-07-15 04:27:50.45613+00
wait_event_type |
wait_event |
state | idle
backend_xid |
backend_xmin |
query |
ऐसा प्रतीत होता है कि इसके बजाय प्रॉक्सी कनेक्शन को client_port ==-1 और एक खाली client_addr के रूप में पहचाना जाता है। बैकएंड_स्टार्ट और प्रॉक्सी लॉग के लिए टाइमस्टैम्प की तुलना करके इसकी अतिरिक्त पुष्टि की जा सकती है:
2019/07/14 21:25:37 New connection for "omiday:us-west1:s9s201907141919"
Google क्लाउड पर पोस्टग्रेएसक्यूएल उच्च उपलब्धता
PostgreSQL के लिए Google Cloud SQL क्षेत्रीय स्थायी डिस्क के माध्यम से निम्न स्तर के संग्रहण डेटा सिंक्रनाइज़ेशन का उपयोग करके उच्च उपलब्धता सुनिश्चित करता है। फ़ेलओवर स्वचालित होता है, एक सेकंड के दिल की धड़कन की जाँच के अंतराल के साथ, और लगभग 60 सेकंड के बाद एक फ़ेलओवर ट्रिगर हो जाता है।
प्रदर्शन और निगरानी
दस्तावेज़ीकरण का प्रदर्शन अनुभाग अंगूठे के सामान्य क्लाउड नियमों को इंगित करता है:डेटाबेस (लेखक और पढ़ने की प्रतिकृति दोनों) को एप्लिकेशन के पास रखें, और उदाहरण को लंबवत रूप से मापें। प्रदर्शन महत्वपूर्ण होने पर कम से कम 60 जीबी रैम के साथ एक इंस्टेंस का प्रावधान करने की सिफारिश क्या है।
Stackdriver निगरानी और लॉगिंग प्रदान करता है, साथ ही PostgreSQL लॉग तक पहुंच प्रदान करता है:
पहुंच नियंत्रण
इसे प्रोजेक्ट, इंस्टेंस और डेटाबेस स्तर पर लागू किया जाता है।
प्रोजेक्ट एक्सेस कंट्रोल
प्रोजेक्ट एक्सेस कंट्रोल क्लाउड विशिष्ट एक्सेस कंट्रोल है - यह प्रोजेक्ट सदस्यों (उपयोगकर्ताओं, समूहों या सेवा खातों) को विभिन्न क्लाउड SQL संसाधनों तक पहुंच की अनुमति देने के लिए IAM भूमिकाओं की अवधारणा का उपयोग करता है। भूमिकाओं की सूची कुछ हद तक आत्म-व्याख्यात्मक है, प्रत्येक भूमिका और संबंधित अनुमतियों के विस्तृत विवरण के लिए समर्थित प्रोग्रामिंग भाषाओं में से एक के लिए एपीआई एक्सप्लोरर, या क्लाउड एसक्यूएल एडमिन एपीआई देखें।
यह प्रदर्शित करने के लिए कि IAM भूमिकाएँ कैसे काम करती हैं, आइए एक केवल-पढ़ने के लिए (दर्शक) सेवा खाता बनाएँ:
पोर्ट से जुड़े सेवा खाते का उपयोग करके पोर्ट 5433 पर एक नया प्रॉक्सी इंस्टेंस प्रारंभ करें दर्शक भूमिका:
~/usr/local/google $ ./cloud_sql_proxy -instances=omiday:us-west1:s9s201907141919=tcp:5433 -credential_file=omiday-4508243deca9.json
2019/07/14 21:49:56 failed to setup file descriptor limits: failed to set rlimit {&{8500 4096}} for max file descriptors: invalid argument
2019/07/14 21:49:56 using credential file for authentication; [email protected]
2019/07/14 21:49:56 Listening on 127.0.0.1:5433 for omiday:us-west1:s9s201907141919
2019/07/14 21:49:56 Ready for new connections
एक psql कनेक्शन को 127.0.0.1:5433 पर खोलें:
~ $ psql "user=postgres dbname=postgres password=postgres hostaddr=127.0.0.1 port=5433"
कमांड इसके साथ बाहर निकलता है:
psql: server closed the connection unexpectedly
This probably means the server terminated abnormally
before or while processing the request.
उफ़! आइए प्रॉक्सी लॉग की जांच करें:
2019/07/14 21:50:33 New connection for "omiday:us-west1:s9s201907141919"
2019/07/14 21:50:33 couldn't connect to "omiday:us-west1:s9s201907141919": ensure that the account has access to "omiday:us-west1:s9s201907141919" (and make sure there's no typo in that name). Error during createEphemeral for omiday:us-west1:s9s201907141919: googleapi: Error 403: The client is not authorized to make this request., notAuthorized
इंस्टेंस एक्सेस कंट्रोल
इंस्टेंस-लेवल एक्सेस कनेक्शन स्रोत पर निर्भर है:
प्राधिकरण विधियों का संयोजन सर्वव्यापी pg_hba.conf को बदल देता है।
बैकअप और पुनर्प्राप्ति
डिफ़ॉल्ट रूप से स्वचालित बैकअप सक्षम होते हैं:
जबकि बैकअप डेटाबेस के पढ़ने और लिखने के संचालन को प्रभावित नहीं करते हैं, वे प्रदर्शन को प्रभावित करते हैं और इसलिए यह अनुशंसा की जाती है कि कम गतिविधि की अवधि के दौरान बैकअप शेड्यूल किया जाए।
अनावश्यकता के लिए, कस्टम स्थानों को चुनने के विकल्प के साथ बैकअप को दो क्षेत्रों (अतिरिक्त शुल्क लागू) में संग्रहीत किया जा सकता है।
भंडारण स्थान बचाने के लिए, संपीड़न का उपयोग करें। .gz संपीड़ित फ़ाइलें पारदर्शी रूप से पुनर्स्थापित की जाती हैं।
क्लाउड एसक्यूएल इंस्टेंस क्लोनिंग का भी समर्थन करता है। सबसे छोटे डेटासेट के लिए ऑपरेशन में लगभग 3 मिनट का समय लगा:
क्लोनिंग शुरू होने का समय 10:07:10:
पोस्टग्रेएसक्यूएल लॉग दिखाते हैं कि पोस्टग्रेएसक्यूएल क्लोन किए गए उदाहरण पर 10 बजे उपलब्ध हो गया:10:47:
प्रतिलिपि बनाने के लिए बैकअप और पुनर्स्थापना की तुलना में यह अभी भी एक आसान तरीका है परीक्षण, विकास या समस्या निवारण उद्देश्यों के लिए एक उदाहरण।
Google क्लाउड PostgreSQL के लिए सर्वोत्तम अभ्यास
- ऐसे उदाहरणों के लिए सक्रियण नीति कॉन्फ़िगर करें जिन्हें 24/7 चलाना आवश्यक नहीं है।
- डेटाबेस इंस्टेंस को नेटवर्क विलंबता से बचने के लिए कंप्यूट इंजन इंस्टेंस और ऐप इंजन एप्लिकेशन के साथ उसी क्षेत्र, या क्षेत्र में रखें।
- कम्प्यूट इंजन के समान क्षेत्र में डेटाबेस इंस्टेंस बनाएं। यदि किसी अन्य कनेक्शन प्रकार का उपयोग कर रहे हैं तो डिफ़ॉल्ट क्षेत्र को स्वीकार करें।
- क्लाउड SQL का उपयोग करके बनाए गए उपयोगकर्ता डिफ़ॉल्ट रूप से क्लाउड सुपरयूज़र होते हैं। उनकी अनुमतियों को संशोधित करने के लिए PostgreSQL ALTER ROLE का उपयोग करें।
- नवीनतम क्लाउड SQL प्रॉक्सी संस्करण का उपयोग करें।
- इंस्टेंस नामों में टाइमस्टैम्प शामिल होना चाहिए ताकि इंस्टेंस को हटाते और फिर से बनाते समय नाम का पुन:उपयोग किया जा सके।
- pg_dump बड़ी वस्तुओं को शामिल करने के लिए डिफ़ॉल्ट है। यदि डेटाबेस में BLOB-s हैं, तो कम गतिविधि की अवधि के दौरान इंस्टेंस को अनुत्तरदायी बनने से रोकने के लिए डंप करें।
- क्लाइंट के आईपी पते को श्वेतसूची में डाले बिना किसी बाहरी क्लाइंट से तुरंत कनेक्ट करने के लिए gcloud sql कनेक्ट का उपयोग करें।
- उत्पाद अपडेट और चेतावनियों पर सूचनाएं प्राप्त करने के लिए समूह की घोषणा करने के लिए सदस्यता लें, जैसे कि उदाहरण बनाते समय समस्याएं:
- सुनिश्चित करें कि एप्लिकेशन डेटाबेस कनेक्शन प्रबंधन तकनीकों को लागू करते हैं।
- 90 दिनों से अधिक समय तक रुके हुए उदाहरण तब तक हटा दिए जाएंगे जब तक कि वे निलंबित अवस्था में न हों।
- एप्लिकेशन व्यवहार और डाउनटाइम लंबाई का परीक्षण करने के लिए मैन्युअल विफलता निष्पादित करें।
- डिफ़ॉल्ट इंजन संस्करण का उपयोग करें।
- स्टोरेज को स्वचालित रूप से बढ़ाने के लिए कॉन्फ़िगर किए गए इंस्टेंस के लिए स्टोरेज स्पेस, 25 जीबी की वृद्धि में बढ़ेगा। चूंकि भंडारण स्थान को पुनः प्राप्त नहीं किया जा सकता है, अगले बजट चक्र में डेटाबेस के अनुमानित आकार में वृद्धि की सीमा निर्धारित करें, और भगोड़ा प्रश्नों की निगरानी करें,
- परीक्षण उदाहरणों के लिए "पहले" रखरखाव समय का उपयोग करें:
- एप्लिकेशन को लाइव कनेक्शन और एक्सपोनेंशियल बैकऑफ़ का उपयोग करना चाहिए ताकि एक इंस्टेंस पुनरारंभ होने के बाद जल्दी से ठीक हो सके।
- पठन प्रतिकृतियों पर निर्भर एप्लिकेशन को 3 प्रतिकृतियों का उपयोग करने पर विचार करना चाहिए ताकि क्षेत्रीय स्थायी डिस्क के विफल होने से होने वाली समस्याओं से बचने के लिए दोनों प्रतिकृतियां अनुपलब्ध हो जाएं।
- पढ़ने के प्रदर्शन को बेहतर बनाने के लिए पठन प्रतिकृतियां कॉन्फ़िगर करें।
- मौजूदा कनेक्शन को डिस्कनेक्ट करने के लिए सार्वजनिक इंस्टेंस तक पहुंचने की अनुमति वाले आईपी पते की सूची को अपडेट करते समय इंस्टेंस पुनरारंभ आवश्यक है।
- अतिरिक्त जानकारी के लिए StackOverflow Cloud SQL समर्पित समूह की समीक्षा करें।
क्लाउड SQL के लिए चेकलिस्ट लॉन्च करें
दस्तावेज़ीकरण में चेकलिस्ट अनुभाग पोस्टग्रेएसक्यूएल इंस्टेंस के लिए उत्पादन के लिए तैयार क्लाउड एसक्यूएल सेट करते समय अनुशंसित गतिविधियों का अवलोकन प्रदान करता है। विशेष रूप से, अनुप्रयोगों को क्लाउड SQL पुनरारंभ को संभालने के लिए डिज़ाइन किया जाना चाहिए। साथ ही, जबकि प्रति सेकंड कोई क्वेरी नहीं है, कनेक्शन सीमाएं हैं।
PostgreSQL GCP एक्सटेंशन समर्थन
क्लाउड SQL अधिकांश PostgreSQL एक्सटेंशन का समर्थन करता है। इस लेखन के समय तक 52 सामुदायिक एक्सटेंशनों में से 22 असमर्थित एक्सटेंशन और 2 असमर्थित PostGIS एक्सटेंशन हैं।
postgis_raster
postgis_sfcgal
पोस्टग्रेएसक्यूएल एक्सटेंशन के लिए हम या तो पोस्टग्रेएसक्यूएल कॉन्ट्रिब रिपोजिटरी की समीक्षा कर सकते हैं, या बेहतर, पीजी_उपलब्ध_एक्सटेंशन के आउटपुट को अलग कर सकते हैं:
अपस्ट्रीम:
~ $ psql -U postgres -p 54396
Pager usage is off.
psql (11.4, server 9.6.14)
Type "help" for help.
[email protected][local]:54396 postgres# select * from pg_available_extensions order by name;
name | default_version | installed_version | comment
--------------------+-----------------+-------------------+----------------------------------------------------------------------
adminpack | 1.1 | | administrative functions for PostgreSQL
autoinc | 1.0 | | functions for autoincrementing fields
bloom | 1.0 | | bloom access method - signature file based index
btree_gin | 1.0 | | support for indexing common datatypes in GIN
btree_gist | 1.2 | | support for indexing common datatypes in GiST
chkpass | 1.0 | | data type for auto-encrypted passwords
citext | 1.3 | | data type for case-insensitive character strings
cube | 1.2 | | data type for multidimensional cubes
dblink | 1.2 | | connect to other PostgreSQL databases from within a database
dict_int | 1.0 | | text search dictionary template for integers
dict_xsyn | 1.0 | | text search dictionary template for extended synonym processing
earthdistance | 1.1 | | calculate great-circle distances on the surface of the Earth
file_fdw | 1.0 | | foreign-data wrapper for flat file access
fuzzystrmatch | 1.1 | | determine similarities and distance between strings
hstore | 1.4 | | data type for storing sets of (key, value) pairs
hstore_plperl | 1.0 | | transform between hstore and plperl
hstore_plperlu | 1.0 | | transform between hstore and plperlu
hstore_plpython2u | 1.0 | | transform between hstore and plpython2u
hstore_plpythonu | 1.0 | | transform between hstore and plpythonu
insert_username | 1.0 | | functions for tracking who changed a table
intagg | 1.1 | | integer aggregator and enumerator (obsolete)
intarray | 1.2 | | functions, operators, and index support for 1-D arrays of integers
isn | 1.1 | | data types for international product numbering standards
lo | 1.1 | | Large Object maintenance
ltree | 1.1 | | data type for hierarchical tree-like structures
ltree_plpython2u | 1.0 | | transform between ltree and plpython2u
ltree_plpythonu | 1.0 | | transform between ltree and plpythonu
moddatetime | 1.0 | | functions for tracking last modification time
pageinspect | 1.5 | | inspect the contents of database pages at a low level
pg_buffercache | 1.2 | | examine the shared buffer cache
pg_freespacemap | 1.1 | | examine the free space map (FSM)
pg_prewarm | 1.1 | | prewarm relation data
pg_stat_statements | 1.4 | | track execution statistics of all SQL statements executed
pg_trgm | 1.3 | | text similarity measurement and index searching based on trigrams
pg_visibility | 1.1 | | examine the visibility map (VM) and page-level visibility info
pgcrypto | 1.3 | | cryptographic functions
pgrowlocks | 1.2 | | show row-level locking information
pgstattuple | 1.4 | | show tuple-level statistics
plpgsql | 1.0 | 1.0 | PL/pgSQL procedural language
postgres_fdw | 1.0 | | foreign-data wrapper for remote PostgreSQL servers
refint | 1.0 | | functions for implementing referential integrity (obsolete)
seg | 1.1 | | data type for representing line segments or floating-point intervals
sslinfo | 1.2 | | information about SSL certificates
tablefunc | 1.0 | | functions that manipulate whole tables, including crosstab
tcn | 1.0 | | Triggered change notifications
timetravel | 1.0 | | functions for implementing time travel
tsearch2 | 1.0 | | compatibility package for pre-8.3 text search functions
tsm_system_rows | 1.0 | | TABLESAMPLE method which accepts number of rows as a limit
tsm_system_time | 1.0 | | TABLESAMPLE method which accepts time in milliseconds as a limit
unaccent | 1.1 | | text search dictionary that removes accents
uuid-ossp | 1.1 | | generate universally unique identifiers (UUIDs)
xml2 | 1.1 | | XPath querying and XSLT
क्लाउड SQL:
[email protected]:5432 postgres> select * from pg_available_extensions where name !~ '^postgis' order by name;
name | default_version | installed_version | comment
--------------------+-----------------+-------------------+--------------------------------------------------------------------
bloom | 1.0 | | bloom access method - signature file based index
btree_gin | 1.0 | | support for indexing common datatypes in GIN
btree_gist | 1.2 | | support for indexing common datatypes in GiST
chkpass | 1.0 | | data type for auto-encrypted passwords
citext | 1.3 | | data type for case-insensitive character strings
cube | 1.2 | | data type for multidimensional cubes
dict_int | 1.0 | | text search dictionary template for integers
dict_xsyn | 1.0 | | text search dictionary template for extended synonym processing
earthdistance | 1.1 | | calculate great-circle distances on the surface of the Earth
fuzzystrmatch | 1.1 | | determine similarities and distance between strings
hstore | 1.4 | | data type for storing sets of (key, value) pairs
intagg | 1.1 | | integer aggregator and enumerator (obsolete)
intarray | 1.2 | | functions, operators, and index support for 1-D arrays of integers
isn | 1.1 | | data types for international product numbering standards
lo | 1.1 | | Large Object maintenance
ltree | 1.1 | | data type for hierarchical tree-like structures
pg_buffercache | 1.2 | | examine the shared buffer cache
pg_prewarm | 1.1 | | prewarm relation data
pg_stat_statements | 1.4 | | track execution statistics of all SQL statements executed
pg_trgm | 1.3 | | text similarity measurement and index searching based on trigrams
pgcrypto | 1.3 | | cryptographic functions
pgrowlocks | 1.2 | | show row-level locking information
pgstattuple | 1.4 | | show tuple-level statistics
plpgsql | 1.0 | 1.0 | PL/pgSQL procedural language
sslinfo | 1.2 | | information about SSL certificates
tablefunc | 1.0 | | functions that manipulate whole tables, including crosstab
tsm_system_rows | 1.0 | | TABLESAMPLE method which accepts number of rows as a limit
tsm_system_time | 1.0 | | TABLESAMPLE method which accepts time in milliseconds as a limit
unaccent | 1.1 | | text search dictionary that removes accents
uuid-ossp | 1.1 | | generate universally unique identifiers (UUIDs)
क्लाउड SQL में असमर्थित एक्सटेंशन:
adminpack 1.1 administrative functions for PostgreSQL
autoinc 1.0 functions for autoincrementing fields
dblink 1.2 connect to other PostgreSQL databases from within a database
file_fdw 1.0 foreign-data wrapper for flat file access
hstore_plperl 1.0 transform between hstore and plperl
hstore_plperlu 1.0 transform between hstore and plperlu
hstore_plpython2u 1.0 transform between hstore and plpython2u
hstore_plpythonu 1.0 transform between hstore and plpythonu
insert_username 1.0 functions for tracking who changed a table
ltree_plpython2u 1.0 transform between ltree and plpython2u
ltree_plpythonu 1.0 transform between ltree and plpythonu
moddatetime 1.0 functions for tracking last modification time
pageinspect 1.5 inspect the contents of database pages at a low level
pg_freespacemap 1.1 examine the free space map (FSM)
pg_visibility 1.1 examine the visibility map (VM) and page-level visibility info
postgres_fdw 1.0 foreign-data wrapper for remote PostgreSQL servers
refint 1.0 functions for implementing referential integrity (obsolete)
seg 1.1 data type for representing line segments or floating-point intervals
tcn 1.0 Triggered change notifications
timetravel 1.0 functions for implementing time travel
tsearch2 1.0 compatibility package for pre-8.3 text search functions
xml2 1.1 XPath querying and XSLT
लॉगिंग
क्लाउड SQL में किए गए संचालन सभी विवरणों के साथ गतिविधि टैब के अंतर्गत लॉग किए जाते हैं। एक इंस्टेंस बनाने से उदाहरण, सभी इंस्टेंस विवरण दिखा रहा है:
जीसीपी में पोस्टग्रेएसक्यूएल माइग्रेशन
ऑन-प्रिमाइसेस PostgreSQL इंस्टॉलेशन का माइग्रेशन प्रदान करने के लिए, Google pgBouncer का लाभ उठाता है।
ध्यान दें कि PostgreSQL माइग्रेशन के लिए कोई GCP कंसोल विज़ार्ड नहीं है।
डीबीए सावधान!
उच्च उपलब्धता और प्रतिकृति
एक मास्टर नोड एक पठन प्रतिकृति के लिए विफल नहीं हो सकता है। वही खंड पठन प्रतिकृतियों के अन्य महत्वपूर्ण पहलुओं की रूपरेखा तैयार करता है:
- पैचिंग के लिए किसी भी समय ऑफ़लाइन लिया जा सकता है
- एक विफलता के बाद किसी अन्य क्षेत्र में मास्टर नोड का पालन न करें - चूंकि प्रतिकृति समकालिक है इसलिए यह प्रतिकृति अंतराल को प्रभावित कर सकता है
- प्रतिकृति के बीच कोई भार संतुलन नहीं है, दूसरे शब्दों में, कोई एकल समापन बिंदु अनुप्रयोग इंगित नहीं किया जा सकता है
- प्रतिकृति आवृत्ति का आकार कम से कम मास्टर नोड के आकार का होना चाहिए
- कोई क्रॉस-क्षेत्र प्रतिकृति नहीं
- प्रतिकृति का बैकअप नहीं लिया जा सकता
- किसी मास्टर इंस्टेंस को बैकअप से पुनर्स्थापित करने या हटाए जाने से पहले सभी प्रतिकृतियां हटा दी जानी चाहिए
- कैस्केडिंग प्रतिकृति उपलब्ध नहीं है
उपयोगकर्ता
डिफ़ॉल्ट रूप से, "क्लाउड सुपरयुसर" पोस्टग्रेज होता है जो क्लाउडस्क्लसुपरयूजर भूमिका का सदस्य होता है। बदले में, Cloudsqlsuperuser को डिफ़ॉल्ट PostgreSQL भूमिकाएँ विरासत में मिलती हैं:
[email protected]:5432 postgres> \du+ postgres
List of roles
Role name | Attributes | Member of | Description
-----------+------------------------+---------------------+-------------
postgres | Create role, Create DB | {cloudsqlsuperuser} |
[email protected]:5432 postgres> \du+ cloudsqlsuperuser
List of roles
Role name | Attributes | Member of | Description
-------------------+------------------------+--------------+-------------
cloudsqlsuperuser | Create role, Create DB | {pg_monitor} |
ध्यान दें कि SUPERUSER और REPLICATION की भूमिकाएँ उपलब्ध नहीं हैं।
बैकअप और पुनर्प्राप्ति
बैकअप निर्यात नहीं किए जा सकते।
बैकअप का उपयोग किसी इंस्टेंस को अपग्रेड करने के लिए नहीं किया जा सकता है यानी किसी भिन्न PostgreSQL इंजन में पुनर्स्थापित करना।
PITR, तार्किक प्रतिकृति, और JIT संकलन जैसी सुविधाएँ उपलब्ध नहीं हैं। फ़ीचर अनुरोध Google के इश्यू ट्रैकर में दर्ज किए जा सकते हैं।
एन्क्रिप्शन
उदाहरण के लिए निर्माण SSL/TLS सक्षम है लेकिन लागू नहीं:
इस मोड में एन्क्रिप्शन का अनुरोध किया जा सकता है, हालांकि प्रमाणपत्र सत्यापन उपलब्ध नहीं है।
~ $ psql "sslmode=verify-ca user=postgres dbname=postgres password=postgres hostaddr=35.233.149.65"
psql: root certificate file "/home/lelu/.postgresql/root.crt" does not exist
Either provide the file or change sslmode to disable server certificate verification.
~ $ psql "sslmode=require user=postgres dbname=postgres password=postgres hostaddr=35.233.149.65"
Pager usage is off.
psql (11.4, server 9.6.11)
SSL connection (protocol: TLSv1.2, cipher: ECDHE-RSA-AES128-GCM-SHA256, bits: 128, compression: off)
Type "help" for help.
psql का उपयोग करके SSL लागू इंस्टेंस से कनेक्ट करने का प्रयास करने से एक स्व-व्याख्यात्मक त्रुटि वापस आ जाएगी:
~ $ psql "sslmode=require user=postgres dbname=postgres password=postgres hostaddr=35.233.149.65"
psql: FATAL: connection requires a valid client certificate
संग्रहण
- इंस्टेंस बनाने के बाद स्टोरेज को बढ़ाया जा सकता है लेकिन कम नहीं किया जा सकता है इसलिए बढ़ते स्टोरेज स्पेस से जुड़ी लागतों पर ध्यान दें, या वृद्धि सीमा को कॉन्फ़िगर करें।
- भंडारण 30 टीबी तक सीमित है।
CPU
इंस्टेंस को एक से कम कोर के साथ बनाया जा सकता है, हालांकि, क्लाउड SQL कंसोल में विकल्प उपलब्ध नहीं है क्योंकि इस मामले में नमूना मशीन प्रकारों में से एक को निर्दिष्ट करके इंस्टेंस बनाया जाना चाहिए - टियर:
क्लाउड शेल के अंदर gcloud का उपयोग करके साझा-कोड इंस्टेंस बनाने का उदाहरण:पी>
सीपीयू की संख्या 64 तक सीमित है, बड़े के लिए अपेक्षाकृत कम सीमा स्थापना, उस समय को ध्यान में रखते हुए जब 9.2 को बेंचमार्क किया गया था, हाई-एंड सर्वर 32 कोर पर शुरू हुए थे।
इंस्टेंस स्थान
बहु-क्षेत्रीय स्थान केवल बैकअप के लिए उपलब्ध है।
सार्वजनिक आईपी के माध्यम से पहुंच
डिफ़ॉल्ट रूप से, GCP कंसोल विज़ार्ड केवल सार्वजनिक IP पता एक्सेस को सक्षम करता है, हालांकि, क्लाइंट के नेटवर्क को कॉन्फ़िगर किए जाने तक एक्सेस अस्वीकार कर दिया जाता है:
रखरखाव
अपडेट रखरखाव विंडो से अधिक हो सकते हैं और पढ़ने की प्रतिकृतियां किसी भी समय अपडेट की जाती हैं।
दस्तावेज़ीकरण यह निर्दिष्ट नहीं करता है कि रखरखाव विंडो की अवधि कितनी लंबी है। इंस्टेंस बनाते समय जानकारी प्रदान की जाती है:
सीपीयू काउंट, मेमोरी साइज या उस क्षेत्र में परिवर्तन जहां इंस्टेंस है स्थित के लिए आवश्यक है कि डेटाबेस कई मिनट तक ऑफ़लाइन रहे।
उपयोगकर्ता
क्लाउड SQL "भूमिका" और "उपयोगकर्ता" शब्दों का परस्पर उपयोग करता है।
उच्च उपलब्धता
अत्यधिक उपलब्ध कॉन्फ़िगरेशन में लागत स्टैंडअलोन इंस्टेंस से दोगुनी है, और इसमें संग्रहण शामिल है।
प्राथमिक नोड के अनुपलब्ध होने के लगभग 60 सेकंड के बाद स्वचालित विफलता शुरू हो जाती है। Oracle MAA रिपोर्ट के अनुसार, यह 5,800 डॉलर प्रति मिनट के नुकसान में तब्दील हो जाता है। यह ध्यान में रखते हुए कि 2 से 3 मिनट लगते हैं जब तक कि एप्लिकेशन आउटेज डबल्स को ट्रिपल से दोबारा कनेक्ट नहीं कर सकते। साथ ही, 60 सेकंड के दिल की धड़कन का अंतराल कॉन्फ़िगर करने योग्य विकल्प नहीं लगता है।
प्रतिकृति
रीड रेप्लिकेशंस को एक ही एंडपॉइंट का उपयोग करके एक्सेस नहीं किया जा सकता है, प्रत्येक को एक नया आईपी एड्रेस प्राप्त होता है:
Regional persistent disks provide data redundancy at the cost of write performance.
Cloud SQL will not failover to read replicas, hence readers cannot be considered a high availability solution
External replicas and external masters are currently not supported.
Connecting to Instance
Google does not automatically renew the instance SSL certificates, however, both the initiation and rotation procedures can be automated.
If the application is built on the App Engine platform additional limits apply, such as 60 seconds for a database request to complete, 60 concurrent connections for PHP applications. The “App Engine Limits” section in Quotas and limits provides more details:
IP addresses in the range 172.17.0.0/16 are reserved.
Administration
Once started, operations cannot be canceled. Runaway queries can still be stopped by using the pg_terminate_backend and pg_cancel_backend PostgreSQL built-in functions.
A short demonstration using two psql sessions and starting a long running query in the second session:
[email protected]:5432 postgres> select now(); select pg_sleep(3600); select now();
now
-------------------------------
2019-07-16 02:08:18.739177+00
(1 row)
In the first session, cancel the long running query:
[email protected]:5432 postgres> select pid, client_addr, client_port, query, backend_start from pg_stat_activity where usename = 'postgres';
-[ RECORD 1 ]-+-------------------------------------------------------------------------------------------------------------
pid | 2182
client_addr | 173.180.222.170
client_port | 56208
query | select pid, client_addr, client_port, query, backend_start from pg_stat_activity where usename = 'postgres';
backend_start | 2019-07-16 01:57:34.99011+00
-[ RECORD 2 ]-+-------------------------------------------------------------------------------------------------------------
pid | 2263
client_addr | 173.180.222.170
client_port | 56276
query | select pg_sleep(3600);
backend_start | 2019-07-16 02:07:43.860829+00
[email protected]:5432 postgres> select pg_cancel_backend(2263); select now();
-[ RECORD 1 ]-----+--
pg_cancel_backend | t
-[ RECORD 1 ]----------------------
now | 2019-07-16 02:09:09.600399+00
Comparing the timestamps between the two sessions:
ERROR: canceling statement due to user request
now
-------------------------------
2019-07-16 02:09:09.602573+00
(1 row)
It’s a match!
While restarting an instance is a recommended method when attempting to resolve database instance issues, avoid restarting before the first restart completed.
Data Import and Export
CSV import/export is limited to one database.
Exporting data as an SQL dump that can be imported later, requires a custom pg_dump command.
To quote from the documentation:
pg_dump -U [USERNAME] --format=plain --no-owner --no-acl [DATABASE_NAME] \
| sed -E 's/(DROP|CREATE|COMMENT ON) EXTENSION/-- \1 EXTENSION/g' > [SQL_FILE].sql
Pricing
Charge Type | Instance ON | Instance OFF |
Storage | Yes | Yes |
Instance | No | Yes |
Troubleshooting
Logging
All actions are recorded and can be viewed under the Activity tab.
Resources
Review the Diagnosing Issues with Cloud SQL instances and Known issues sections in the documentation.
निष्कर्ष
Although missing some important features the PostgreSQL DBA is used to, namely PITR and Logical Replication, Google Cloud SQL provides out of the box high-availability, replication, encryption, and automatic storage increase, just to name a few, making manage PostgreSQL an appealing solution for organizations looking to quickly deploy their PostgreSQL workloads or even migrating from Oracle.
Developers can take advantage of cheap instances such as shared CPU (less than one CPU).
Google approaches the PostgreSQL engine adoption in a conservative manner, the stable offering lagging behind current upstream by 3 versions.
Just as with any solution provider consider getting support which can come in handy during edge scenarios such as when instances are suspended.
For professional support, Google maintains a list of partners which currently includes one of the PostgreSQL professional services , namely EDB.