การจำลองแบบสตรีมมิงและ 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การจำลองแบบสตรีมมิงและ WAL
- การจำลองแบบเชิงตรรกะสำหรับการแบ่งข้อมูล
- การสลับระบบสำรองและการเลือกผู้นำ (Patroni, Stolon)
- แบบจำลองสำหรับอ่านและการกำหนดเส้นทางการเชื่อมต่อ