ซอฟต์แวร์ที่ใช้สำหรับการเซ็ตอัพเว็บคลัสเตอร์

ซอฟต์แวร์ที่ใช้มีดังนี้

    Pacemaker และ Corosync

       นำมาใช้เพื่อทำให้ระบบมีความคงอยู่สูง (High Availability) มีหน้าที่สำหรับสร้างไอพีเสมือน(Virtual IP) และตรวจสอบเซิร์ฟเวอร์ในระบบว่าปกติหรือไม่

    IPVS และ ldirectord

       IPVS (IP Virtual Server) ใช้สำหรับทำ Load Balance ในระดับเน็ตเวิร์กชั้นที่ 4 ส่วน ldirectord จะมีหน้าที่ส่งต่อการเรียกเว็บจากไคลเอนต์ไปยังเครื่องเซิร์ฟเวอร์ในระบบ

    Glusterfs

       ใช้สำหรับ sync ข้อมูลต่าง ๆ ในระบบเว็บคลัสเตอร์

    MySQL-Garela

       ใช้สำหรับ sync ข้อมูลในส่วนของระบบฐานข้อมูล

ขั้นตอนการติดตั้งระบบและตั้งค่าด้วย Ubuntu

[ทุกเครื่อง] ติดตั้งซอฟต์แวร์เพิ่มดังนี้ (ไม่รวม LAMP)

 ติดตั้งซอฟต์แวร์ผ่านระบบของ ubuntu ตามคำสั่งนี้

sudo apt-get install ldirectord pacemaker corosync glusterfs openntpd

 สำหรับ MySQL-Galera ต้องดาวน์โหลดมาติดตั้งเพิ่ม
 ทำการติดตั้งตามคำสั่งด้านล่าง

sudo apt-get remove mysql-server-5.1
sudo dpkg --force-overwrite  -i mysql-server-wsrep-5.1.58-21.1-amd64.deb
sudo dpkg -i galera-21.1.0-amd64.deb
sudo ln -s /etc/apparmor.d/usr.sbin.mysqld /etc/apparmor.d/disable/usr.sbin.mysqld


* เป็นการรวมเฉพาะขั้นตอนการติดตั้งซอฟต์แวร์เพิ่มเติมทั้งหมดก่อนที่จะกำหนดไอพีเพราะอาจทำให้ไม่สามารถเชื่อมต่อกับอินเตอร์เน็ตได้

การตั้งค่าข้อมูลพื้นฐานของทุกเครื่อง (ตัวอย่างจะเป็น 2 เครื่อง)

เครื่องที่ 1
Hostname: sv2
IP : 192.168.10.1

เครื่องที่ 2
Hostname : sv2
IP : 192.168.10.2

   ไฟล์ /etc/hosts ต้องมี hostname และไอพีของทุกเครื่องอยู่ด้วย

ตั้งค่าให้เวลาของเครื่องตรงกันทั้งหมด (NTP)

[ทุกเครื่อง] แก้ไขไฟล์ /etc/ntp.conf 

    โดยใส่เครื่องหมาย # ต้นบรรทัดที่มีคำว่า server ทั้งหมดและเพิ่มข้อมูลดังนี้

restrict 192.168.10.0 mask 255.255.255.0 nomodify notrap
server 127.127.1.0
fudge 127.127.1.0 stratum 10

[เครื่อง 1] สั่งรัน ntpd ด้วยคำสั่งนี้

sudo /etc/init.d/ntp start

[เครื่องอื่นๆ] ทำการ sync เวลาด้วยคำสั่งนี้

sudo ntpdate 192.168.10.1

การตั้งค่าเครื่องในระบบทำงานแบบ High Availability และ Load Balance

[เครื่อง 1] สร้างคีย์ของ Corosync

    ทำการสร้างคีย์ด้วยคำสั่งนี้จากนั้นทำการคัดลอกไฟล์คีย์ที่ได้ (/etc/corosync/authkey) ไปวางในทุกเครื่องและต้องกำหนดสิทธิ์เป็น 400 ด้วย

sudo corosync-keygen

[ทุกเครื่อง] Configure Corosync

    แก้ไขไฟล์ /etc/corosync/corosync.conf  โดยเปลียนข้อมูลเป็นดังนี้ เพื่อทำให้เครื่องในระบบทั้งหมดค้นหากันได้

bindnetaddr: 192.168.10.0

[ทุกเครื่อง] รัน Corosync ด้วยคำสั่งนี้

sudo /etc/init.d/corosync start

    หลังจากรันครบทุกเครื่องแล้วให้ใช้คำสั่งดังนี้เพื่อตรวจสอบว่าเครื่องทั้งหมดได้เชื่อมต่อกันหรือยัง

sudo crm status

[ทุกเครื่อง] แก้ปัญหาเรื่อง Arp สำหรับโหมด Direct Route

    แก้ไขไฟล์ /etc/sysctl.conf โดยเพิ่มข้อมูลดังนี้

net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.eth0.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.eth0.arp_announce = 2

[ทุกเครื่อง] เพิ่ม  lo:0

    แก้ไขไฟล์ /etc/network/interfaces (ต้องกำหนดไอพีสำหรับ eth0 ไว้ตามข้อมูลด้านบน ) โดยเพิ่มข้อมูลดังนี้

auto lo:0
iface lo:0 inet static
address 172.16.0.1
netmask 255.255.255.255
gateway 172.16.0.254

[ทุกเครื่อง] ตั้งค่า ldirectord

    สร้างไฟล์ /etc/ha.d/ldirectord.cf โดยให้มีข้อมูลดังนี้

checktimeout=3
checkinterval=5
autoreload=yes
logfile="/var/log/ldirectord.log"
quiescent=yes
virtual=172.16.0.1:80
        real=192.168.10.1:80 gate
        real=192.168.10.2:80 gate
        fallback=127.0.0.1:80
        service=http
        scheduler=rr
        protocol=tcp
        checktype=connect

    ยกเลิกการรัน ldirectord ทุกครั้งที่บูตระบบเพราะจะให้ pacemaker จัดการแทนด้วยคำสั่งนี้

sudo update-rc.d -f ldirectord remove

[เครื่องแรก] ตั้งค่า Pacemaker

    ทำการนำเข้าไฟล์ที่สร้างเพื่อใช้ตั้งค่าให้กับ Pacemaker ด้วยคำสั่งนี้

sudo crm edit

    ให้แก้ไขข้อมูลให้เป็นตามด่านล่าง
   
node sv1
node sv2
primitive ldirectord ocf:heartbeat:ldirectord \
        params configfile="/etc/ha.d/ldirectord.cf" \
        op monitor interval="15s" timeout="20s" \
        meta migration-threshold="10" target-role="Started"
primitive vip ocf:heartbeat:IPaddr2 \
        params ip="172.16.0.1" nic="eth0" cidr_netmask="32" broadcast="172.16.0.255" \            
        lvs_support="true" \
        op monitor interval="1s"
group group1 vip ldirectord
order ip_before_lvs inf: vip:start ldirectord:start
property $id="cib-bootstrap-options" \
        dc-version="1.0.9-da7075976b5ff0bee71074385f8fd02f296ec8a3" \
        cluster-infrastructure="openais" \
        expected-quorum-votes="2" \
        stonith-enabled="false" \
        no-quorum-policy="ignore"

การตั้งค่าให้ระบบใช้ไฟล์ร่วมกัน (Sync)

[ทุกเครื่อง] ตั้งค่า GlusterFS

    ต้องไดเรกทอรีสร้างที่เก็บไฟล์จริงและไดเรกทอรีที่สำหรับเป็น mount point โดยใช้คำสั่งดังนี้

sudo mkdir /export
sudo mkdir /mnt/glusterfs

    สั่งรัน glusterd และตั้งค่าให้ glusterd ทำงานทุกครั้งที่บูตระบบดังนี้

sudo /etc/init.d/glusterd start

[เครื่องแรก]  ตั้งค่า GlusterFS ให้ทำงานร่วมกันกับเครื่องอื่นๆ

    ตั้งค่าให้ระบบใช้ไฟล์ร่วมกันโดยใช่คำสั่งดังนี้

sudo gluster peer probe  sv2
sudo gluster volume create datafs replica 2 transport tcp sv1:/exportsv1 sv2:/exportsv2
sudo gluster volume start datafs

[ทุกเครื่อง] ตั้งค่าให้ระบบทำการ mount /mnt/glusterfs ทุกครั้งที่บูตระบบ

    ใช้คำสั่งดังนี้  

sudo update-rc.d glusterd defaults

 และแก้ไขไฟล์ /etc/fstab โดยเพิ่มข้อมูลดังนี้ (sv1 หมายถึง hostname ของแต่ละเครื่องต้องเปลี่ยนตามเครื่องนั้นๆ)

sv1:/datafs /mnt/glusterfs glusterfs defaults,_netdv 0 0

 ให้ใช้คำสั่งนี้เพื่อ mount

sudo mount -a

[ทุกเครื่อง] ตั้งค่าการเก็บ session ของ PHP และที่เก็บไฟล์ต่าง ๆ ของเว็บ (Apache)

    เพื่อทำให้ทุกเครื่องมีข้อมูลเว็บชุดเดียวกันเสมอ โดยใช้คำสั่งดังนี้

cd /mnt/glusterfs
sudo mv /var/www/html/ .
sudo mv /var/lib/php5/ .

การตั้งค่า MySQL-Galera มีฐานข้อมูลเหมือนกันทุกเครื่อง

[เครื่อง 1]  แก้ไขไฟล์ /etc/mysql/conf.d/wsrep.cnf โดยเพิ่มข้อมูลดังนี้

wsrep_provider=/usr/lib/galera/libgalera_smm.so
wsrep_cluster_address='gcomm://'

    ตั้งค่าฐานข้อมูลด้วยคำสั่งนี้  

sudo mysql -pmeroot -uroot -e "SET GLOBAL wsrep_cluster_address='gcomm://';"
sudo /etc/init.d/mysql restart


    * ในตัวอย่างนี้ MySQL มี user คือ root และรหัสผ่านคือ meroot

[เครื่องอื่นๆ] แก้ไขไฟล์ /etc/mysql/conf.d/wsrep.cnf โดยเพิ่มข้อมูลดังนี้


wsrep_provider=/usr/lib/galera/libgalera_smm.so
wsrep_cluster_address='gcomm://192.16.10.1:4567
   
    ตั้งค่าฐานข้อมูลด้วยคำสั่งนี้  

sudo mysql -pmeroot -uroot -e "SET GLOBAL wsrep_cluster_address='gcomm://192.168.10.1:4567';"
sudo /etc/init.d/mysql restart

การทดสอบระบบ  

    สามารถทดสอบได้โดยการเรียกเว็บผ่านไอพีเสมือน (VIP) ผ่านทางโปรแกรมเว็บเบราว์เซอร์

เอกสารอ้างอิง