Archive for September, 2014

0193 | bonding config บน debian/ubuntu

Thursday, September 18th, 2014 Posted in IP Network, Linux | No Comments »

ก่อนอื่น

อย่าลืมลง ifenslave-2.6 !!!

แก้ไฟล์ /etc/network/interfaces ประมาณนี้ฮะ

auto lo
iface lo inet loopback

auto eth0
    iface eth0 inet manual
    bond-master bond0

auto eth1
    iface eth1 inet manual
    bond-master bond0

auto bond0
    iface bond0 inet static
    address 192.0.2.1
    netmask 255.255.255.0
    gateway 192.0.2.254
    bond-mode 802.3ad 
    bond-miimon 100
    bond-downdelay 200
    bond-updelay 200
    bond-xmit-hash-policy layer3+4
    bond-slaves none

แล้วก็ไฟล์ /etc/modprobe.d/bonding.conf ประมาณนี้ครับ

alias bond0 bonding
options bonding mode=4 miimon=100 lacp_rate=1

0192 | ตั้งค่าการ backup ของ bacula (ซักที)

Thursday, September 18th, 2014 Posted in Linux | No Comments »

หลังจากลง software ครบหมดแล้วก็ได้เวลาสั่งให้ bacula backup ข้อมูลกันจริงๆ จังๆ แล้วครับ หลังจากนี้ก็อยู่ที่เครื่อง director อย่างเดียวแล้วครับ ไม่ต้องไปไหนแล้ว (ยกเว้นเพิ่มเครื่อง storage หรือ client ก็ไปลงตามขั้นตอนการตั้งค่าแต่ละอันอีกที)

ในการนี้ แนะนำให้สร้างไฟล์ใหม่ขึ้นมา 1 file เป็นชื่อ /etc/bacula/clients/clientname.conf (แทนที่ clientname เป็นชื่อ client นะครับ) เริ่มทีละขั้นนะครับ

เชื่อมต่อ director หา client

Client {
  Name = bclient1
  Address = 192.0.2.1
  FDPort = 9102
  Catalog = MyCatalog
  Password = "bacula-dir-fd"
  File Retention = 30 days
  Job Retention = 2 months
  AutoPrune = yes
}

Name กับ Password ตั้งให้ตรงกับที่ในฝั่ง Client นะครับ แล้วก็แก้ IP ให้ถูกด้วย (ความจริงเค้าแนะนำให้ตั้งเป็น dns name นะ)

ตั้งพื้นที่เก็บข้อมูล

Pool {
  Name = bclient1-pool
  Pool Type = Backup
  Recycle = yes
  AutoPrune = yes
  Volume Retention = 60 days
  Maximum Volume Bytes = 50G
  Maximum Volumes = 20
  LabelFormat = "bclient1-"
}

แนวคิดมันคือการเตรียมพื้นที่สำหรับการเก็บ backup ครับ โดยแบ่งเป็น volume (image file) ขนาดไฟล์ไม่เกิน Maximum Volume Bytes และมีได้ไม่เกิน Maximum Volumes ไฟล์ จากตัวอย่างคือกันพื้นที่ไว้ 1TB (เอาจริงๆ กันไว้เยอะไปนะ 555) และตัวมันเองจะบันทึกแบบกล้องวงจรปิดครับ คือพอเต็มปุ๊ปมันจะไปลบไฟล์อันที่เก่าสุดออกจากระบบ แต่ไม่ต้องกลัวมันลบมั่วนะครับ ถ้าไฟล์เก่าสุดยังต้องใช้ในการ restore อยู่มันจะไม่ลบ แล้วเมลมาด่าว่าพื้นที่เต็มแทน (ฮา)

ตั้งรายการ file ที่จะ backup

ตลกนิดหน่อยตรงที่มันมาตั้งที่ director นี่แหละครับ

FileSet {
  Name = "PleskHostingData"
  Include {
    Options {
      signature = SHA1
      onefs = no
      noatime = yes
      compression = GZIP
    }
    Options {
      RegexDir = "^/var/www/vhosts/system/.*/logs"
      RegexDir = "^/var/www/vhosts/.*/logs"
      RegexDir = "/wp-content/cache/"
      exclude = yes
    }
    File = /etc
    File = /var/www/vhosts
    File = /var/qmail/mailnames
    File = /var/backup/mysql
  }
}

ตัวอย่างนี้เป็นการตั้งค่า backup ของ plesk ครับ โดยข้ามไฟล์ log ทั้งหมด เก็บไฟล์เฉพาะส่วนของเว็บ และอีเมลลูกค้า แล้วไปเอาไฟล์จาก database ที่ backup แยกไว้มารวมด้วย

ตั้งเวลา backup อัตโนมัติ

Schedule {
  Name = "WeeklyCycle"
  Run = Full 1st sun at 00:05
  Run = Differential 2nd-5th sun at 00:05
  Run = Incremental mon-sat at 00:05
}

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

  1. backup เต็มรูปแบบทุกวันอาทิตย์แรกของเดือน ตอน 00.05 น.
  2. backup แบบ differential เทียบกับตัว full ทุกวันอาทิตย์ครั้งที่ 2 ถึง 5 ของเดือน (เดือนนึงคงมีวันอาทิตย์ได้ไม่เกิน 5 ครั้ง ครั้งแรก backup full ครั้งที่ 2 diff)
  3. backup แบบ incremental วันอื่นๆ

เผื่อใครจะลืม backup แต่ละแบบต่างกันยังไงดูได้ที่วิธีติดตั้ง bacula ครับ

ประกาศงาน backup

อันนี้เป็นการสร้างการ backup จริงๆ แล้วครับ จะมี 2 ส่วนคือประกาศวิธีการ backup กับประกาศการ backup เอง ประมาณนี้

JobDefs {
  Name = "bclient1-jobdefs" # ตั้งเอาเองได้เลยครับ ให้ตรงกับด้านล่าง
  Type = Backup
  Level = Incremental
  Client = bclient1 # ระบุชื่อ client ที่จะ backup
  FileSet = "PleskHostingData" # ระบุชื่อ FileSet ตามด้านบน
  Schedule = "WeeklyCycle" # ระบุชื่อ Schedule ตามด้านบน
  Storage = bacula-sd # ระบุชื่อ Bacula Storage Server ตามที่ได้ config ไว้
  Messages = Standard
  Pool = bclient1-pool # ระบุชื่อ Pool ตามด้านบน
  Priority = 10
  Write Bootstrap = "/var/spool/bacula/%c.bsr"
}

Job {
  Name = "bclient1-backup"
  JobDefs = "bclient1-jobdefs" # ตรงกับ Name ของ JobDefs ด้านบน
}

ประกาศงาน restore

มีงานสำหรับ backup ก็ต้องมีสำหรับ restore ครับ จริงๆ เป็นค่าที่ตั้งไว้รอเฉยๆ เผื่อเรียกใช้จะได้สะดวก

Job {
  Name = "bclient1-restore"
  Type = Restore
  Client = bclient1 # ระบุชื่อ client ปลายทางที่จะให้ restore ไป
  FileSet = "PleskHostingData" # รายการไฟล์
  Storage = bacula-sd # ที่เก็บข้อมูล ว่าไปอ่านมาจากไหน
  Pool = Default
  Messages = Standard
  Where = /tmp/bacula-restores # folder ปลายทางที่จะให้ restore ให้ (สมมติ backup จาก /var/www ไฟล์จะไปอยู่ใน /tmp/bacula-restores/var/www เป็นต้น)
}

เสร็จแล้วครับ !!!!


ข้ามไปยัง

Tags: ,