debian: เรื่องของ cache และ proxy

รวมเรื่องเกี่ยวกับ cache และ proxy

Topic: 

debian: ติดตั้ง flashcache

จะทดลองเพิ่มความเร็วฮาร์ดดิสก์ ลองซื้อ SSD ขนาด 60G มาตัวนึง เพื่อมาทำ cache

ได้ทดสอบ bcache แต่ไปไม่รอด มันต้องการเคอร์เนลใหม่เกินไป ทำให้กระทบส่วนอื่น ๆ ของเครื่อง จึงได้หันมาหา flashcache

สมบัติเครื่อง

  • debian wheezy/sid linux-image-3.2.0-3-amd64
  • ฮาร์ดดิสก์เก่า เป็น /dev/sda โดยเมานต์ /dev/sda6 เป็น /share และ /dev/sda8 เป็น /
  • SSD ใหม่ เป็น /dev/sdb และเพื่อป้องกันปัญหาของระบบ จึงเลือกแบ่งพาร์ติชั่นดังนี้
    • /dev/sdb5 ขนาด 16G คัดลอกมาจาก /dev/sda8
    • /dev/sdb6 ขนาด 4G ทำ swap
    • /dev/sdb7 ขนาด 40G ทำ cache ให้กับ /dev/sda6 (sda6 มี UUID="fcc7ad22-4bee-408b-998b-25351c89e7d4")

วิธีการ

ติดตั้งแพคเก็จที่จำเป็น

# aptitude install dkms build-essential linux-headers-`uname -r`

ดาวน์โหลด flashcache และคอมไพล์

# cd /usr/src
# mkdir flashcache
# cd flashcache
# git clone https://github.com/facebook/flashcache.git
# cd flashcache
# make -f Makefile.dkms

เตรียม /dev/sdb

# fdisk -l /dev/sdb
Disk /dev/sdb: 60.0 GB, 60022480896 bytes
81 heads, 63 sectors/track, 22973 cylinders, total 117231408 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x58997006

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048   117231407    58614680    5  Extended
/dev/sdb5            4096    33558527    16777216   83  Linux
/dev/sdb6        33560576    41949183     4194304   82  Linux swap / Solaris
/dev/sdb7        41951232   117231407    37640088   83  Linux
# mkfs.ext4 /dev/sdb5	#(UUID="c1ba303d-bd4e-4473-9430-34d6b907bbdd")
# mkfs.ext4 /dev/sdb7
# mkswap /dev/sdb6

ตรวจ uuid

# blkid
/dev/sda5: UUID="ab04b1bc-d1d2-4bdd-8fda-7e2755c35271" TYPE="ext4" 
/dev/sda6: UUID="fcc7ad22-4bee-408b-998b-25351c89e7d4" TYPE="ext4" 
/dev/sda7: UUID="eb268873-fcb5-4d5c-b826-59b5fa339079" TYPE="swap" 
/dev/sda8: UUID="15c9a8a3-0449-458c-9564-0daff370a0d2" TYPE="ext4" 
/dev/sdb5: UUID="c1ba303d-bd4e-4473-9430-34d6b907bbdd" TYPE="ext4" 
/dev/sdb6: UUID="6cada279-d335-429f-ad72-69442de1ee08" TYPE="swap" 
/dev/sdb7: UUID="f06896fe-b3be-43a1-9230-2433c683ee2e" TYPE="ext4" 
# mkdir /mnt/tmp{1,2}
# mount /dev/sda8 /mnt/tmp1
# mount /dev/sdb5 /mnt/tmp2
# rsync -av --delete /mnt/tmp1/ /mnt/tmp2
# vi /mnt/tmp2/etc/fstab
...
#old /dev/sda8#UUID=15c9a8a3-0449-458c-9564-0daff370a0d2       /               ext4    errors=remount-ro 0    
UUID=c1ba303d-bd4e-4473-9430-34d6b907bbdd       /               ext4    errors=remount-ro 0
...
# umount /mnt/tmp{1,2}
# rm -rf /mnt/tmp{1,2}

วิธีสร้าง cache device (/dev/sdb7 เป็น cache ให้ /dev/sda6)

รีบูตไปที่ /dev/sdb5 โดยบูตเป็นแบบ recovery เข้า grub แล้วกด c

set root=(hd1,5)
linux /boot/vmlinuz-3.2.0-3-amd64 root=UUID=c1ba303d-bd4e-4473-9430-34d6b907bbdd ro single
initrd /boot/initrd.img-3.2.0-3-amd64
boot

ยกเลิกเมานต์ /dev/sda6

# umount /dev/sda6

ทำ /dev/sdb7 เป็น cache ให้ /dev/sda6 โดยทำให้เป็นแคชแบบ writeback

# flashcache_create -p back cache_dev /dev/sdb7 /dev/disk/by-uuid/fcc7ad22-4bee-408b-998b-25351c89e7d4

จะเกิด device ขึ้นมาอยู่ที่ /dev/mapper/cache_dev

แก้ไข /etc/fstab ให้มาใช้ cache device

# vi /etc/fstab
...
#UUID=fcc7ad22-4bee-408b-998b-25351c89e7d4       /share          ext4    defaults        0       2
/dev/mapper/cache_dev       /share          ext4    defaults        0       0
...

รีบูต
เสร็จแล้ว

วิธีลบ cache drive (กลับมาใช้ /dev/sda6 ดังเดิม)

รีบูตไปที่ /dev/sdb5 โดยบูตเป็นแบบ recovery
ยกเลิกเมานต์ /dev/mapper/cache_dev

# umount /dev/mapper/cache_dev

ยกเลิก cache drive

# flashcache_destroy /dev/sdb7

ลบ cache drive

# dmsetup remove cache_dev

แก้ /etc/fstab ให้กลับไปใช้ /dev/sda6

# vi /etc/fstab
...
UUID=fcc7ad22-4bee-408b-998b-25351c89e7d4       /share          ext4    defaults        0       2
#/dev/mapper/cache_dev       /share          ext4    defaults        0       0
...

รีบูต

ผลทดลอง

  • เร็วขึ้นแบบรู้สึกได้
  • เจอโหลด write back แบบหนักหน่วงแล้วอาจทำให้เครื่องหยุดได้
  • พารามิเตอร์ -p thru ยังใช้ไม่ได้

ที่มา

Topic: 

debian: ทำแคชให้ apt ด้วย apt-proxy

apt-proxy เป็นซอฟต์แวร์ที่ใช้เก็บแพคเกจ apt
ใครมีเครื่องลินุกส์ที่ใช้แพคเกจ apt ในหน่วยงานตั้งแต่สองเครื่องขึ้นไป
ควรติดตั้งไว้ที่เครื่องเซิร์ฟเวอร์เป็นอย่างยิ่งครับ

เอามาจาก : ThaiLinuxCafe - ทำแคชให้เดเบียนแพคเก็จด้วย apt-proxy
โฮมเพจอยู่ที่ : http://apt-proxy.sourceforge.net/
ขอไว้อาลัยและอุทิศกุศลแด่ : คูณ Manuel Estrada Sainz (ranty) และคุณ Andrés García (ErConde) ผู้พัฒนาด้วยครับ

ที่เครื่องเซิร์ฟเวอร์
สมมุติว่าเซิร์ฟเวอร์ชื่อ server1.example.com ไอพี 192.168.1.5

เริ่มติดตั้งด้วย
# aptitude install apt-proxy

ปรับตั้งแพคเกจนิดหน่อย
# vi /etc/apt-proxy/apt-proxy-v2.conf

...
max_age = 120d        ;; อายุแพคเกจในแคช ผมใช้ 360d
...
[debian]
backends =
        http://ftp.us.debian.org/debian
        ;;http://mirror.in.th/debian
        ...
...
[security]
backends =
        http://security.debian.org/debian-security
        ...
...
[ubuntu]
backends =
        http://th.archive.ubuntu.com/ubuntu        
        http://mirror.in.th/ubuntu/archive
        ...
...
[ubuntu-security]
backends = 
        http://security.ubuntu.com/ubuntu
...

ใช้งานได้แล้ว

ที่เครื่องลูกข่าย
เวลาเรียกใช้งานจากเครื่องลูก เราแก้ไขไฟล์ /etc/apt/sources.list ให้มาใช้ของเรา
$ sudo vi /etc/apt/sources.list

ถ้าเป็นเดเบียน

deb     http://server1.example.com:9999/debian/ etch main contrib non-free
deb-src http://server1.example.com:9999/debian/ etch main contrib non-free
deb     http://server1.example.com:9999/security/ etch/updates main contrib non-free
deb-src http://server1.example.com:9999/security/ etch/updates main contrib non-free

ถ้าเป็นอูบุนตู

deb     http://server1.example.com:9999/ubuntu/ edgy main restricted universe multiverse
deb-src http://server1.example.com:9999/ubuntu/ edgy main restricted universe multiverse
deb     http://server1.example.com:9999/ubuntu/ edgy-updates main restricted universe multiverse
deb-src http://server1.example.com:9999/ubuntu/ edgy-updates main restricted universe multiverse
deb     http://server1.example.com:9999/ubuntu-security/ edgy-security main restricted universe multiverse
deb-src http://server1.example.com:9999/ubuntu-security/ edgy-security main restricted universe multiverse

หมายเหตุ

  • ตรง server1.example.com อาจใช้เป็นเลขไอพี 192.168.1.5 ก็ได้
  • สำหรับเครื่องแม่ข่ายเอง อาจใช้ของตัวเองโดยเปลี่ยน server1.example.com เป็น localhost ก็ได้
  • หากมีเครื่องที่เป็น apt-proxy ต่อกัน ให้ตั้งค่า Backend ใน /etc/apt-proxy/apt-proxy-v2.conf ให้ชี้ไปที่ apt-proxy ตัวแรก ไม่ควรออกสู่ภายนอกด้วยตัวเอง จะมีปัญหาตายบ่อย
  • แพกเกจนี้ยังมีข้อผิดพลาดอยู่ เนื่องจากผู้พัฒนาเสียชีวิตไปเสียก่อน เมื่อเครื่องลูกข่ายรอนานผิดปกติ หรือเกิดข้อผิดพลาดขึ้น อาจต้องเริ่มเซอร์วิสที่เซิร์ฟเวอร์ใหม่บ้างเป็นบางครั้ง แต่ผมว่าคุ้มค่ากับการประหยัดแบนวิธครับ

ทำแคชให้ apt ด้วย approx

ทำแคชให้ apt ด้วย approx

approx เป็นซอฟต์แวร์ที่ใช้เก็บแพคเกจ deb ที่ apt จะมาเรียกไปติดตั้ง
ใครมีเครื่องลินุกส์ที่ใช้แพคเกจ apt ในหน่วยงานตั้งแต่สองเครื่องขึ้นไป ควรติดตั้งไว้ที่เครื่องเซิร์ฟเวอร์เป็นอย่างยิ่ง

จากการทดลองใช้งานพบว่า ช้ากว่า apt-proxy (ซึ่งช่วงหลังมีปัญหาตายบ่อยมาก) แต่เสถียรกว่าเยอะ
ใช้พอร์ต 9999 เป็นพอร์ตเดียวกับ apt-proxy ทำให้ปรับใช้แทน apt-proxy ได้อย่างง่ายดาย

เริ่มติดตั้ง

ที่เครื่องเซิร์ฟเวอร์
สมมุติว่าเซิร์ฟเวอร์ชื่อ server1.example.com ไอพี 192.168.1.5

เริ่มติดตั้งด้วย
# aptitude install approx

ปรับตั้งแพคเกจนิดหน่อย
# vi /etc/approx/approx.conf

...
#debian     http://ftp.debian.org/debian
debian     ftp://debianclub.org/debian
security   http://security.debian.org/debian-security
volatile   http://volatile.debian.org/debian-volatile
...

เริ่มใหม่
# /etc/init.d/approx restart
ใช้งานได้แล้ว

ที่เครื่องลูกข่าย
เวลาเรียกใช้งานจากเครื่องลูก เราแก้ไขไฟล์ /etc/apt/sources.list ให้มาใช้ของเรา
$ sudo vi /etc/apt/sources.list

ถ้าเป็นเดเบียน

deb     http://server1.example.com:9999/debian/ lenny main contrib non-free
deb-src http://server1.example.com:9999/debian/ lenny main contrib non-free
deb     http://server1.example.com:9999/security/ lenny/updates main contrib non-free
deb-src http://server1.example.com:9999/security/ lenny/updates main contrib non-free

เอามาจาก
debianadmin.com: Upgrade multiple debian systems with Approx

หมายเหตุ

  • ตรง server1.example.com อาจใช้เป็นเลขไอพี 192.168.1.5 ก็ได้
  • สำหรับเครื่องแม่ข่ายเอง อาจใช้ของตัวเองโดยเปลี่ยน server1.example.com เป็น localhost ก็ได้
  • หากย้ายจาก apt-proxy มาใช้ approx แทน มีวิธีประหยัดแบนด์วิธเล็กน้อย คือเปลี่ยนพอร์ต apt-proxy เป็น 9998 และตั้งค่าคลังแพกเกจให้ approx เรียกใช้ apt-proxy จากพอร์ต 9998 นี้แทน เช่น
    # vi /etc/approx/approx.conf
    debian      http://localhost:9998/debian
    security    http://localhost:9998/security
    volatile    http://localhost:9998/volatile

    เป็นต้น ใช้งานสักสองสามวัน จนคลังของ approx เต็ม แล้วจึงค่อยเปลี่ยนกลับ

Topic: