มีระบบสำรองข้อมูลมากมาย แต่จะทำอย่างไรถ้าเซิร์ฟเวอร์ที่ให้บริการกระจัดกระจายไปตามภูมิภาคและไคลเอนต์ที่แตกต่างกัน และคุณต้องดำเนินการกับระบบปฏิบัติการล่ะ
ช่วงบ่ายที่ดี ฮอร์นบีม!
ฉันชื่อนาตาเลีย ฉันเป็นหัวหน้าทีมกลุ่มผู้ดูแลระบบแอปพลิเคชันที่ NPO Krista เราเป็น Ops สำหรับกลุ่มโครงการของบริษัทเรา เรามีสถานการณ์ที่ค่อนข้างพิเศษ: เราติดตั้งและบำรุงรักษาซอฟต์แวร์ของเราทั้งบนเซิร์ฟเวอร์ของบริษัทและบนเซิร์ฟเวอร์ที่อยู่ที่ไซต์ของลูกค้า ในกรณีนี้ไม่จำเป็นต้องสำรองข้อมูลทั้งเซิร์ฟเวอร์ เฉพาะ “ข้อมูลสำคัญ” เท่านั้นที่สำคัญ: DBMS และไดเร็กทอรีระบบไฟล์แต่ละรายการ แน่นอนว่าลูกค้ามี (หรือไม่มี) กฎเกณฑ์ในการสำรองข้อมูลของตนเอง และมักจะจัดเตรียมพื้นที่จัดเก็บข้อมูลภายนอกบางประเภทสำหรับจัดเก็บข้อมูลสำรองไว้ที่นั่น ในกรณีนี้ หลังจากสร้างข้อมูลสำรองแล้ว เราจะตรวจสอบให้แน่ใจว่าได้ส่งไปยังที่จัดเก็บข้อมูลภายนอก
ในบางครั้ง เพื่อจุดประสงค์ในการสำรองข้อมูล เราได้ใช้สคริปต์ทุบตี แต่เมื่อตัวเลือกการกำหนดค่าเพิ่มขึ้น ความซับซ้อนของสคริปต์นี้ก็เพิ่มขึ้นตามสัดส่วน และเมื่อถึงจุดหนึ่ง เราก็มาถึงความจำเป็นในการ "ทำลายมันลงบนพื้น แล้วจากนั้น …”.
โซลูชันสำเร็จรูปไม่เหมาะสมด้วยเหตุผลหลายประการ: เนื่องจากความจำเป็นในการกระจายการสำรองข้อมูล, ข้อกำหนดในการจัดเก็บข้อมูลสำรองไว้ในเครื่องที่ไคลเอ็นต์, ความซับซ้อนของการตั้งค่า, การทดแทนการนำเข้า, ข้อจำกัดในการเข้าถึง
สำหรับเราดูเหมือนว่าการเขียนบางอย่างของเราเองง่ายกว่า ในขณะเดียวกัน ฉันก็อยากได้สิ่งที่เพียงพอสำหรับสถานการณ์ของเราในอีก N ปีข้างหน้า แต่มีความเป็นไปได้ที่จะขยายขอบเขตออกไป
เงื่อนไขของงานมีดังนี้:
- อินสแตนซ์การสำรองข้อมูลพื้นฐานเป็นแบบอัตโนมัติและทำงานภายในเครื่อง
- การจัดเก็บข้อมูลสำรองและบันทึกจะอยู่ภายในเครือข่ายของลูกค้าเสมอ
- อินสแตนซ์ประกอบด้วยโมดูล - ประเภทของ "ตัวสร้าง"
- จำเป็นต้องมีความเข้ากันได้กับลินุกซ์รุ่นปัจจุบัน รวมถึงรุ่นที่ล้าสมัยด้วย ดังนั้นจึงควรใช้ข้ามแพลตฟอร์มที่เป็นไปได้
- หากต้องการทำงานกับอินสแตนซ์ การเข้าถึงผ่าน ssh ก็เพียงพอแล้ว ไม่จำเป็นต้องเปิดพอร์ตเพิ่มเติม
- ความง่ายในการติดตั้งและการใช้งานสูงสุด
- เป็นไปได้ (แต่ไม่จำเป็น) ที่จะมีอินสแตนซ์แยกต่างหากที่ช่วยให้คุณสามารถดูสถานะของการสำรองข้อมูลจากเซิร์ฟเวอร์ต่างๆ จากส่วนกลางได้
คุณสามารถดูสิ่งที่เราเกิดขึ้นได้ที่นี่:
ซอฟต์แวร์นี้เขียนด้วย python3; ทำงานบน Debian, Ubuntu, CentOS, AstraLinux 1.6
เอกสารประกอบถูกโพสต์ในไดเร็กทอรี docs ของที่เก็บ
แนวคิดพื้นฐานที่ระบบทำงาน:
การกระทำ - การกระทำที่ใช้การดำเนินการแบบอะตอมมิกเดียว (การสำรองฐานข้อมูล การสำรองไดเรกทอรี การถ่ายโอนจากไดเรกทอรี A ไปยังไดเรกทอรี B ฯลฯ ) การดำเนินการที่มีอยู่จะอยู่ในไดเร็กทอรี core/actions
งาน - งานชุดของการดำเนินการที่อธิบาย "งานสำรองข้อมูล" แบบลอจิคัลหนึ่งรายการ
กำหนดการ – กำหนดการ ชุดของงานที่มีตัวเลือกบ่งชี้เวลาดำเนินการของงาน
การกำหนดค่าการสำรองข้อมูลจะถูกจัดเก็บไว้ในไฟล์ yaml โครงสร้างการกำหนดค่าทั่วไป:
- การตั้งค่าทั่วไป
- ส่วนการกระทำ: คำอธิบายการกระทำที่ใช้บนเซิร์ฟเวอร์นี้
- ส่วนกำหนดการ: คำอธิบายของงานทั้งหมด (ชุดของการดำเนินการ) และกำหนดเวลาสำหรับการเปิดตัวโดย cron หากจำเป็นต้องมีการเปิดตัวดังกล่าว
แอปพลิเคชันสามารถทำอะไรได้บ้างในปัจจุบัน:
- รองรับการดำเนินการหลักสำหรับเรา: การสำรองข้อมูล PostgreSQL ผ่าน pg_dump, การสำรองข้อมูลไดเรกทอรีระบบไฟล์ผ่าน tar; การดำเนินการกับที่จัดเก็บข้อมูลภายนอก rsync ระหว่างไดเรกทอรี การหมุนเวียนข้อมูลสำรอง (การลบสำเนาเก่า)
- เรียกสคริปต์ภายนอก
- การดำเนินการด้วยตนเองของงานแยกต่างหาก
/opt/KristaBackup/KristaBackup.py run make_full_dump
- คุณสามารถเพิ่ม (หรือลบ) งานเดียวหรือกำหนดการทั้งหมดลงใน crontab
/opt/KristaBackup/KristaBackup.py enable all
- สร้างไฟล์ทริกเกอร์ตามผลการสำรองข้อมูล ฟังก์ชันนี้มีประโยชน์เมื่อใช้ร่วมกับ Zabbix สำหรับการตรวจสอบการสำรองข้อมูล
- สามารถทำงานในพื้นหลังใน webapi หรือโหมดเว็บได้
/opt/KristaBackup/KristaBackup.py web start [--api]
ความแตกต่างระหว่างโหมดต่างๆ: webapi ไม่มีเว็บอินเตอร์เฟส แต่แอปพลิเคชันตอบสนองต่อคำขอจากอินสแตนซ์อื่น สำหรับโหมดเว็บ คุณต้องติดตั้ง flask และแพ็คเกจเพิ่มเติมหลายรายการ ซึ่งไม่เป็นที่ยอมรับในทุกที่ เช่น ใน AstraLinux SE ที่ได้รับการรับรอง
คุณสามารถดูสถานะและบันทึกการสำรองข้อมูลของเซิร์ฟเวอร์ที่เชื่อมต่อผ่านเว็บอินเทอร์เฟซ: “อินสแตนซ์เว็บ” ร้องขอข้อมูลจาก “อินสแตนซ์สำรอง” ผ่าน API การเข้าถึงเว็บต้องได้รับอนุญาต แต่การเข้าถึง webapi ไม่ต้องได้รับอนุญาต
บันทึกการสำรองข้อมูลที่ไม่ถูกต้องจะถูกทำเครื่องหมายเป็นสี: คำเตือน – สีเหลือง, ข้อผิดพลาด – สีแดง
หากผู้ดูแลระบบไม่ต้องการเอกสารสรุปเกี่ยวกับพารามิเตอร์และระบบปฏิบัติการเซิร์ฟเวอร์เป็นเนื้อเดียวกัน คุณสามารถคอมไพล์ไฟล์และแจกจ่ายแพ็คเกจสำเร็จรูปได้
เราเผยแพร่ยูทิลิตี้นี้ผ่าน Ansible เป็นหลัก โดยเผยแพร่ไปยังเซิร์ฟเวอร์ที่สำคัญน้อยที่สุดบางเซิร์ฟเวอร์ก่อน และหลังจากการทดสอบไปยังเซิร์ฟเวอร์ที่เหลือทั้งหมด
ผลก็คือ เราได้รับยูทิลิตี้การทำสำเนาขนาดกะทัดรัดแบบสแตนด์อโลนที่สามารถทำงานอัตโนมัติและสามารถใช้งานได้แม้กระทั่งผู้ดูแลระบบที่ไม่มีประสบการณ์ก็ตาม สะดวกสำหรับเรา - บางทีมันอาจจะมีประโยชน์สำหรับคุณเช่นกัน?
ที่มา: will.com