AlloyDB Omni के साथ लॉजिकल रेप्लिकेशन

1. परिचय

इस कोडलैब में, AlloyDB Omni के अलग-अलग इंस्टेंस के बीच लॉजिकल रेप्लिकेशन को कॉन्फ़िगर करने का तरीका बताया गया है. आपको एक ही Compute Engine वीएम पर, AlloyDB Omni के कई इंस्टेंस डिप्लॉय करने होंगे. साथ ही, pglogical एक्सटेंशन का इस्तेमाल करके, उनके बीच रेप्लिकेशन सेट अप करना होगा.

एक नोड पर कई इंस्टेंस चलाने से, डेवलपमेंट, टेस्टिंग या रेप्लिकेशन एनवायरमेंट को सिम्युलेट करने में मदद मिलती है. इस कोडलैब के आखिर में, आपके पास रेप्लिकेशन का ऐसा सेटअप होगा जो काम कर रहा होगा. इसमें एक इंस्टेंस, प्रोवाइडर के तौर पर काम करेगा और दूसरा इंस्टेंस, सदस्य के तौर पर काम करेगा.

ज़रूरी शर्तें

  • Google Cloud Console से, Google Cloud प्रोजेक्ट और Cloud Shell को ऐक्सेस करने की सुविधा.
  • Google Cloud SDK (gcloud) इंस्टॉल और कॉन्फ़िगर किया गया हो. gcloud इंस्टॉल करने के बारे में जानकारी के लिए, gcloud-install पर जाएं

आपको क्या सीखने को मिलेगा

  • gcloud का इस्तेमाल करके, एक से ज़्यादा AlloyDB Omni इंस्टेंस के लिए Compute Engine वीएम बनाने और उसे तैयार करने का तरीका.
  • AlloyDB Omni RPM इंस्टॉल करने का तरीका.
  • systemd टेंप्लेट का इस्तेमाल करके, AlloyDB Omni के एक से ज़्यादा इंस्टेंस को कॉन्फ़िगर और चालू करने का तरीका.
  • pglogical का इस्तेमाल करके, AlloyDB Omni इंस्टेंस के बीच लॉजिकल रेप्लिकेशन को कॉन्फ़िगर करने का तरीका.
  • डेटा को सेवा देने वाली कंपनी से सदस्य के तौर पर शामिल कंपनी में कॉपी करके, रेप्लिकेशन की पुष्टि करने का तरीका.

आपको किन चीज़ों की ज़रूरत होगी

  • AlloyDB Omni RPM के लिए यूआरएल लिंक पाएं. लिंक आपके ईमेल पते पर भेजे जाते हैं. इनमें रिपॉज़िटरी यूआरएल सर्वर का लिंक भी शामिल होता है. इस एनवायरमेंट वैरिएबल को शुरू करें, ताकि कोडलैब के दौरान यूआरएल का इस्तेमाल किया जा सके.
    export ALLOYDB_OMNI_REPOSITORY_URL="..."
    
  • Google Cloud का ऐक्सेस वाला टर्मिनल काम कर रहा हो. इसके लिए, Cloud Shell का इस्तेमाल किया जा सकता है.

2. सेटअप और ज़रूरी शर्तें

प्रोजेक्ट सेटअप करना

Google Cloud प्रोजेक्ट बनाना

  1. Google Cloud Console में, प्रोजेक्ट चुनने वाले पेज पर जाकर, Google Cloud प्रोजेक्ट चुनें या बनाएं.
  2. पक्का करें कि आपके Cloud प्रोजेक्ट के लिए बिलिंग की सुविधा चालू हो. किसी प्रोजेक्ट के लिए बिलिंग चालू है या नहीं, यह देखने का तरीका जानें.

Cloud Shell शुरू करना

लैपटॉप से Google Cloud को रिमोटली ऐक्सेस किया जा सकता है. हालांकि, इस कोडलैब में Google Cloud Shell का इस्तेमाल किया गया है. यह क्लाउड में चलने वाला कमांड-लाइन एनवायरमेंट है.

Cloud Shell चालू करने का आइकॉन

  1. Google Cloud Console खोलें और सबसे ऊपर दाईं ओर मौजूद टूलबार पर, Cloud Shell आइकॉन पर क्लिक करें.Cloud Shell को इनमें से किसी भी तरीके से खोला जा सकता है:

Cloud Shell को चालू होने और एनवायरमेंट से कनेक्ट होने में आम तौर पर कुछ समय लगता है. यह कार्रवाई पूरी होने के बाद, आपको इससे मिलता-जुलता आउटपुट दिखेगा:

Google Cloud Shell टर्मिनल में दिखाया गया है कि एनवायरमेंट कनेक्ट हो गया है

3. Compute Engine VM बनाना

इस सेक्शन में, gcloud कमांड-लाइन टूल का इस्तेमाल करके, एक Compute Engine वर्चुअल मशीन (वीएम) बनाएं. Rocky Linux 9 इमेज का इस्तेमाल करें. यह AlloyDB Omni RPM के साथ पूरी तरह से काम करती है.

  1. अपने प्रोजेक्ट आईडी, वीएम के नाम, ज़ोन, और क्षेत्र के लिए एनवायरमेंट वैरिएबल तय करें.
    export PROJECT="your-project-id"
    export INSTANCE_NAME="alloydb-omni-multi-vm"
    export ZONE="us-central1-c"
    export REGION="us-central1"
    
  2. अपने Google Cloud खाते का इस्तेमाल करके साइन इन करें और डिफ़ॉल्ट प्रोजेक्ट कॉन्फ़िगर करें.
    gcloud auth login
    gcloud config set project $PROJECT
    
  3. पहचान के बारे में जानकारी रखने वाली प्रॉक्सी (आईएपी) का इस्तेमाल करके, अपनी वीएम में एसएसएच कनेक्शन की अनुमति देने के लिए, फ़ायरवॉल का नियम बनाएं.
    gcloud compute firewall-rules create allow-ssh-alloydb-omni \
        --project=$PROJECT \
        --direction=INGRESS \
        --action=allow \
        --rules=tcp:22 \
        --source-ranges="0.0.0.0/0"
    
  4. वीएम को सार्वजनिक आईपी पते के बिना बनाया गया है. इसलिए, Cloud Router और Cloud NAT गेटवे को कॉन्फ़िगर करें, ताकि वीएम बाहरी पैकेज रिपॉज़िटरी को ऐक्सेस कर सके और ज़रूरी सॉफ़्टवेयर डाउनलोड कर सके.
    gcloud compute routers create alloydb-omni-router \
        --project=$PROJECT \
        --network=default \
        --region=$REGION
    
    gcloud compute routers nats create alloydb-omni-nat \
        --project=$PROJECT \
        --router=alloydb-omni-router \
        --region=$REGION \
        --nat-all-subnet-ip-ranges \
        --auto-allocate-nat-external-ips
    
  5. पुष्टि करें कि आपके वर्चुअल प्राइवेट क्लाउड (वीपीसी) नेटवर्क में, मान्य डिफ़ॉल्ट इंटरनेट गेटवे रूट मौजूद हो. Cloud NAT को इंटरनेट पर आउटबाउंड ट्रैफ़िक फ़ॉरवर्ड करने के लिए, इस रूट की ज़रूरत होती है.
    gcloud compute routes create default-internet-route \
        --project=$PROJECT \
        --network=default \
        --destination-range=0.0.0.0/0 \
        --next-hop-gateway=default-internet-gateway
    
  6. ज़रूरी स्पेसिफ़िकेशन (16 वीसीपीयू, 20 जीबी बैलेंसड परसिस्टेंट डिस्क, Rocky Linux 9) के साथ Compute Engine वीएम इंस्टेंस बनाएं. बेहतर सुरक्षा के लिए, --no-address फ़्लैग का इस्तेमाल करें. इससे यह पक्का किया जा सकेगा कि वीएम को कोई सार्वजनिक आईपी पता असाइन न किया गया हो.
    gcloud compute instances create $INSTANCE_NAME \
        --project=$PROJECT \
        --zone=$ZONE \
        --machine-type=n2-highmem-16 \
        --image-family=rocky-linux-9 \
        --image-project=rocky-linux-cloud \
        --boot-disk-size=20GB \
        --boot-disk-type=pd-balanced \
        --no-address
    
  7. वर्चुअल मशीन (वीएम) बनाने के बाद, वीएम के स्टेटस की पुष्टि करें.
    gcloud compute instances list --filter="name=$INSTANCE_NAME" --project=$PROJECT
    

4. वीएम तैयार करना

इस सेक्शन में, आपको नई बनाई गई वीएम से कनेक्ट करना होगा. साथ ही, ऑपरेटिंग सिस्टम एनवायरमेंट को तैयार करना होगा.

  1. IAP का इस्तेमाल करके, एसएसएच के ज़रिए वीएम से कनेक्ट करें. वीएम के पास सार्वजनिक आईपी पता नहीं है. इसलिए, gcloud एसएसएच कनेक्शन को आईएपी के ज़रिए अपने-आप टनल कर देता है.
    gcloud compute ssh $INSTANCE_NAME --zone=$ZONE --project=$PROJECT --tunnel-through-iap
    
  2. बेस डेटा डायरेक्ट्री के लिए एनवायरमेंट वैरिएबल तय करें.
    export BASE_PGDATA="/var/lib/alloydbomni"
    
  3. बेस डेटा डायरेक्ट्री बनाएं.
    sudo mkdir -p $BASE_PGDATA
    
  4. policycoreutils-python-utils पैकेज इंस्टॉल करें, ताकि SELinux नीति को कॉन्फ़िगर किया जा सके.
    sudo dnf install -y policycoreutils-python-utils
    

5. AlloyDB Omni इंस्टॉल करना

वीएम तैयार होने के बाद, अब पैकेज रिपॉज़िटरी को कॉन्फ़िगर किया जा सकता है. साथ ही, AlloyDB Omni RPM पैकेज इंस्टॉल किया जा सकता है.

  1. डेटाबेस कॉन्फ़िगरेशन फ़ाइल बनाकर, अपनी वर्चुअल मशीन (वीएम) पर YUM डेटाबेस कॉन्फ़िगर करें. $ALLOYDB_OMNI_REPOSITORY_URL को उस यूआरएल से बदलें जो आपको मिला है.
    export ALLOYDB_OMNI_REPOSITORY_URL="..."
    sudo tee /etc/yum.repos.d/alloydbomni.repo << EOF
    [alloydbomni]
    name=alloydbomni
    baseurl=$ALLOYDB_OMNI_REPOSITORY_URL
    enabled=1
    repo_gpgcheck=0
    gpgcheck=1
    gpgkey=https://dl.google.com/linux/linux_signing_key.pub
    EOF
    
  2. YUM कैश मेमोरी अपडेट करें.
    sudo yum makecache
    
  3. AlloyDB Omni के RPM पैकेज का वर्शन 18 इंस्टॉल करें.
    sudo dnf install -y alloydbomni18
    

6. एक से ज़्यादा इंस्टेंस कॉन्फ़िगर करना

इस सेक्शन में, दो इंस्टेंस कॉन्फ़िगर करें: inst1 और inst2.

  1. एक से ज़्यादा इंस्टेंस के लिए, systemd टेंप्लेट सेवा फ़ाइल alloydbomni18@.service बनाएं.
    sudo tee /etc/systemd/system/alloydbomni18@.service << EOF
    [Unit]
    Description=AlloyDB Omni Database server instance %I
    After=syslog.target
    After=network-online.target
    
    [Service]
    SyslogIdentifier=alloydbomni-%I
    Type=notify
    
    User=postgres
    Group=postgres
    
    # Load configuration for the instance
    EnvironmentFile=/etc/alloydbomni/%I.conf
    
    OOMScoreAdjust=-1000
    Environment=PG_OOM_ADJUST_FILE=/proc/self/oom_score_adj
    Environment=PG_OOM_ADJUST_VALUE=0
    
    ExecStartPre=/usr/lib/postgresql/18/bin/alloydbomni18-check-db-dir \${PGDATA}
    ExecStart=/usr/lib/postgresql/18/bin/postgres -D \${PGDATA}
    ExecReload=/bin/kill -HUP \$MAINPID
    
    KillMode=mixed
    KillSignal=SIGINT
    
    TimeoutSec=0
    TimeoutStartSec=0
    TimeoutStopSec=1h
    
    [Install]
    WantedBy=multi-user.target
    EOF
    
  2. नई टेंप्लेट सेवा को पहचानने के लिए, systemd मैनेजर कॉन्फ़िगरेशन को फिर से लोड करें.
    sudo systemctl daemon-reload
    
  3. AlloyDB Omni इंस्टेंस के लिए कॉन्फ़िगरेशन डायरेक्ट्री बनाएं.
    sudo mkdir -p /etc/alloydbomni
    
  4. inst1 के लिए डेटा डायरेक्ट्री कॉन्फ़िगर करें.
    sudo tee /etc/alloydbomni/inst1.conf << EOF
    PGDATA=/var/lib/alloydbomni/inst1
    EOF
    
  5. inst2 के लिए डेटा डायरेक्ट्री कॉन्फ़िगर करें.
    sudo tee /etc/alloydbomni/inst2.conf << EOF
    PGDATA=/var/lib/alloydbomni/inst2
    EOF
    
  6. कॉन्फ़िगरेशन फ़ाइलों पर सही अनुमतियां सेट करें.
    sudo chmod 640 /etc/alloydbomni/*.conf
    sudo chown postgres:postgres /etc/alloydbomni/*.conf
    
  7. दोनों इंस्टेंस के लिए डेटा डायरेक्ट्री बनाएं और मालिकाना हक की सही जानकारी सेट करें.
    sudo mkdir -p /var/lib/alloydbomni/inst1
    sudo mkdir -p /var/lib/alloydbomni/inst2
    sudo chown -R postgres:postgres /var/lib/alloydbomni
    sudo chmod 750 /var/lib/alloydbomni/inst1 /var/lib/alloydbomni/inst2
    
  8. ज़रूरी नहीं: हर इंस्टेंस के लिए संसाधन की सीमाएं सेट करें. इससे एक इंस्टेंस को सभी वीएम संसाधनों का इस्तेमाल करने से रोका जा सकता है. दोनों इंस्टेंस के लिए, systemd ओवरराइड डायरेक्ट्री और फ़ाइलें बनाएं.ध्यान दें: यहां दिए गए कॉन्फ़िगरेशन (40%) में इस्तेमाल की गई संसाधन सीमाएं, उदाहरण के तौर पर दी गई वैल्यू हैं. अपने वर्कलोड और वीएम की क्षमता के हिसाब से सीमाएं तय करें.inst1 के लिए:
    sudo mkdir -p /etc/systemd/system/alloydbomni18@inst1.service.d
    sudo tee /etc/systemd/system/alloydbomni18@inst1.service.d/override.conf << EOF
    [Service]
    CPUQuota=40%
    MemoryMax=40%
    EOF
    
    inst2 के लिए:
    sudo mkdir -p /etc/systemd/system/alloydbomni18@inst2.service.d
    sudo tee /etc/systemd/system/alloydbomni18@inst2.service.d/override.conf << EOF
    [Service]
    CPUQuota=40%
    MemoryMax=40%
    EOF
    

7. डेटाबेस को शुरू करना और तैयार करना

हर डेटाबेस इंस्टेंस को अलग-अलग तरीके से शुरू करें और तैयार करें.

  1. सेटअप के लिए, SELinux को नीति लागू न करने वाले मोड पर कॉन्फ़िगर करें.
    sudo setenforce 0
    
    चेतावनी: SELinux को नीति लागू न करने वाले मोड पर सेट करने से, नीति लागू करने की सुविधा बंद हो जाती है. इसलिए, इसका इस्तेमाल सावधानी से करना चाहिए. इस कोडलैब में, इसका इस्तेमाल इंस्टॉलेशन को आसान बनाने के लिए किया जाता है. प्रोडक्शन में, AlloyDB Omni को नीति लागू करने वाले मोड में चलाने के लिए, SELinux की सही नीतियां कॉन्फ़िगर करें. सेटअप करने के बाद, sudo setenforce 1 चलाकर नीति लागू करने की सुविधा को फिर से चालू किया जा सकता है.
  2. PostgreSQL postgres एडमिन उपयोगकर्ता के लिए एक मज़बूत पासवर्ड तय करें. इस पासवर्ड का इस्तेमाल, इस कोडलैब के दोनों इंस्टेंस के लिए किया जाता है.
    export PGPASSWORD="YourStrongPassword123!"
    
    ध्यान दें: इस कोडलैब में, कमांड लाइन पर एनवायरमेंट वैरिएबल (जैसे, PGPASSWORD=$PGPASSWORD) का इस्तेमाल करके पासवर्ड पास करने की सुविधा दी गई है.इससे कोडलैब को आसानी से समझा जा सकता है. हालांकि, इससे प्रोसेस लिस्टिंग में पासवर्ड दिख सकता है. प्रोडक्शन में, ज़्यादा सुरक्षित तरीकों का इस्तेमाल करें. जैसे, .pgpass फ़ाइल या सीक्रेट मैनेजर.

inst1 को सेट अप करें

  1. inst1 के लिए डेटाबेस डायरेक्ट्री शुरू करें.
    sudo PGPASSWORD=$PGPASSWORD \
      PGDATA=/var/lib/alloydbomni/inst1 \
      /usr/lib/postgresql/18/bin/alloydbomni18-setup initdb
    
  2. postgresql.conf फ़ाइल को अपडेट करके, इंस्टेंस को पोर्ट 5433 पर सुनने के लिए कॉन्फ़िगर करें.
    sudo sed -i \
      "s/^#*[[:space:]]*port[[:space:]]*=[[:space:]]*[0-9]*/port = 5433/" \
      /var/lib/alloydbomni/inst1/postgresql.conf
    
  3. AlloyDB Omni के लिए डेटाबेस इंस्टेंस तैयार करें.
    sudo PGPASSWORD=$PGPASSWORD \
      PGDATA=/var/lib/alloydbomni/inst1 \
      PGPORT=5433 \
      /usr/lib/postgresql/18/bin/alloydbomni18-setup preparedb
    

inst2 सेट अप करना

  1. inst2 के लिए डेटाबेस डायरेक्ट्री शुरू करें.
    sudo PGPASSWORD=$PGPASSWORD \
      PGDATA=/var/lib/alloydbomni/inst2 \
      /usr/lib/postgresql/18/bin/alloydbomni18-setup initdb
    
  2. पोर्ट 5434 पर सुनने के लिए इंस्टेंस को कॉन्फ़िगर करें.
    sudo sed -i \
      "s/^#*[[:space:]]*port[[:space:]]*=[[:space:]]*[0-9]*/port = 5434/" \
      /var/lib/alloydbomni/inst2/postgresql.conf
    
  3. डेटाबेस इंस्टेंस तैयार करें.
    sudo PGPASSWORD=$PGPASSWORD \
      PGDATA=/var/lib/alloydbomni/inst2 \
      PGPORT=5434 \
      /usr/lib/postgresql/18/bin/alloydbomni18-setup preparedb
    

8. AlloyDB Omni की सेवाएं शुरू करना

अब दोनों इंस्टेंस के लिए, systemd की सेवाएं शुरू की जा सकती हैं.

  1. नए कॉन्फ़िगरेशन और ओवरराइड को पहचानने के लिए, systemd मैनेजर कॉन्फ़िगरेशन को फिर से लोड करें.
    sudo systemctl daemon-reload
    
  2. inst1 के लिए सेवा चालू करें और इसका इस्तेमाल शुरू करें.
    sudo systemctl enable alloydbomni18@inst1
    sudo systemctl start alloydbomni18@inst1
    
  3. inst2 के लिए सेवा चालू करें और इसका इस्तेमाल शुरू करें.
    sudo systemctl enable alloydbomni18@inst2
    sudo systemctl start alloydbomni18@inst2
    
  4. पुष्टि करें कि दोनों सेवाएं चालू हों और काम कर रही हों.
    sudo systemctl status alloydbomni18@inst1
    sudo systemctl status alloydbomni18@inst2
    
    पुष्टि करें कि दोनों के आउटपुट में Active: active (running) दिख रहा हो.

9. AlloyDB Omni इंस्टेंस की पुष्टि करना

पुष्टि करें कि दोनों इंस्टेंस सही तरीके से काम कर रहे हों और एक-दूसरे से अलग हों.

  1. inst1 (पोर्ट 5433) से कनेक्ट करें. आपको वह पासवर्ड डालने के लिए कहा जाएगा जिसे आपने डेटाबेस को शुरू करने और तैयार करने के दौरान कॉन्फ़िगर किया था.
    /usr/lib/postgresql/18/bin/psql -h localhost -p 5433 -U postgres -W
    
  2. कनेक्शन की पुष्टि करने के लिए कोई क्वेरी चलाएं.
    postgres=# SELECT version();
    
  3. इंस्टेंस से डिसकनेक्ट करें.
    postgres=# \q
    
  4. inst2 (पोर्ट 5434) से कनेक्ट करें.
    /usr/lib/postgresql/18/bin/psql -h localhost -p 5434 -U postgres -W
    
  5. कनेक्शन की पुष्टि करने के लिए कोई क्वेरी चलाएं.
    postgres=# SELECT version();
    
  6. इंस्टेंस से डिसकनेक्ट करें.
    postgres=# \q
    

10. pglogical रेप्लिकेशन के लिए कॉन्फ़िगर करना

pglogical एक्सटेंशन का इस्तेमाल करके, दोनों इंस्टेंस के बीच लॉजिकल रेप्लिकेशन कॉन्फ़िगर करें. इस उदाहरण में, inst1 सेवा देने वाली कंपनी के तौर पर काम करता है और inst2 सदस्य के तौर पर काम करता है.

ध्यान दें: यह कोडलैब, रेप्लिकेशन कनेक्शन के लिए postgres सुपरयूज़र का इस्तेमाल करता है. प्रोडक्शन एनवायरमेंट में, रेप्लिकेशन के लिए खास तौर पर एक उपयोगकर्ता बनाएं. उसे REPLICATION के अधिकार दें. साथ ही, उसे सिर्फ़ उन टेबल का ऐक्सेस दें जिन्हें रेप्लिकेट किया जा रहा है.

pglogical के लिए इंस्टेंस कॉन्फ़िगर करना

  1. shared_preload_libraries में pglogical चालू करें. साथ ही, inst1 के लिए postgresql.conf में अन्य रेप्लिकेशन पैरामीटर कॉन्फ़िगर करें.
    # Append pglogical to shared_preload_libraries
    sudo sed -i \
      "s/\(shared_preload_libraries\s*=\s*'\)\([^']*\)'/\1\2,pglogical'/" \
      /var/lib/alloydbomni/inst1/postgresql.conf
    
    # Append replication settings
    sudo tee -a /var/lib/alloydbomni/inst1/postgresql.conf << EOF
    wal_level = logical
    max_replication_slots = 10
    max_wal_senders = 10
    max_worker_processes = 20
    track_commit_timestamp = on
    alloydb.enable_pglogical = on
    alloydb.logical_decoding = on
    EOF
    
  2. inst2 के लिए वे सेटिंग कॉन्फ़िगर करें जो आपने inst1 के लिए कॉन्फ़िगर की थीं.
    # Append pglogical to shared_preload_libraries
    sudo sed -i \
      "s/\(shared_preload_libraries\s*=\s*'\)\([^']*\)'/\1\2,pglogical'/" \
      /var/lib/alloydbomni/inst2/postgresql.conf
    
    # Append replication settings
    sudo tee -a /var/lib/alloydbomni/inst2/postgresql.conf << EOF
    wal_level = logical
    max_replication_slots = 10
    max_wal_senders = 10
    max_worker_processes = 20
    track_commit_timestamp = on
    alloydb.enable_pglogical = on
    alloydb.logical_decoding = on
    EOF
    
  3. कॉन्फ़िगरेशन में किए गए बदलावों को लागू करने के लिए, दोनों इंस्टेंस रीस्टार्ट करें.
    sudo systemctl restart alloydbomni18@inst1
    sudo systemctl restart alloydbomni18@inst2
    

रेप्लिकेशन की भूमिकाएं और टेबल सेट अप करना

  1. inst1 (provider, port 5433) पर, रेप्लिकेशन की भूमिका और रेप्लिकेट की जाने वाली टेबल बनाएं.
    /usr/lib/postgresql/18/bin/psql -h localhost -p 5433 \
      -U postgres -d postgres -c "
      DO \$\$
      BEGIN
        IF NOT EXISTS (SELECT FROM pg_catalog.pg_roles WHERE rolname = 'app_owner') THEN
          CREATE ROLE app_owner WITH LOGIN PASSWORD 'Password123';
        END IF;
      END
      \$\$;
      GRANT ALL ON SCHEMA public TO app_owner;
      CREATE TABLE IF NOT EXISTS replication_test (
          id SERIAL PRIMARY KEY,
          data TEXT,
          created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
      );
      ALTER TABLE replication_test OWNER TO app_owner;
    "
    
  2. inst2 (सदस्यता लेने वाला, पोर्ट 5434) पर, एक जैसी भूमिका और टेबल स्ट्रक्चर बनाएं.
    /usr/lib/postgresql/18/bin/psql -h localhost -p 5434 \
      -U postgres -d postgres -c "
      DO \$\$
      BEGIN
        IF NOT EXISTS (SELECT FROM pg_catalog.pg_roles WHERE rolname = 'app_owner') THEN
          CREATE ROLE app_owner WITH LOGIN PASSWORD 'Password123';
        END IF;
      END
      \$\$;
      GRANT ALL ON SCHEMA public TO app_owner;
      CREATE TABLE IF NOT EXISTS replication_test (
          id SERIAL PRIMARY KEY,
          data TEXT,
          created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
      );
      ALTER TABLE replication_test OWNER TO app_owner;
    "
    

pglogical नोड और सदस्यता कॉन्फ़िगर करना

  1. inst1 पर pglogical provider नोड को शुरू करें.
    /usr/lib/postgresql/18/bin/psql -h localhost -p 5433 \
      -U postgres -d postgres -c "
      CREATE EXTENSION IF NOT EXISTS pglogical;
      SELECT pglogical.create_node(
          node_name := 'provider',
          dsn := 'host=127.0.0.1 port=5433 dbname=postgres user=postgres password=YourStrongPassword123!'
      );
      SELECT pglogical.replication_set_add_table('default', 'replication_test');
    "
    
  2. pglogical subscriber नोड को शुरू करें और inst2 पर सदस्यता बनाएं.
    /usr/lib/postgresql/18/bin/psql -h localhost -p 5434 \
      -U postgres -d postgres -c "
      CREATE EXTENSION IF NOT EXISTS pglogical;
      SELECT pglogical.create_node(
          node_name := 'subscriber',
          dsn := 'host=127.0.0.1 port=5434 dbname=postgres user=postgres password=YourStrongPassword123!'
      );
      SELECT pglogical.create_subscription(
          subscription_name := 'test_subscription',
          provider_dsn := 'host=127.0.0.1 port=5433 dbname=postgres user=postgres password=YourStrongPassword123!'
      );
    "
    
    ध्यान दें: सदस्यता बनाने के बाद, शुरुआती सिंक्रनाइज़ेशन पूरा होने में कुछ समय लग सकता है.

11. pglogical रेप्लिकेशन की पुष्टि करना

पुष्टि करें कि डेटा कॉपी करने की प्रोसेस सही तरीके से काम कर रही है. इसके लिए, सेवा देने वाली कंपनी के खाते में डेटा डालें और सेवा लेने वाली कंपनी के खाते में क्वेरी करें.

  1. पुष्टि करें कि सदस्यता चालू हो. replicating पर स्विच होने में कुछ सेकंड लग सकते हैं.
    /usr/lib/postgresql/18/bin/psql -t -A -h localhost -p 5434 \
      -U postgres -d postgres -c "
      SELECT status FROM pglogical.show_subscription_status() WHERE subscription_name = 'test_subscription';
      "
    
  2. जारी रखने से पहले, पुष्टि करें कि आउटपुट में replicating दिख रहा हो.
  3. सेवा देने वाली कंपनी (inst1) के लिए, जांच वाली लाइन डालें.
    /usr/lib/postgresql/18/bin/psql -h localhost -p 5433 \
      -U postgres -d postgres -c "
      INSERT INTO replication_test (data) VALUES ('Hello from replication provider!');
    "
    
  4. डेटा कॉपी हुआ है या नहीं, इसकी पुष्टि करने के लिए inst2 पर टेबल को क्वेरी करें.
    /usr/lib/postgresql/18/bin/psql -h localhost -p 5434 \
      -U postgres -d postgres -c "SELECT * FROM replication_test;"
    
    पुष्टि करें कि आपको inst1 पर डाली गई लाइन दिख रही है.

12. साफ़-सफ़ाई सेवा

संसाधन हटाएं. सबसे पहले, वीएम पर मौजूद AlloyDB Omni इंस्टेंस को बंद करें. इसके बाद, Google Cloud के संसाधनों को मिटाएं.

AlloyDB Omni इंस्टेंस मिटाना

वर्चुअल मशीन (वीएम) को मिटाने से पहले, AlloyDB Omni इंस्टेंस को क्लीन अप किया जा सकता है. इसके लिए, सेवाओं को बंद और बंद करें. साथ ही, उनके कॉन्फ़िगरेशन और डेटा को हटाएं.

  1. inst1 के लिए सेवा को बंद और बंद करें. साथ ही, इसका डेटा और कॉन्फ़िगरेशन हटाएं.
    sudo systemctl stop alloydbomni18@inst1
    sudo systemctl disable alloydbomni18@inst1
    sudo rm -rf /var/lib/alloydbomni/inst1
    sudo rm -f /etc/alloydbomni/inst1.conf
    
  2. inst2 के लिए सेवा को बंद और बंद करें. साथ ही, इसका डेटा और कॉन्फ़िगरेशन हटाएं.
    sudo systemctl stop alloydbomni18@inst2
    sudo systemctl disable alloydbomni18@inst2
    sudo rm -rf /var/lib/alloydbomni/inst2
    sudo rm -f /etc/alloydbomni/inst2.conf
    
  3. systemd मैनेजर के कॉन्फ़िगरेशन को फिर से लोड करें और फ़ेल हुई यूनिट को रीसेट करें.
    sudo systemctl daemon-reload
    sudo systemctl reset-failed
    

Google Cloud के संसाधनों को मिटाना

इंस्टेंस को क्लीन अप करने के बाद, Compute Engine वीएम और अन्य संसाधन मिटाएं.

  1. एसएसएच सेशन से डिसकनेक्ट करें.
    exit
    
  2. Compute Engine वीएम इंस्टेंस मिटाएं.
    gcloud compute instances delete $INSTANCE_NAME --zone=$ZONE --project=$PROJECT --quiet
    
  3. फ़ायरवॉल का नियम मिटाएं.
    gcloud compute firewall-rules delete allow-ssh-alloydb-omni --project=$PROJECT --quiet
    
  4. Cloud NAT और राऊटर को मिटाएं.
    gcloud compute routers nats delete alloydb-omni-nat --router=alloydb-omni-router --region=$REGION --project=$PROJECT --quiet
    gcloud compute routers delete alloydb-omni-router --region=$REGION --project=$PROJECT --quiet
    
  5. डिफ़ॉल्ट इंटरनेट रूट मिटाएं.
    gcloud compute routes delete default-internet-route --project=$PROJECT --quiet
    

13. बधाई हो

आपने एक ही Compute Engine वीएम पर, AlloyDB Omni के कई इंस्टेंस को डिप्लॉय और कॉन्फ़िगर कर लिया है.

हमने क्या-क्या शामिल किया है

  • Compute Engine वीएम को कैसे प्रोविज़न और तैयार करें.
  • AlloyDB Omni RPM इंस्टॉल करने का तरीका.
  • एक से ज़्यादा इंस्टेंस के लिए, systemd टेंप्लेट कॉन्फ़िगर करने का तरीका.
  • अलग-अलग पोर्ट पर कई स्वतंत्र सेवाओं को शुरू करने, कॉन्फ़िगर करने, और शुरू करने का तरीका.
  • हर इंस्टेंस की स्वतंत्रता की पुष्टि कैसे करें.

ज़्यादा जानें

  • इंस्टॉल करने और कॉन्फ़िगर करने के बारे में ज़्यादा जानने के लिए, AlloyDB Omni का दस्तावेज़ देखें.
  • इस कोडलैब में इस्तेमाल किए गए रेप्लिकेशन एक्सटेंशन के बारे में ज़्यादा जानने के लिए, pglogical का दस्तावेज़ देखें.