ค้นหาเว็บไซต์

วิธีกำหนดค่าการจำลองแบบสตรีมมิ่ง 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