0188 | Bacula : ระบบ backup ข้อมูลสุดเมพ… รึเปล่าวะ?

วันก่อน… (ช่วงปลายเดือนที่แล้ว) รื้อระบบ backup server ใหม่ขนานใหญ่ครับ ตัดสินใจเอา bacula มาลงหลังจากทำใจอยู่นาน …. สาเหตุไม่ใช่อะไร config ยากมาก… มันโยงกันอีรุงตุงนังมากจนขี้เกียจจะหัด แต่ก็ต้องใช้อะนะครับ เพราะมันเมพขริงๆ

ก่อนอื่นอธิบายก่อน Bacula คือระบบ backup ข้อมูล “ผ่าน network” แบบ open source ซึ่งแบ่งการทำงานออกเป็น 3 ส่วนใหญ่ๆ ดังนี้

  • Director: เป็นตัวควบคุมหลักของ bacula เลย การตั้งค่าแทบทุกอย่างจะอยู่ตรงนี้
  • Storage: ไว้เก็บข้อมูลครับ สามารถมีหลายๆ เครื่องได้ แล้วก็ตั้งค่าแยกให้แต่ละ client ไปเก็บแยกกันแต่ละ storage อีกที
  • Client: อันนี้เอาไว้ลงที่ server ที่จะ backup ข้อมูลครับ

โดยหลักการของ bacula มันคือการทำอะไรคล้ายๆ กับ rsync ครับ แต่มีลูกเล่นมากกว่าตรงที่ข้อมูลใหม่จะไม่เขียนทับข้อมูลเก่า กรณีไฟล์เปลี่ยนแปลงก็สามารถตรวจเจอได้ทั้งหมด และเลือกย้อนไปวันไหนก็ได้เท่าที่มีการ backup ไว้โดยไม่มีการ backup ซ้ำถ้าไฟล์ไม่เปลี่ยนแปลง ซึ่งการ backup นี้จะมีทั้งหมด 3 แบบครับ

  • Full: ตรงตัวครับ เก็บใหม่ทุกอย่างไม่สนว่าเคยมีอะไรแล้วบ้าง
  • Differential: นับจากการรันแบบ Full ครั้งล่าสุด มาจนถึงตอนที่รัน backup ว่ามีอะไรเปลี่ยนแปลงบ้าง
  • Incremental: นับจากการ backup ครั้งสุดท้าย (ไม่ว่า mode ไหน) มีอะไรเปลี่ยนแปลงบ้าง

เริ่มติดตั้งกันเลยดีกว่า

ก่อนอื่น เนื่องจาก centos 5,6 แถม bacula version เก่าไปนิดนึงครับ ปัจจุบัน 7.0 แล้ว แต่เราจะใช้ประมาณ 5.2 ก็พอ (เท่ากับ centos 7) ก็ติดตั้ง repository เพิ่มดังนี้

  • wget -O /etc/yum.repos.d/epel-bacula.repo https://repos.fedorapeople.org/repos/slaanesh/bacula/epel-bacula.repo

เรียบร้อยแล้วก็สั่งติดตั้ง director ที่เครื่องควบคุมได้เลยครับ … เครื่องนี้ไม่ต้องมี disk / ram เยอะก็ได้ เพราะมันมีไว้คุมชาวบ้านอย่างเดียว

  • yum install bacula-console bacula-director

ที่เครื่อง storage สั่งติดตั้ง bacula storage ตามนี้ครับ

  • yum install bacula-storage

แล้วก็ที่เครื่อง client (ที่จะถูก backup) สั่งติดตั้ง client ตามนี้ครับ

  • yum install bacula-client

ตั้งค่า Director และเชื่อมต่อฐานข้อมูล

เหมือนผมจะลืมบอกว่า bacula ใช้ mysql เป็น backend ในการเก็บข้อมูลการทำงานนะฮะ (แป่ว) ถ้ายังไม่ได้ติดตั้งก็ติดตั้งเพิ่ม แล้วสร้างฐานข้อมูลชื่อ bacula + user/pass สำหรับเข้าฐานข้อมูลนี้ไว้ให้เรียบร้อย

แล้วก็ ถ้าใช้ mysql 5.5 อาจเจอปัญหาเล็กน้อยตอนสร้างตารางครับ วิธีแก้ (ต่อให้ไม่ได้ใช้ mysql 5.5 ก็ทำได้) คือ เปิดไฟล์ /usr/libexec/bacula/make_mysql_tables ขึ้นมา เลื่อนลงมาแถวๆ บรรทัดที่ 355 จะเจออะไรประมาณนี้

CREATE TABLE Counters (
   Counter TINYBLOB NOT NULL,
   MinValue INTEGER DEFAULT 0,
   MaxValue INTEGER DEFAULT 0,
   CurrentValue INTEGER DEFAULT 0,
   WrapCounter TINYBLOB NOT NULL,
   PRIMARY KEY (Counter(128))
   );

แก้เป็นแบบนี้

CREATE TABLE Counters (
   Counter TINYBLOB NOT NULL,
   \`MinValue\` INTEGER DEFAULT 0,
   \`MaxValue\` INTEGER DEFAULT 0,
   CurrentValue INTEGER DEFAULT 0,
   WrapCounter TINYBLOB NOT NULL,
   PRIMARY KEY (Counter(128))
   );

เสร็จแล้วสั่งสร้างตารางด้วยคำสั่ง /usr/libexec/bacula/make_mysql_tables ได้เลยครับ ประมาณนี้

  • /usr/libexec/bacula/make_mysql_tables -u DBUSER -p

แล้วก็ไป config กัน !


ข้ามไปยัง

Tags: , ,