จากคราวที่แล้วไดเขียนถึงเรื่องการสร้าง HA Storage ด้วย GlusterFS ไปแล้ว ในครั้งที่แล้วเรานำเอาพื้นที่จาก 2 Server มาทำ Replication กัน ซึ่งก็จะได้พื้นที่เท่าเดิมเพราะเสียพื้นที่ในการทำ Mirroring และ Replication ครั้งนี้จะมารวมพื้นที่จาก Server 4 เครื่องเพื่อสร้าง Distributed Storage กันในแบบจริงๆ จังๆ ครับ และที่สำคัญใน How-to นี้ไม่ได้ทำ HA หรือ fault tolerance นะครับ หากต้องการทำ HA และ Replication ให้อ่านจากบทความในตอนที่แล้ว ก่อนลงมือทำมาทำความเข้าใจกันก่อน ครั้งนี้จะเป็นการนำเอา พื้นที่ Storage ทั้ง 4 Server มารวมกัน โดยนัยคือการแบ่งไฟล์ออกเป็นส่วนๆ กระจายเก็บลงไปใน Server ในเครือข่าย ซึ่งถ้าเครื่องใดเครื่องหนึ่งตาย ข้อมูลก็จะมีไม่ครบครับ สำหรับงานจริงควรใช้เน็ตเวิร์คขนาด 10 GigE ขึ้นไป ใช้ฮาร์ดแวร์แบบ x86_64 servers พร้อม SATA-II RAID และ Infiniband HBA. จึงจะได้ประสิทธิภาพสูง :)

มาดูโครงสร้างกัน เรามีเครื่อง Server ทั้งหมด 4 เครื่อง และเครื่อง Client 1 เครื่องดังนี้

Server 1 IP Address : 172.16.16.10 Domain Name : server1.example.com
Server 2 IP Address : 172.16.16.11 Domain Name : server2.example.com
Server 3 IP Address : 172.16.16.12 Domain Name : server3.example.com
Server 4 IP Address : 172.16.16.13 Domain Name : server4.example.com
Client 1 IP Address : 172.16.16.14 Domain Name : client1.example.com

เครื่องทุกเครื่องเชื่อมต่อกันในเครือข่ายอ้างอิงผ่าน hostname/domain name ได้ถูกต้อง Linux Distribution ที่ใช้เป็น Ubuntu 10.10 ใครใช้ Debian ก็จะสามารถใช้วิธีการเดียวกันได้ครับ :) เมื่อเตรียมทุกอย่างครบแล้วลงมากันได้!

เครื่อง Server 1-4 ให้ติดตั้ง GlusterFS Server ดังนี้

แปลงร่างเป็น root กันก่อน

sudo -s

จากนั้นติดตั้ง glusterfs-server ดังนี้

aptitude install glusterfs-server

จากนั้นสร้างไดเรคทอรีสำหรับเก็บข้อมูลดังนี้

mkdir /data/export
mkdir /data/export-ns

กรณีที่แบ่งพาร์ทิชั่นสำหรับเก็บข้อมูลให้ mout เป็น /data แล้วสร้างไดเรคทอรี /export แบะ /export-ns ขึ้นมา จากนั้นแก้ไข config ในส่วน glusterfs deamon ในไฟล์ /etc/glusterfs/glusterfsd.vol ดังนี้

volume posix
type storage/posix
option directory /data/export
end-volume

volume locks
type features/locks
subvolumes posix
end-volume

volume brick
type performance/io-threads
option thread-count 8
subvolumes locks
end-volume

volume server
type protocol/server
option transport-type tcp/server
option auth.addr.brick.allow 172.16.*
subvolumes brick
end-volume

ในส่วน option auth.addr.brick.allow 172.16.* หมายถึงให้เครื่องที่อยู่ในเครือข่าย 172.16.* สามารถ mount มายังเครื่องนี้ได้ เมื่อตั้งค่าได้แล้วให้ start services ของ glusterfs ดังนี้

/etc/init.d/glusterfs-server start

เมื่อติดตั้ง GlusterFS ได้ครบทุกเครื่องแล้ว มาดูต่อที่เครื่อง Client เพื่อใช้ในการ mount ใช้งานพื้นที่ Storage กันครับ เริ่มต้นด้วการติดตั้ง glusterfs srever และ gluster client ดังนี้

แปลงร่างเป็น root ก่อน

sudo -s

จากนั้นติดตั้ง package ดังนี้

aptitude install glusterfs-client glusterfs-server

สร้างไดเรดทอรีที่กำหนดจุด mount ดังนี้

mkdir /mnt/glusterfs

แก้ไขไฟล์ /etc/glusterfs/glusterfs.vol เพื่อกำหนดรูปแบบในการทำงานของ glusterfs client ดังนี้

volume remote1
type protocol/client
option transport-type tcp/client
option remote-host server1.example.com
option remote-subvolume brick
end-volume

volume remote2
type protocol/client
option transport-type tcp/client
option remote-host server2.example.com
option remote-subvolume brick
end-volume

volume remote3
type protocol/client
option transport-type tcp/client
option remote-host server3.example.com
option remote-subvolume brick
end-volume

volume remote4
type protocol/client
option transport-type tcp/client
option remote-host server4.example.com
option remote-subvolume brick
end-volume

volume stripe
type cluster/stripe
option block-size 1MB
subvolumes remote1 remote2 remote3 remote4
end-volume

volume writebehind
type performance/write-behind
option window-size 1MB
subvolumes stripe
end-volume

volume cache
type performance/io-cache
option cache-size 512MB
subvolumes writebehind
end-volume

เมื่อได้ config แล้วเราสามารถ mount เจ้า GlusterFS ได้ 2 วิธีครับ คือ

glusterfs -f /etc/glusterfs/glusterfs.vol /mnt/glusterfs

หรือ

mount -t glusterfs /etc/glusterfs/glusterfs.vol /mnt/glusterfs

เมื่อ mount ได้แล้วจะพบว่า เรามีพื้นที่เพิ่มเข้ามาในระบบดังนี้

/etc/glusterfs/glusterfs.vol 103G 3.2G 95G 4% /mnt/glusterfs

จาก config ข้างต้นผมมีพื้นที่เอาไว้สำหรับ GlusterFS อยู่ 26GB ทั้ง 4 Server ดังนั้นผมลัพท์การรวมพื้นที่จึงเป็น 26GB x 4

ทีนี้ให้ลองทดสอบ สร้างไฟล์เปล่าๆ ขึ้นมาสัก 1 ไฟล์ใหญ่ๆ ดังนี้

dd if=/dev/zero of=/mnt/glusterfs/test.img bs=1024k count=1000

จากคำสั่งข้างต้นเราสร้างไฟล์ขนาด 1 GB ขึ้นมา ให้ดุที่เครื่อง Server 1, 2, 3 และ 4 จะพบว่ามีไฟล์ test.img ในทุกเครื่องแต่ขนาดไฟล์ไม่เท่ากัน ซึ่งขึ้นอยู่กับการ strip ของ GlusterFS เอง ในครั้งหน้าเราจะมาใช้งาน Gluster Platform กันครับ ;)

Comments are closed.