AlloyDB Omni-এর সাথে লজিক্যাল রেপ্লিকেশন

১. ভূমিকা

এই কোডল্যাবে দেখানো হয়েছে কীভাবে স্বাধীন AlloyDB Omni ইনস্ট্যান্সগুলোর মধ্যে লজিক্যাল রেপ্লিকেশন কনফিগার করতে হয়। আপনি একটিমাত্র Compute Engine VM-এ একাধিক AlloyDB Omni ইনস্ট্যান্স ডেপ্লয় করবেন এবং pglogical এক্সটেনশন ব্যবহার করে সেগুলোর মধ্যে রেপ্লিকেশন সেট আপ করবেন।

একটি নোডে একাধিক ইনস্ট্যান্স চালানো ডেভেলপমেন্ট, টেস্টিং বা রেপ্লিকেশন এনভায়রনমেন্ট সিমুলেট করার জন্য উপযোগী। এই কোডল্যাবের শেষে, আপনার কাছে একটি কার্যকরী রেপ্লিকেশন সেটআপ থাকবে, যেখানে একটি ইনস্ট্যান্স প্রোভাইডার এবং অন্যটি সাবস্ক্রাইবার হিসেবে কাজ করবে।

পূর্বশর্ত

  • গুগল ক্লাউড কনসোল থেকে গুগল ক্লাউড প্রজেক্ট এবং ক্লাউড শেল অ্যাক্সেস করা যায়।
  • Google Cloud SDK ( gcloud ) ইনস্টল এবং কনফিগার করা হয়েছে। gcloud ইনস্টল করার বিস্তারিত তথ্যের জন্য, gcloud-install দেখুন।

আপনি যা শিখবেন

  • gcloud ব্যবহার করে একাধিক AlloyDB Omni ইনস্ট্যান্সের জন্য কীভাবে একটি Compute Engine VM তৈরি ও প্রস্তুত করবেন।
  • AlloyDB Omni RPM কীভাবে ইনস্টল করবেন
  • systemd টেমপ্লেট ব্যবহার করে একাধিক AlloyDB Omni ইনস্ট্যান্স কীভাবে কনফিগার এবং ইনিশিয়ালাইজ করবেন।
  • pglogical ব্যবহার করে AlloyDB Omni ইনস্ট্যান্সগুলোর মধ্যে লজিক্যাল রেপ্লিকেশন কীভাবে কনফিগার করবেন।
  • প্রোভাইডার থেকে সাবস্ক্রাইবারে ডেটা রেপ্লিকেট করার মাধ্যমে কীভাবে রেপ্লিকেশন যাচাই করবেন।

আপনার যা যা লাগবে

  • AlloyDB Omni RPM-গুলোর একটি URL লিঙ্ক সংগ্রহ করুন । রিপোজিটরি URL সার্ভারের লিঙ্কসহ লিঙ্কগুলো আপনার ইমেইলে পাঠানো হবে। কোডল্যাবের সময় URL-টি ব্যবহারের জন্য প্রস্তুত রাখতে নিম্নলিখিত এনভায়রনমেন্ট ভেরিয়েবলটি ইনিশিয়ালাইজ করুন।
    export ALLOYDB_OMNI_REPOSITORY_URL="..."
    
  • গুগল ক্লাউডে প্রবেশাধিকারসহ একটি কার্যকর টার্মিনাল। এই উদ্দেশ্যে আপনি ক্লাউড শেল ব্যবহার করতে পারেন।

২. সেটআপ এবং প্রয়োজনীয়তা

প্রজেক্ট সেটআপ

একটি গুগল ক্লাউড প্রজেক্ট তৈরি করুন

  1. গুগল ক্লাউড কনসোলের প্রজেক্ট সিলেক্টর পেজে, একটি গুগল ক্লাউড প্রজেক্ট নির্বাচন করুন বা তৈরি করুন ।
  2. আপনার ক্লাউড প্রোজেক্টের জন্য বিলিং চালু আছে কিনা তা নিশ্চিত করুন। কোনো প্রোজেক্টে বিলিং চালু আছে কিনা তা কীভাবে পরীক্ষা করবেন, তা জেনে নিন।

ক্লাউড শেল শুরু করুন

যদিও আপনি আপনার ল্যাপটপ থেকে দূরবর্তীভাবে গুগল ক্লাউড পরিচালনা করতে পারেন, এই কোডল্যাবে আপনি গুগল ক্লাউড শেল ব্যবহার করবেন, যা ক্লাউডে চালিত একটি কমান্ড-লাইন পরিবেশ।

ক্লাউড শেল সক্রিয় করার আইকন

  1. গুগল ক্লাউড কনসোল খুলুন এবং উপরের ডানদিকের টুলবারে থাকা ক্লাউড শেল আইকনে ক্লিক করুন। এছাড়াও আপনি নিম্নলিখিত উপায়গুলোর যেকোনো একটিতে ক্লাউড শেল খুলতে পারেন:

ক্লাউড শেল সাধারণত এনভায়রনমেন্ট প্রোভিশন করতে এবং তার সাথে সংযোগ স্থাপন করতে কয়েক মুহূর্ত সময় নেয়। এই অপারেশনটি সম্পন্ন হলে, আপনি নিম্নলিখিতের মতো আউটপুট দেখতে পাবেন:

গুগল ক্লাউড শেল টার্মিনাল দেখাচ্ছে যে পরিবেশটি সংযুক্ত হয়েছে।

৩. কম্পিউট ইঞ্জিন ভিএম তৈরি করুন

এই অংশে, gcloud কমান্ড-লাইন টুল ব্যবহার করে একটিমাত্র Compute Engine ভার্চুয়াল মেশিন (VM) তৈরি করুন। 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. আপনার গুগল ক্লাউড অ্যাকাউন্ট ব্যবহার করে সাইন ইন করুন এবং ডিফল্ট প্রজেক্টটি কনফিগার করুন।
    gcloud auth login
    gcloud config set project $PROJECT
    
  3. আইডেন্টিটি-অ্যাওয়ার প্রক্সি (IAP) ব্যবহার করে আপনার VM-এ SSH সংযোগের অনুমতি দিতে, একটি ফায়ারওয়াল নিয়ম তৈরি করুন।
    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. যেহেতু ভিএমটি কোনো পাবলিক আইপি অ্যাড্রেস ছাড়া তৈরি করা হয়েছে, তাই ভিএমটিকে এক্সটার্নাল প্যাকেজ রিপোজিটরি অ্যাক্সেস করতে এবং প্রয়োজনীয় সফটওয়্যার ডাউনলোড করার সুযোগ দিতে একটি ক্লাউড রাউটার এবং ক্লাউড ন্যাট গেটওয়ে কনফিগার করুন।
    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. আপনার ভার্চুয়াল প্রাইভেট ক্লাউড (VPC) নেটওয়ার্কে একটি বৈধ ডিফল্ট ইন্টারনেট গেটওয়ে রুট আছে কিনা তা যাচাই করুন। ক্লাউড 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. প্রয়োজনীয় স্পেসিফিকেশন (১৬ vCPU, ২০ জিবি ব্যালেন্সড পারসিস্টেন্ট ডিস্ক, রকি লিনাক্স ৯) সহ কম্পিউট ইঞ্জিন ভিএম ইনস্ট্যান্সটি তৈরি করুন। উন্নততর নিরাপত্তার জন্য, --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
    

৪. ভিএম প্রস্তুত করুন

এই অংশে, আপনি আপনার সদ্য তৈরি করা ভিএম-এর সাথে সংযোগ স্থাপন করবেন এবং অপারেটিং সিস্টেমের পরিবেশ প্রস্তুত করবেন।

  1. IAP ব্যবহার করে SSH-এর মাধ্যমে VM-এর সাথে সংযোগ করুন। যেহেতু VM-টির কোনো পাবলিক IP অ্যাড্রেস নেই, gcloud স্বয়ংক্রিয়ভাবে SSH সংযোগটিকে IAP-এর মাধ্যমে টানেল করে।
    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
    

৫. AlloyDB Omni ইনস্টল করুন

ভিএম প্রস্তুত হয়ে গেলে, আপনি এখন প্যাকেজ রিপোজিটরি কনফিগার করতে এবং AlloyDB Omni RPM প্যাকেজটি ইনস্টল করতে পারেন।

  1. রিপোজিটরি কনফিগারেশন ফাইল তৈরি করে আপনার VM-এ YUM রিপোজিটরি কনফিগার করুন। $ALLOYDB_OMNI_REPOSITORY_URL এর জায়গায় আপনার প্রাপ্ত 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 প্যাকেজের ভার্সন ১৮ ইনস্টল করুন।
    sudo dnf install -y alloydbomni18
    

৬. একাধিক ইনস্ট্যান্স কনফিগার করুন

এই অংশে 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 ওভাররাইড ডিরেক্টরি এবং ফাইল তৈরি করুন। দ্রষ্টব্য: নিম্নলিখিত কনফিগারেশনগুলিতে (৪০%) ব্যবহৃত রিসোর্স সীমাগুলি উদাহরণস্বরূপ মান। আপনার নির্দিষ্ট ওয়ার্কলোড এবং ভিএম ক্ষমতার উপর ভিত্তি করে সীমাগুলি সামঞ্জস্য করুন 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
    

৭. ডাটাবেস প্রারম্ভিকীকরণ এবং প্রস্তুতকরণ

প্রতিটি ডাটাবেস ইনস্ট্যান্স আলাদাভাবে চালু ও প্রস্তুত করুন।

  1. সেটআপের জন্য SELinux-কে পারমিসিভ মোডে কনফিগার করুন।
    sudo setenforce 0
    
    সতর্কতা: SELinux-কে পারমিসিভ মোডে সেট করলে এনফোর্সমেন্ট নিষ্ক্রিয় হয়ে যায় এবং এটি সতর্কতার সাথে ব্যবহার করা উচিত। এই কোডল্যাবে ইনস্টলেশন সহজ করার জন্য এটি ব্যবহার করা হয়েছে। প্রোডাকশনে, AlloyDB Omni-কে এনফোর্সিং মোডে চালানোর জন্য উপযুক্ত SELinux পলিসি কনফিগার করুন। সেটআপের পরে sudo setenforce 1 কমান্ডটি চালিয়ে আপনি এনফোর্সমেন্ট পুনরায় সক্রিয় করতে পারেন।
  2. PostgreSQL postgres administrator ব্যবহারকারীর জন্য একটি শক্তিশালী পাসওয়ার্ড নির্ধারণ করুন। এই কোডল্যাবে উভয় ইনস্ট্যান্সের জন্যই এই পাসওয়ার্ডটি ব্যবহৃত হয়।
    export PGPASSWORD="YourStrongPassword123!"
    
    দ্রষ্টব্য: কোডল্যাবে সরলতার জন্য কমান্ড লাইনে এনভায়রনমেন্ট ভেরিয়েবল ব্যবহার করে পাসওয়ার্ড পাস করার পদ্ধতি (যেমন, PGPASSWORD=$PGPASSWORD ) এখানে ব্যবহার করা হয়েছে, কিন্তু এর ফলে প্রসেস লিস্টিং-এ পাসওয়ার্ডটি প্রকাশ হয়ে যেতে পারে। প্রোডাকশনের ক্ষেত্রে, .pgpass ফাইল বা সিক্রেট ম্যানেজারের মতো আরও সুরক্ষিত পদ্ধতি ব্যবহার করুন।

ইনস্ট১ সেট আপ করুন

  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
    

ইন্সট২ সেট আপ করুন

  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
    

৮. 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) দেখা যাচ্ছে।

৯. AlloyDB Omni ইনস্ট্যান্সগুলি যাচাই করুন

যাচাই করুন যে উভয় ইনস্ট্যান্সই সঠিকভাবে কাজ করছে এবং স্বাধীন।

  1. inst1 (পোর্ট 5433)-এর সাথে সংযোগ করুন। আপনাকে সেই পাসওয়ার্ডটি দিতে বলা হবে যা আপনি 'ডেটাবেস শুরু ও প্রস্তুত করুন' (Initialize and prepare databases) অংশে সেট করেছিলেন।
    /usr/lib/postgresql/18/bin/psql -h localhost -p 5433 -U postgres -W
    
  2. সংযোগ যাচাই করতে একটি কোয়েরি চালান।
    postgres=# SELECT version();
    
  3. ইনস্ট্যান্স থেকে সংযোগ বিচ্ছিন্ন করুন।
    postgres=# \q
    
  4. inst2 এর সাথে সংযোগ করুন (পোর্ট ৫৪৩৪)।
    /usr/lib/postgresql/18/bin/psql -h localhost -p 5434 -U postgres -W
    
  5. সংযোগ যাচাই করতে একটি কোয়েরি চালান।
    postgres=# SELECT version();
    
  6. ইনস্ট্যান্স থেকে সংযোগ বিচ্ছিন্ন করুন।
    postgres=# \q
    

১০. পিজিলজিক্যাল রেপ্লিকেশনের জন্য কনফিগার করুন

pglogical এক্সটেনশন ব্যবহার করে দুটি ইনস্ট্যান্সের মধ্যে লজিক্যাল রেপ্লিকেশন কনফিগার করুন। এই ক্ষেত্রে, inst1 প্রোভাইডার এবং inst2 সাবস্ক্রাইবার হিসেবে কাজ করে।

দ্রষ্টব্য: এই কোডল্যাবটি রেপ্লিকেশন কানেকশনের জন্য postgres সুপারইউজার ব্যবহার করে। প্রোডাকশন পরিবেশে, REPLICATION প্রিভিলেজসহ একটি ডেডিকেটেড রেপ্লিকেশন ইউজার তৈরি করুন এবং তাকে শুধুমাত্র রেপ্লিকেট করা টেবিলগুলোতে অ্যাক্সেস দিন।

pglogical-এর জন্য ইনস্ট্যান্সগুলি কনফিগার করুন

  1. inst1 এর জন্য shared_preload_libraries এ pglogical সক্রিয় করুন এবং 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 (প্রোভাইডার, পোর্ট 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 প্রোভাইডার নোডটি ইনিশিয়ালাইজ করুন।
    /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 সাবস্ক্রাইবার নোডটি ইনিশিয়ালাইজ করুন এবং 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!'
      );
    "
    
    দ্রষ্টব্য: সাবস্ক্রিপশন তৈরি করার পর প্রাথমিক সিঙ্ক্রোনাইজেশন সম্পন্ন হতে কিছুটা সময় লাগতে পারে।

১১. পিজিলজিক্যাল রেপ্লিকেশন যাচাই করুন

প্রোভাইডারে ডেটা ইনসার্ট করে এবং সাবস্ক্রাইবারে তা কোয়েরি করার মাধ্যমে রেপ্লিকেশনটি প্রত্যাশিতভাবে কাজ করছে কিনা তা যাচাই করুন।

  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 এ সন্নিবেশিত সারিটি আপনি দেখতে পাচ্ছেন কিনা তা নিশ্চিত করুন।

১২. পরিচ্ছন্নতা

রিসোর্সগুলো পরিষ্কার করুন। প্রথমে, ভিএম-এ থাকা 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
    

গুগল ক্লাউড রিসোর্স পরিষ্কার করুন

ইনস্ট্যান্সগুলো পরিষ্কার করার পর, Compute Engine VM এবং অন্যান্য রিসোর্সগুলো মুছে ফেলুন।

  1. SSH সেশন থেকে সংযোগ বিচ্ছিন্ন করুন।
    exit
    
  2. Compute Engine VM ইনস্ট্যান্সটি মুছে ফেলুন।
    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. ক্লাউড 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
    

১৩. অভিনন্দন

আপনি একটিমাত্র Compute Engine VM-এ একাধিক AlloyDB Omni ইনস্ট্যান্স সফলভাবে স্থাপন ও কনফিগার করেছেন।

আমরা যা আলোচনা করেছি

  • কীভাবে একটি Compute Engine VM প্রোভিশন এবং প্রস্তুত করতে হয়।
  • AlloyDB Omni RPM কীভাবে ইনস্টল করবেন
  • একাধিক ইনস্ট্যান্সের জন্য systemd টেমপ্লেট কীভাবে কনফিগার করবেন।
  • বিভিন্ন পোর্টে একাধিক স্বাধীন সার্ভিস কীভাবে ইনিশিয়ালাইজ, কনফিগার এবং চালু করতে হয়।
  • প্রতিটি দৃষ্টান্তের স্বাধীনতা কীভাবে যাচাই করা যায়।

আরও জানুন

  • ইনস্টলেশন এবং কনফিগারেশন সম্পর্কে আরও তথ্যের জন্য AlloyDB Omni ডকুমেন্টেশন দেখুন।
  • এই কোডল্যাবে ব্যবহৃত রেপ্লিকেশন এক্সটেনশন সম্পর্কে বিস্তারিত জানতে, pglogical ডকুমেন্টেশন দেখুন।