วิธีกำหนดค่าการจำลองแบบสตรีมมิ่ง PostgreSQL 12 ใน CentOS 8
ฐานข้อมูล PostgreSQL รองรับโซลูชันการจำลองหลายอย่างเพื่อสร้างแอปพลิเคชันที่มีความพร้อมใช้งานสูง ปรับขนาดได้ และทนต่อข้อผิดพลาด หนึ่งในนั้นคือ Write-Ahead Log (WAL ) การส่งสินค้า. โซลูชันนี้ช่วยให้สามารถใช้งานเซิร์ฟเวอร์สแตนด์บายโดยใช้การจัดส่งบันทึกตามไฟล์หรือการจำลองแบบสตรีมมิ่ง หรือทั้งสองวิธีรวมกันหากเป็นไปได้
ด้วยการจำลองแบบสตรีมมิ่ง เซิร์ฟเวอร์ฐานข้อมูลสแตนด์บาย (ทาสการจำลอง) ได้รับการกำหนดค่าให้เชื่อมต่อกับเซิร์ฟเวอร์หลัก/เซิร์ฟเวอร์หลัก ซึ่งจะสตรีมบันทึก WAL ไปยังสแตนด์บายในขณะที่สร้างขึ้น โดยไม่ต้องรอ WAL ไฟล์ที่ต้องการกรอก
ตามค่าเริ่มต้น การจำลองแบบสตรีมมิ่งเป็นแบบอะซิงโครนัสโดยที่ข้อมูลถูกเขียนไปยังเซิร์ฟเวอร์สแตนด์บายหลังจากที่มีการทำธุรกรรมบนเซิร์ฟเวอร์หลัก ซึ่งหมายความว่า มีความล่าช้าเล็กน้อยระหว่างการทำธุรกรรมในเซิร์ฟเวอร์หลักและการเปลี่ยนแปลงที่มองเห็นได้ในเซิร์ฟเวอร์สแตนด์บาย ข้อเสียประการหนึ่งของแนวทางนี้คือ ในกรณีที่เซิร์ฟเวอร์หลักล่ม ธุรกรรมที่ไม่มีข้อผูกมัดใดๆ อาจไม่สามารถจำลองแบบได้ และอาจทำให้ข้อมูลสูญหายได้
คู่มือนี้จะแสดงวิธีตั้งค่าการจำลองแบบสตรีมมิงสแตนด์บายหลัก Postgresql 12 บน CentOS 8 เราจะใช้ “สล็อตการจำลอง ” สำหรับสแตนด์บายเป็นวิธีแก้ปัญหาเพื่อหลีกเลี่ยงไม่ให้เซิร์ฟเวอร์หลักรีไซเคิลเซ็กเมนต์ WAL เก่าก่อนที่จะได้รับสแตนด์บาย
โปรดทราบว่าเมื่อเปรียบเทียบกับวิธีอื่นๆ สล็อตการจำลองจะคงไว้เพียงจำนวนเซ็กเมนต์ที่ทราบว่าจำเป็นเท่านั้น
สภาพแวดล้อมการทดสอบ:
คู่มือนี้ถือว่าคุณเชื่อมต่อกับเซิร์ฟเวอร์ฐานข้อมูลหลักและเซิร์ฟเวอร์สำรองเป็นรูทผ่าน SSH (ใช้คำสั่ง Sudo ในกรณีที่จำเป็น หากคุณเชื่อมต่อในฐานะผู้ใช้ปกติที่มีสิทธิ์ของผู้ดูแลระบบ):
Postgresql master database server: 10.20.20.9
Postgresql standby database server: 10.20.20.8
เซิร์ฟเวอร์ฐานข้อมูลทั้งสองต้องติดตั้ง Postgresql 12 มิเช่นนั้น โปรดดูวิธีการติดตั้ง PostgreSQL และ pgAdmin ใน CentOS 8
หมายเหตุ: PostgreSQL 12 มาพร้อมกับการเปลี่ยนแปลงที่สำคัญในการใช้งานและการกำหนดค่าการจำลอง เช่น การแทนที่ recovery.conf และ การแปลงพารามิเตอร์ recovery.conf เป็นพารามิเตอร์การกำหนดค่า PostgreSQL ปกติ ทำให้กำหนดค่าการจำลองคลัสเตอร์ได้ง่ายขึ้นมาก
ขั้นตอนที่ 1: การกำหนดค่าเซิร์ฟเวอร์ฐานข้อมูล PostgreSQL Master/Primary
1. บนเซิร์ฟเวอร์หลัก ให้สลับไปที่บัญชีระบบ postgres และกำหนดค่าที่อยู่ IP ที่เซิร์ฟเวอร์หลักจะรับฟังการเชื่อมต่อจากไคลเอนต์
ในกรณีนี้ เราจะใช้ *
แปลว่าทั้งหมด
su - postgres
psql -c "ALTER SYSTEM SET listen_addresses TO '*';"
คำสั่ง ALTER SYSTEM SET SQL เป็นคุณลักษณะที่มีประสิทธิภาพในการเปลี่ยนแปลงพารามิเตอร์การกำหนดค่าของเซิร์ฟเวอร์ได้โดยตรงด้วยการสืบค้น SQL การกำหนดค่าจะถูกบันทึกไว้ในไฟล์ postgresql.conf.auto ซึ่งอยู่ที่รากของโฟลเดอร์ข้อมูล (เช่น /var/lib/pgsql/12/data/) และการอ่านเพิ่มเติม ไปยังไฟล์ที่เก็บไว้ใน postgresql.conf แต่การกำหนดค่าในไฟล์แรกจะมีความสำคัญมากกว่าการกำหนดค่าในไฟล์ในภายหลังและไฟล์อื่นๆ ที่เกี่ยวข้อง
2. จากนั้นสร้างบทบาทการจำลองที่จะใช้สำหรับการเชื่อมต่อจากเซิร์ฟเวอร์สแตนด์บายไปยังเซิร์ฟเวอร์หลัก โดยใช้โปรแกรม createuser ในคำสั่งต่อไปนี้ แฟล็ก -P
พร้อมต์ให้ใส่รหัสผ่านสำหรับบทบาทใหม่และ -e
สะท้อนคำสั่งที่ createuser สร้างและส่งไปยังเซิร์ฟเวอร์ฐานข้อมูล
su – postgres
createuser --replication -P -e replicator
exit
3. จากนั้นป้อนรายการต่อไปนี้ที่ส่วนท้ายของไฟล์การกำหนดค่าการตรวจสอบสิทธิ์ไคลเอ็นต์ /var/lib/pgsql/12/data/pg_hba.conf โดยตั้งค่าฟิลด์ฐานข้อมูลเป็น การจำลองแบบตามที่แสดงในภาพหน้าจอ
host replication replicator 10.20.20.8/24 md5
4. ตอนนี้รีสตาร์ทบริการ Postgres12 โดยใช้คำสั่ง systemctl ต่อไปนี้เพื่อใช้การเปลี่ยนแปลง
systemctl restart postgresql-12.service
5. ถัดไป หากคุณมีบริการ ไฟร์วอลล์ ทำงานอยู่ คุณจะต้องเพิ่มบริการ Postgresql ในการกำหนดค่าไฟร์วอลล์เพื่ออนุญาตคำขอจากเซิร์ฟเวอร์สแตนด์บายไปยังเซิร์ฟเวอร์หลัก
firewall-cmd --add-service=postgresql --permanent
firewall-cmd --reload
ขั้นตอนที่ 2: สร้างการสำรองข้อมูลฐานเพื่อบูตเซิร์ฟเวอร์สแตนด์บาย
6. ถัดไป คุณต้องทำการสำรองข้อมูลพื้นฐานของเซิร์ฟเวอร์หลักจากเซิร์ฟเวอร์สแตนด์บาย ซึ่งจะช่วยในการบูตเซิร์ฟเวอร์สแตนด์บาย คุณต้องหยุดบริการ postgresql 12 บนเซิร์ฟเวอร์สแตนด์บาย สลับไปที่บัญชีผู้ใช้ postgres สำรองข้อมูลไดเร็กทอรีข้อมูล (/var/lib/pgsql/12/data/) จากนั้นลบทุกอย่างที่อยู่ด้านล่าง ดังรูปก่อนทำการสำรองข้อมูลพื้นฐาน
systemctl stop postgresql-12.service
su - postgres
cp -R /var/lib/pgsql/12/data /var/lib/pgsql/12/data_orig
rm -rf /var/lib/pgsql/12/data/*
7. จากนั้นใช้เครื่องมือ pg_basebackup เพื่อทำการสำรองข้อมูลฐานด้วยความเป็นเจ้าของที่ถูกต้อง (ผู้ใช้ระบบฐานข้อมูล เช่น Postgres ภายใน บัญชีผู้ใช้ Postgres) และมีสิทธิ์ที่ถูกต้อง
ในคำสั่งต่อไปนี้ ตัวเลือก:
-h
– ระบุโฮสต์ซึ่งเป็นเซิร์ฟเวอร์หลัก-D
– ระบุไดเร็กทอรีข้อมูล-U
– ระบุผู้ใช้การเชื่อมต่อ-P
– เปิดใช้งานการรายงานความคืบหน้า-v
– เปิดใช้งานโหมดรายละเอียด-R
– เปิดใช้งานการสร้างการกำหนดค่าการกู้คืน: สร้างไฟล์ standby.signal และผนวกการตั้งค่าการเชื่อมต่อไปที่ postgresql.auto.conf ใต้ข้อมูล ไดเรกทอรี-X
– ใช้เพื่อรวมไฟล์บันทึกการเขียนล่วงหน้า (ไฟล์ WAL) ที่จำเป็นในการสำรองข้อมูล ค่าของสตรีมหมายถึงการสตรีม WAL ในขณะที่สร้างการสำรองข้อมูล-C
– เปิดใช้งานการสร้างสล็อตการจำลองที่ตั้งชื่อตามตัวเลือก -S ก่อนที่จะเริ่มการสำรองข้อมูล-S
– ระบุชื่อสล็อตการจำลอง
pg_basebackup -h 10.20.20.9 -D /var/lib/pgsql/12/data -U replicator -P -v -R -X stream -C -S pgstandby1
exit
8. เมื่อกระบวนการสำรองข้อมูลเสร็จสิ้น ไดเร็กทอรีข้อมูลใหม่บนเซิร์ฟเวอร์สแตนด์บายควรมีลักษณะเช่นนี้ในภาพหน้าจอ standby.signal ถูกสร้างขึ้น และการตั้งค่าการเชื่อมต่อจะถูกผนวกเข้ากับ postgresql.auto.conf คุณสามารถแสดงรายการเนื้อหาได้โดยใช้คำสั่ง ls
ls -l /var/lib/pgsql/12/data/
ทาสการจำลองจะทำงานในโหมด “Hot Standby ” หากพารามิเตอร์ hot_standby ถูกตั้งค่าเป็นเปิด (ค่าเริ่มต้น) ใน postgresql.conf และ มีไฟล์ standby.signal อยู่ในไดเร็กทอรีข้อมูล
9. กลับมาที่เซิร์ฟเวอร์หลักแล้ว คุณควรจะเห็นสล็อตการจำลองชื่อ pgstandby1 เมื่อคุณเปิดมุมมอง pg_replication_slots ดังต่อไปนี้
su - postgres
psql -c "SELECT * FROM pg_replication_slots;"
exit
10. หากต้องการดูการตั้งค่าการเชื่อมต่อต่อท้ายไฟล์ postgresql.auto.conf ให้ใช้คำสั่ง cat
cat /var/lib/pgsql/12/data/postgresql.auto.conf
11. ตอนนี้ให้เริ่มการทำงานของฐานข้อมูลปกติบนเซิร์ฟเวอร์สแตนด์บายโดยเริ่มบริการ PostgreSQL ดังต่อไปนี้
systemctl start postgresql-12
ขั้นตอนที่ 3: การทดสอบการจำลองแบบสตรีมมิ่ง PostgreSQL
12. เมื่อสร้างการเชื่อมต่อสำเร็จระหว่างอุปกรณ์หลักและสแตนด์บาย คุณจะเห็นกระบวนการรับ WAL ในเซิร์ฟเวอร์สแตนด์บายพร้อมสถานะสตรีมมิ่ง คุณสามารถตรวจสอบได้ โดยใช้มุมมอง pg_stat_wal_receiver
psql -c "\x" -c "SELECT * FROM pg_stat_wal_receiver;"
และกระบวนการส่ง WAL ที่สอดคล้องกันในเซิร์ฟเวอร์หลัก/เซิร์ฟเวอร์หลักที่มีสถานะการสตรีมและ sync_state ของ async คุณสามารถตรวจสอบมุมมอง pg_stat_replication pg_stat_replication ได้
psql -c "\x" -c "SELECT * FROM pg_stat_replication;"
จากภาพหน้าจอด้านบน การจำลองแบบสตรีมมิ่งเป็นแบบอะซิงโครนัส ในส่วนถัดไป เราจะสาธิตวิธีการเลือกเปิดใช้งานการจำลองแบบซิงโครนัส
13. ตอนนี้ให้ทดสอบว่าการจำลองทำงานได้ดีหรือไม่โดยการสร้างฐานข้อมูลทดสอบในเซิร์ฟเวอร์หลักและตรวจสอบว่ามีอยู่ในเซิร์ฟเวอร์สแตนด์บายหรือไม่
[master]postgres=# สร้างฐานข้อมูล tecmint;
[สแตนด์บาย] postgres=# \l
ทางเลือก: การเปิดใช้งานการจำลองแบบซิงโครนัส
14. การจำลองแบบซิงโครนัสนำเสนอความสามารถในการส่งธุรกรรม (หรือเขียนข้อมูล) ไปยังฐานข้อมูลหลักและสแตนด์บาย/จำลองพร้อมกัน เป็นการยืนยันว่าธุรกรรมจะสำเร็จก็ต่อเมื่อการเปลี่ยนแปลงทั้งหมดที่ทำโดยธุรกรรมถูกโอนไปยังเซิร์ฟเวอร์สแตนด์บายแบบซิงโครนัสตั้งแต่หนึ่งเซิร์ฟเวอร์ขึ้นไป
หากต้องการเปิดใช้งานการจำลองแบบซิงโครนัส จะต้องตั้งค่า synchronous_commit เป็นเปิดด้วย (ซึ่งเป็นค่าเริ่มต้น จึงไม่จำเป็นต้องมีการเปลี่ยนแปลงใดๆ) และคุณยังต้องตั้งค่าพารามิเตอร์ synchronous_standby_names ด้วย เป็นค่าที่ไม่ว่างเปล่า สำหรับคำแนะนำนี้เราจะตั้งค่าให้ทั้งหมด
psql -c "ALTER SYSTEM SET synchronous_standby_names TO '*';"
15. จากนั้นโหลดบริการ PostgreSQL 12 อีกครั้งเพื่อใช้การเปลี่ยนแปลงใหม่
systemctl reload postgresql-12.service
16. ตอนนี้เมื่อคุณสอบถามกระบวนการส่ง WAL บนเซิร์ฟเวอร์หลักอีกครั้ง ควรแสดงสถานะของการสตรีมและ sync_state เป็น < แข็งแกร่ง>ซิงค์
psql -c "\x" -c "SELECT * FROM pg_stat_replication;"
เรามาถึงจุดสิ้นสุดของคู่มือนี้แล้ว เราได้แสดงวิธีการตั้งค่าการจำลองการสตรีมฐานข้อมูลสแตนด์บายหลัก PostgreSQL 12 ใน CentOS 8 นอกจากนี้เรายังครอบคลุมถึงวิธีการเปิดใช้งานการจำลองแบบซิงโครนัสในคลัสเตอร์ฐานข้อมูล PostgreSQL
การจำลองแบบมีประโยชน์หลายประการ และคุณสามารถเลือกโซลูชันที่ตรงกับสภาพแวดล้อมด้าน IT และ/หรือข้อกำหนดเฉพาะแอปพลิเคชันของคุณได้เสมอ หากต้องการรายละเอียดเพิ่มเติม ไปที่ Log-Shipping Standby Servers ในเอกสารประกอบ PostgreSQL 12