การจำลองแบบเชิงตรรกะด้วย AlloyDB Omni

1. บทนำ

Codelab นี้แสดงวิธีกำหนดค่าการจำลองแบบเชิงตรรกะระหว่างอินสแตนซ์ AlloyDB Omni ที่เป็นอิสระ คุณจะติดตั้งใช้งานอินสแตนซ์ AlloyDB Omni หลายรายการใน VM ของ Compute Engine รายการเดียว และตั้งค่าการจำลองแบบระหว่างอินสแตนซ์เหล่านั้นโดยใช้ส่วนขยาย pglogical

การเรียกใช้หลายอินสแตนซ์ในโหนดเดียวมีประโยชน์สำหรับการพัฒนา การทดสอบ หรือการจำลองสภาพแวดล้อมการจำลอง เมื่อสิ้นสุด Codelab นี้ คุณจะมีการตั้งค่าการจำลองแบบที่ใช้งานได้โดยมีอินสแตนซ์หนึ่งทำหน้าที่เป็นผู้ให้บริการและอีกอินสแตนซ์หนึ่งทำหน้าที่เป็นผู้ติดตาม

ข้อกำหนดเบื้องต้น

  • สิทธิ์เข้าถึงโปรเจ็กต์ Google Cloud และ Cloud Shell จาก Google Cloud Console
  • ติดตั้งและกำหนดค่า Google Cloud SDK (gcloud) แล้ว ดูรายละเอียดเกี่ยวกับการติดตั้ง gcloud ได้ที่ gcloud-install

สิ่งที่คุณจะได้เรียนรู้

  • วิธีสร้างและเตรียม VM ของ Compute Engine สำหรับอินสแตนซ์ AlloyDB Omni หลายรายการโดยใช้ gcloud
  • วิธีติดตั้ง RPM ของ AlloyDB Omni
  • วิธีกำหนดค่าและเริ่มต้นอินสแตนซ์ AlloyDB Omni หลายรายการโดยใช้systemdเทมเพลต
  • วิธีกำหนดค่าการจำลองแบบเชิงตรรกะระหว่างอินสแตนซ์ AlloyDB Omni โดยใช้ pglogical
  • วิธียืนยันการจำลองโดยการจำลองข้อมูลจากผู้ให้บริการไปยังผู้ติดตาม

สิ่งที่คุณต้องมี

  • รับลิงก์ URL ไปยัง RPM ของ AlloyDB Omni ระบบจะส่งลิงก์ไปยังอีเมลของคุณ ซึ่งรวมถึงลิงก์ไปยังเซิร์ฟเวอร์ URL ของที่เก็บ เริ่มต้นตัวแปรสภาพแวดล้อมต่อไปนี้เพื่อให้ URL พร้อมใช้งานในระหว่าง Codelab
    export ALLOYDB_OMNI_REPOSITORY_URL="..."
    
  • เทอร์มินัลที่ใช้งานได้ซึ่งมีสิทธิ์เข้าถึง Google Cloud คุณใช้ Cloud Shell เพื่อวัตถุประสงค์นี้ได้

2. การตั้งค่าและข้อกำหนด

การตั้งค่าโปรเจ็กต์

สร้างโปรเจ็กต์ Google Cloud

  1. ในคอนโซล Google Cloud ในหน้าตัวเลือกโปรเจ็กต์ ให้เลือกหรือสร้างโปรเจ็กต์ Google Cloud
  2. ตรวจสอบว่าได้เปิดใช้การเรียกเก็บเงินสำหรับโปรเจ็กต์ Cloud แล้ว ดูวิธีตรวจสอบว่าได้เปิดใช้การเรียกเก็บเงินในโปรเจ็กต์แล้วหรือไม่

เริ่มต้น Cloud Shell

แม้ว่าคุณจะใช้งาน Google Cloud จากระยะไกลจากแล็ปท็อปได้ แต่ใน Codelab นี้ คุณจะใช้ Google Cloud Shell ซึ่งเป็นสภาพแวดล้อมบรรทัดคำสั่งที่ทำงานในระบบคลาวด์

ไอคอนเพื่อเปิดใช้งาน Cloud Shell

  1. เปิด คอนโซล Google Cloud แล้วคลิกไอคอน Cloud Shell ในแถบเครื่องมือด้านขวาบน หรือจะเปิด Cloud Shell ด้วยวิธีใดวิธีหนึ่งต่อไปนี้ก็ได้

โดยปกติแล้ว Cloud Shell จะใช้เวลาสักครู่ในการจัดสรรและเชื่อมต่อกับสภาพแวดล้อม เมื่อการดำเนินการนี้เสร็จสมบูรณ์ คุณจะเห็นเอาต์พุตที่คล้ายกับเอาต์พุตต่อไปนี้

เทอร์มินัล Google Cloud Shell แสดงว่าสภาพแวดล้อมเชื่อมต่อแล้ว

3. สร้าง VM ของ Compute Engine

ในส่วนนี้ ให้สร้างเครื่องเสมือน (VM) ของ Compute Engine เครื่องเดียวโดยใช้เครื่องมือบรรทัดคำสั่ง gcloud ใช้รูปภาพ Rocky Linux 9 ซึ่งเข้ากันได้กับ RPM ของ AlloyDB Omni อย่างสมบูรณ์

  1. กำหนดตัวแปรสภาพแวดล้อมสำหรับรหัสโปรเจ็กต์ ชื่อ VM โซน และภูมิภาค
    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. หากต้องการอนุญาตการเชื่อมต่อ SSH กับ VM โดยใช้ Identity-Aware Proxy (IAP) ให้สร้างกฎไฟร์วอลล์
    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. เนื่องจาก VM สร้างขึ้นโดยไม่มีที่อยู่ IP สาธารณะ ให้กำหนดค่า Cloud Router และเกตเวย์ Cloud NAT เพื่อให้ VM เข้าถึงที่เก็บแพ็กเกจภายนอกและดาวน์โหลดซอฟต์แวร์ที่จำเป็นได้
    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. ตรวจสอบว่าเครือข่าย Virtual Private Cloud (VPC) มีเส้นทางเกตเวย์อินเทอร์เน็ตเริ่มต้นที่ถูกต้อง เส้นทางนี้จำเป็นสำหรับ 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. สร้างอินสแตนซ์ VM ของ Compute Engine โดยมีข้อกำหนดที่จำเป็น (16 vCPU, ดิสก์ถาวรที่มีการจัดสรรขนาด 20 GB, Rocky Linux 9) เพื่อเพิ่มความปลอดภัย ให้ใช้แฟล็ก --no-address เพื่อให้แน่ใจว่าระบบไม่ได้กำหนดที่อยู่ IP สาธารณะให้กับ VM
    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. หลังจากสร้าง VM แล้ว ให้ยืนยันสถานะของ VM
    gcloud compute instances list --filter="name=$INSTANCE_NAME" --project=$PROJECT
    

4. เตรียม VM

ในส่วนนี้ คุณจะเชื่อมต่อกับ VM ที่สร้างขึ้นใหม่และเตรียมสภาพแวดล้อมของระบบปฏิบัติการ

  1. เชื่อมต่อกับ VM ผ่าน SSH โดยใช้ IAP เนื่องจาก 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
    

5. ติดตั้ง AlloyDB Omni

เมื่อเตรียม VM แล้ว คุณจะกำหนดค่าที่เก็บแพ็กเกจและติดตั้งแพ็กเกจ AlloyDB Omni RPM ได้

  1. กำหนดค่าที่เก็บ YUM ใน VM โดยสร้างไฟล์การกำหนดค่าที่เก็บ แทนที่ $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 เวอร์ชัน 18
    sudo dnf install -y alloydbomni18
    

6. กำหนดค่าหลายอินสแตนซ์

ในส่วนนี้ ให้กำหนดค่าอินสแตนซ์ 2 รายการ ได้แก่ 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. สร้างไดเรกทอรีข้อมูลสำหรับทั้ง 2 อินสแตนซ์และตั้งค่าความเป็นเจ้าของที่ถูกต้อง
    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. ไม่บังคับ: ตั้งค่าขีดจำกัดของทรัพยากรสำหรับแต่ละอินสแตนซ์ ซึ่งจะช่วยป้องกันไม่ให้อินสแตนซ์หนึ่งใช้ทรัพยากร VM ทั้งหมด สร้างsystemdไดเรกทอรีและไฟล์การลบล้างสำหรับทั้ง 2 อินสแตนซ์หมายเหตุ: ขีดจำกัดของทรัพยากรที่ใช้ในการกำหนดค่าต่อไปนี้ (40%) เป็นค่าตัวอย่าง ปรับขีดจำกัดตามภาระงานและความจุ VM ที่เฉพาะเจาะจงสำหรับ 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 เป็นโหมดที่อนุญาตจะปิดใช้การบังคับใช้และควรใช้อย่างระมัดระวัง ซึ่งใช้ใน Codelab นี้เพื่อลดความซับซ้อนในการติดตั้ง ในการใช้งานจริง ให้กำหนดค่านโยบาย SELinux ที่เหมาะสมสำหรับ AlloyDB Omni เพื่อให้ทำงานในโหมดบังคับใช้ คุณเปิดใช้การบังคับใช้อีกครั้งได้หลังการตั้งค่าโดยเรียกใช้ sudo setenforce 1
  2. กำหนดรหัสผ่านที่รัดกุมสำหรับผู้ใช้ผู้ดูแลระบบ postgres ของ PostgreSQL รหัสผ่านนี้ใช้ได้กับทั้ง 2 อินสแตนซ์ในโค้ดแล็บนี้
    export PGPASSWORD="YourStrongPassword123!"
    
    หมายเหตุ: การส่งรหัสผ่านโดยใช้ตัวแปรสภาพแวดล้อมในบรรทัดคำสั่ง (เช่น PGPASSWORD=$PGPASSWORD) ใช้ที่นี่เพื่อความสะดวกใน Codelab แต่การทำเช่นนี้อาจทำให้รหัสผ่านปรากฏในรายการกระบวนการ ในเวอร์ชันที่ใช้งานจริง ให้ใช้วิธีที่ปลอดภัยกว่า เช่น ไฟล์ .pgpass หรือ Secret Manager

ตั้งค่า inst1

  1. เริ่มต้นไดเรกทอรีฐานข้อมูลสำหรับ inst1
    sudo PGPASSWORD=$PGPASSWORD \
      PGDATA=/var/lib/alloydbomni/inst1 \
      /usr/lib/postgresql/18/bin/alloydbomni18-setup initdb
    
  2. กำหนดค่าอินสแตนซ์ให้รับฟังในพอร์ต 5433 โดยการอัปเดตไฟล์ postgresql.conf
    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 สำหรับทั้ง 2 อินสแตนซ์ได้แล้ว

  1. หากต้องการรับรู้การกำหนดค่าและการลบล้างใหม่ ให้โหลดการกำหนดค่าของ systemd Manager ซ้ำ
    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. ตรวจสอบว่าทั้ง 2 บริการทำงานอยู่
    sudo systemctl status alloydbomni18@inst1
    sudo systemctl status alloydbomni18@inst2
    
    ตรวจสอบว่าเอาต์พุตของทั้ง 2 รายการระบุ Active: active (running)

9. ยืนยันอินสแตนซ์ AlloyDB Omni

ตรวจสอบว่าอินสแตนซ์ทั้ง 2 รายการทำงานได้อย่างถูกต้องและเป็นอิสระต่อกัน

  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

กำหนดค่าการจำลองแบบเชิงตรรกะระหว่างอินสแตนซ์ทั้ง 2 โดยใช้ส่วนขยาย pglogical ในสถานการณ์นี้ inst1 จะทำหน้าที่เป็นผู้ให้บริการ และ inst2 จะทำหน้าที่เป็นผู้ติดตาม

หมายเหตุ: Codelab นี้ใช้postgresผู้ใช้ขั้นสูงสำหรับการเชื่อมต่อการจำลอง ในสภาพแวดล้อมฮาร์ดแวร์และซอฟต์แวร์ ให้สร้างผู้ใช้เรพลิเคชันเฉพาะที่มีสิทธิ์ REPLICATION และให้สิทธิ์เข้าถึงเฉพาะตารางที่กำลังเรพลิเคชัน

กำหนดค่าอินสแตนซ์สำหรับ pglogical

  1. เปิดใช้ pglogical ใน shared_preload_libraries และกำหนดค่าพารามิเตอร์การจำลองอื่นๆ ใน postgresql.conf สำหรับ inst1
    # 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. รีสตาร์ททั้ง 2 อินสแตนซ์เพื่อให้การเปลี่ยนแปลงการกำหนดค่ามีผล
    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. เริ่มต้นโหนดผู้ให้บริการ pglogical ใน inst1
    /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!'
      );
    "
    
    หมายเหตุ: หลังจากสร้างการติดตามแล้ว ระบบอาจใช้เวลาสักครู่ในการซิงค์ข้อมูลครั้งแรกให้เสร็จสมบูรณ์

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 ใน VM แล้วลบทรัพยากร Google Cloud

ทำลายอินสแตนซ์ AlloyDB Omni

ก่อนที่จะลบ VM คุณสามารถล้างข้อมูลอินสแตนซ์ 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

หลังจากล้างข้อมูลอินสแตนซ์แล้ว ให้ลบ VM ของ Compute Engine และทรัพยากรอื่นๆ

  1. ยกเลิกการเชื่อมต่อจากเซสชัน SSH
    exit
    
  2. ลบอินสแตนซ์ VM ของ 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. ขอแสดงความยินดี

คุณได้ติดตั้งใช้งานและกำหนดค่าอินสแตนซ์ AlloyDB Omni หลายรายการใน VM ของ Compute Engine เครื่องเดียวเรียบร้อยแล้ว

สิ่งที่เราได้พูดถึงไปแล้ว

  • วิธีจัดสรรและเตรียม VM ของ Compute Engine
  • วิธีติดตั้ง RPM ของ AlloyDB Omni
  • วิธีกำหนดค่าsystemdเทมเพลตสำหรับหลายอินสแตนซ์
  • วิธีเริ่มต้น กำหนดค่า และเริ่มบริการอิสระหลายรายการในพอร์ตต่างๆ
  • วิธียืนยันความเป็นอิสระของแต่ละอินสแตนซ์

ดูข้อมูลเพิ่มเติม