0Pricing
SQL Academy · บทเรียน

การจำลองแบบสตรีมมิงและ WAL

กำหนดค่าการจำลองแบบกายภาพผ่านสตรีมโดยอาศัย WAL ตรวจสอบความล่าช้า และตั้งค่าแบบจำลองแบบซิงโครนัสสำหรับการเขียนที่ไม่สูญเสียข้อมูล

การจำลองแบบสตรีมมิงและ WAL เป็นบทเรียน SQL Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน SQL Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส SQL Academy มีบทเรียนทั้งหมด 4 บทเรียน

เหตุใดจึงทำการจำลองข้อมูล

การจำลองข้อมูลช่วยตอบโจทย์หลายด้านพร้อมกัน:

  • HA — ทำงานต่อได้เมื่อเซิร์ฟเวอร์หลักขัดข้อง
  • การเพิ่มขนาดการอ่าน — แบ่งภาระคำสั่ง SELECT ไปยังแบบจำลอง
  • การสำรองข้อมูล / PITR — เก็บถาวรอย่างต่อเนื่อง
  • การกระจายตามภูมิศาสตร์ — มีแบบจำลองอยู่ใกล้ผู้ใช้

WAL: บันทึกการเขียนล่วงหน้า

การเขียนทุกครั้งจะไปที่ WAL ก่อน WAL รับประกันความคงทนของข้อมูลและเป็นพื้นฐานของการจำลองข้อมูล: สตรีม WAL ไปยังแบบจำลอง → แบบจำลองเล่น WAL ซ้ำ → แบบจำลองมีข้อมูลล่าสุด

การจำลองข้อมูลแบบสตรีมทางกายภาพ

สตรีม WAL จากเซิร์ฟเวอร์หลักไปยังแบบจำลองแบบไบต์ต่อไบต์:

  • แบบจำลองเป็นสำเนาไบนารีของเซิร์ฟเวอร์หลัก
  • ใช้เวอร์ชัน PostgreSQL เดียวกัน
  • จำลองทั้งคลัสเตอร์ รวมถึงฐานข้อมูลและตารางทั้งหมด
  • อ่านได้อย่างเดียว

การตั้งค่า: เซิร์ฟเวอร์หลัก

กำหนดค่าเซิร์ฟเวอร์หลักใน postgresql.conf:

wal_level = replica
max_wal_senders = 10
wal_keep_size = 1GB

-- pg_hba.conf: allow replication connections
host replication replicator 10.0.0.0/24 md5

การตั้งค่า: แบบจำลอง

สร้างข้อมูลสำรองพื้นฐาน แล้วเริ่มทำงานด้วย primary_conninfo:

pg_basebackup -h primary -D /var/lib/postgresql/data -U replicator -W -X stream -P

-- postgresql.conf on replica:
primary_conninfo = 'host=primary port=5432 user=replicator password=...'

-- Touch standby.signal file and start:
touch /var/lib/postgresql/data/standby.signal

แบบพร้อมกันเทียบกับแบบไม่พร้อมกัน

  • แบบไม่พร้อมกัน (ค่าเริ่มต้น) — เซิร์ฟเวอร์หลักยืนยันธุรกรรมโดยไม่รอ แบบจำลองอาจตามหลัง
  • แบบพร้อมกัน — เซิร์ฟเวอร์หลักจะรอให้แบบจำลองยืนยันก่อน COMMIT ไม่มีข้อมูลสูญหาย แต่ทำงานช้าลง
-- Synchronous configuration on primary:
synchronous_commit = on
synchronous_standby_names = 'replica1, replica2'

ความล่าช้าของการจำลองข้อมูล

แบบจำลองที่ทำงานแบบไม่พร้อมกันจะตามหลังเซิร์ฟเวอร์หลัก ควรตรวจสอบดังนี้:

SELECT client_addr, state, sent_lsn, write_lsn, replay_lsn,
       pg_wal_lsn_diff(sent_lsn, replay_lsn) AS replay_lag_bytes
FROM pg_stat_replication;

สล็อตการจำลองข้อมูล

สล็อตช่วยให้เซิร์ฟเวอร์หลักเก็บ WAL ไว้จนกว่าแบบจำลองจะอ่านไปใช้:

SELECT pg_create_physical_replication_slot('replica1');

-- On replica:
primary_slot_name = 'replica1'

ข้อควรระวังของสล็อต

หากแบบจำลองตัดการเชื่อมต่อและไม่เชื่อมต่อกลับมา สล็อตของมันจะป้องกันการล้าง WAL ทำให้ดิสก์เต็ม ลบสล็อตที่ไม่ได้ใช้งาน:

SELECT pg_drop_replication_slot('replica1');

แบบจำลองข้อมูลต่อเนื่อง

แบบจำลองหนึ่งสามารถสตรีม WAL ต่อไปยังแบบจำลองอื่นได้เอง ซึ่งช่วยลดภาระของเซิร์ฟเวอร์หลัก

โหมดสแตนด์บายที่พร้อมอ่าน

โดยค่าเริ่มต้น แบบจำลองจะรับคำสั่งค้นหาแบบอ่านอย่างเดียว (hot_standby = on) คำสั่งอ่านที่ทำงานนานบนแบบจำลองอาจทำให้การเล่น WAL ซ้ำล่าช้า ควรปรับค่า max_standby_streaming_delay

การเลื่อนบทบาทเป็นเซิร์ฟเวอร์หลัก

หากต้องการให้แบบจำลองกลายเป็นเซิร์ฟเวอร์หลักใหม่:

pg_ctl promote -D /var/lib/postgresql/data

-- Or in SQL:
SELECT pg_promote();

สรุป

การจำลองข้อมูลแบบสตรีม = ส่ง WAL + เล่น WAL ซ้ำ

  • เป็นการจำลองทางกายภาพและมีไบนารีเหมือนกัน
  • ค่าเริ่มต้นเป็นแบบไม่พร้อมกัน ใช้แบบพร้อมกันเพื่อไม่ให้ข้อมูลสูญหาย
  • สล็อตช่วยเก็บ WAL แต่ต้องดูแลอย่างระมัดระวัง
  • การเลื่อนบทบาทจะเปลี่ยนแบบจำลองให้เป็นเซิร์ฟเวอร์หลัก

ตรวจสอบความเข้าใจ

ความเสี่ยงหลักของการไม่ใช้สล็อตการจำลองข้อมูลสำหรับแบบจำลองแบบสตรีมคืออะไร

คำถามที่พบบ่อย

บทเรียน “การจำลองแบบสตรีมมิงและ WAL” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การจำลองแบบสตรีมมิงและ WAL” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส SQL Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส SQL Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การจำลองแบบสตรีมมิงและ WAL”

กำหนดค่าการจำลองแบบกายภาพผ่านสตรีมโดยอาศัย WAL ตรวจสอบความล่าช้า และตั้งค่าแบบจำลองแบบซิงโครนัสสำหรับการเขียนที่ไม่สูญเสียข้อมูล คุณปฏิบัติ SQL Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน SQL Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน SQL Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน

บทเรียน “การจำลองแบบสตรีมมิงและ WAL” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน SQL Academy นี้ได้ไหม

ได้ บทเรียน SQL Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. การจำลองแบบสตรีมมิงและ WAL
  2. การจำลองแบบเชิงตรรกะสำหรับการแบ่งข้อมูล
  3. การสลับระบบสำรองและการเลือกผู้นำ (Patroni, Stolon)
  4. แบบจำลองสำหรับอ่านและการกำหนดเส้นทางการเชื่อมต่อ
← กลับไปที่ SQL Academy