Juju #04 – วิธีทำให้ WordPress กระจายงานไปยัง MySQL Slave ด้วย HyperDB

ต่อจาก Juju #03 – วิธีสร้าง Load Balance MySQL เมื่อมี MySQL Server มากกว่า 1 ตัว ซึ่งทำการ Replication กัน (ในตอนนี้ 2 ตัว คือ Master กับ Slave) ซึ่งให้ความสามารถในเรื่อง [1] Data-Security : เมื่อข้อมูลถูก Replicate ไปที่ Slave แล้ว เราสามารถหยุดการทำงานของ Slave เพื่อทำการสำรองข้อมูลได้ โดยไม่กระทบประสิทธิภาพการทำงานของ Master Analytics: ทำการวิเคราะห์ข้อมูลต่างๆได้ที่ Slave โดยไม่กระทบประสิทธิภาพการทำงานของ Master Scale-Out Solutions: เมื่อมี Slaves หลายตัว ทำให้สามารถกระจายงานในด้าน Read เพื่อเพิ่มประสิทธิภาพ โดยการแก้ไขข้อมูล จะทำที่ Master เท่านั้น ในบทความนี้ จะกล่าวถึงวิธีการ Scale-Out Solutions ของ WordPress เท่านั้น โดยใช้ Plugin ชื่อ HyperDB HyperDB [2] เป็น Database Class ที่ใช้แทนที WordPress built-in database functions โดยจะทำให้ WordPress สามารถติดต่อกับ MySQL ได้หลายเครื่อง โดยที่สามารถกำหนดได้ว่าจะ Write ไปยัง Master และ Read จากทั้ง Master และ Slaves อีกทั้งยังสามารถ Failover ได้อีกด้วย วิธีการติดตั้ง HyperDB ที่ WordPress ใช้คำสั่ง wget https://downloads.wordpress.org/plugin/hyperdb.1.2.zip sudo apt-get install unzip sudo unzip hyperdb.1.2.zip ย้ายไฟล์ hyperdb/db-config.php ไปยังที่ Directory เดียวกันกับ wp-config.php (ในที่นี้คื่อ /var/www/) sudo cp hyperdb/db-config.php /var/www ย้ายไฟล์ hyperdb/db.php ไปยังที่ Directory wp-content (ในที่นี้คื่อ /var/www/wp-content) sudo cp hyperdb/db.php /var/www/wp-content/ แก้ไขไฟล์ db-config.php (ในที่นี้คื่อ /var/www/db-config.php) [3] โดยค้นหาคำว่า DB_HOST ซึ่งควรจะปรากฏอยู่แค่ 2 แห่งในไฟล์ ให้ไปที่ชุดที่ 2 ซึ่งมีเนื้อหาประมาณนี้ จากนั้นแก้ไข DB_HOST ให้เป็น DB_SLAVE_1 ต่อไปก็ไปเพิ่ม define(‘DB_SLAVE_1′,’xxx.xxx.xxx.xxx’) ซึ่งไฟล์ wp-config.php หรือไม่ก็ wp-info.php (ในที่นี้อยู่ที่ /var/www/wp-info.php) เมื่อทดสอบใช้งาน พบว่า มี Query มาทั้งที่ master และ slave ในภาวะว่าง ในภาวะมีงานเข้ามา ทดสอบเพิ่มบทความใหม่ ชื่อ “This is my first article” พบว่า ระบบสามารถเขียนไปยัง Master แล้วสามารถส่งต่อไปให้ Slave ได้ ต่อไป เพิ่ม mysql-slave2 เข้าไปใน Juju และสร้าง Relation เป็น master -> Slave เช่นกัน แล้วทำการเพิ่ม DB_SLAVE_2 เข้าไปใน db-config.php และ wp-info.php ก็จะพบว่าข้อมูลได้ Replicate ไปหา Slave2 แล้ว และ เมื่อทำการ

Read More »

วิธีการอัพเกรด php 5.5.9 เป็น php 5.6 (หรือ 7.0) บน Ubuntu 14.04 และวิธีการสลับการทำงานระหว่างเวอร์ชั่น

บันทึกนี้สืบเนื่องจากต้องการอัพเกรดเวอร์ชั่น php เพื่อให้เครื่องเซิร์ฟเวอร์สามารถรองรับสคริปท์ WebApp php เวอร์ชั่นใหม่ที่สูงขึ้น คำเตือน! ควรทดลองทำในเครื่อง dev ดูก่อนอย่าทำบนเครื่องเซิร์ฟเวอร์จริงทันทีเดี๋ยวจะน้ำตาตก ควรทดสอบสคริปท์บนเครื่องทดสอบดูว่าสามารถทำงานได้ไม่มีปัญหาจะได้ไม่ต้องเสียเวลาแก้ไข เพราะตัวผมมั่วจนได้เรื่องบนเครื่องเซิร์ฟเวอร์จริงจนเกือบแก้ไม่ได้ T_T … มาเริ่มกันเลย

Read More »

ตั้งค่า iproute2 ให้ ubuntu server ที่มี 2 interfaces

ผมมี server สำหรับห้องบริการคอมพิวเตอร์ ที่ทำหน้าที่จ่าย dhcp IP และ cloning Windows และใช้ pGina for Windows ในการ Login ก่อนเข้าใช้เครื่อง เริ่มแรก server ก็มีการ์ดแลนเพียง 1 ใบ สำหรับห้องบริการคอมพิวเตอร์ห้องที่ 1 (eth0) ต่อมามีความต้องการให้ห้องบริการคอมพิวเตอร์ห้องที่ 2 ซึ่งจะเป็นอีก network ใช้ server ตัวเดียวกันนี้ด้วย จึงเพิ่มการ์ดแลนอีก 1 ใบ (eth1) ทำให้ตอนนี้มี eth0 และ eth1 ปัญหาคือ เมื่อ Windows ในห้องคอมฯ ห้องที่ 2 ตั้งค่า pGina RADIUS plugin ชี้ไปยัง IP ของ eth0 (192.168.99.20) ก็ทำงานไม่ได้ แต่ถ้าตั้งค่าชี้ไปยัง IP ของ eth1 (192.168.99.251) อย่างนี้ใช้งานได้ หรือใช้คำสั่ง ping 192.168.99.20 อย่างนี้ก็ไม่ได้ เช่นกัน จึงค้นหาคำตอบ google search อยู่หลายวัน มีบทความที่ให้คำตอบใกล้เคียงที่สุด แต่ผมก็ต้องมาแต่ง config ใหม่ จนสำเร็จ โดยหลักใหญ่ ๆ คือ เครื่อง server ที่มีการ์ดแลน 2 การ์ดนี้จะเรียกว่า multi-homed server จำเป็นจะต้องตั้งค่าเพิ่มโดยใช้ iproute2 ซึ่งมีให้แล้วบน ubuntu server ที่ผมทดสอบนี้คือ ubuntu server 16.04 ครับ คือ ปรกติแล้วเครื่อง 1 เครื่อง จะมี default gateway เพียง 1 เท่านั้น เราจะใช้ iproute2 เพื่อแยกให้มี gateway สำหรับ IP ของ eth0 และ eth1 เพิ่มขึ้น เรามาดูตัวอย่างกันครับ เครื่องที่ทดสอบ มี 2 subnets (อันนี้ที่ต้องใช้ /25 เพราะผมไม่มี net class C ถึง 2 net จึงไปขอความช่วยเหลือทีมเครือข่ายให้ช่วยแบ่งครึ่ง net class C ให้ครับ) 1. net 192.168.99.0/25 IP 192.168.99.1 – 192.168.99.126 broadcast 192.168.99.127 gateway 192.168.99.1 2. net 192.168.99.128/25 IP 192.168.99.129 – 192.168.99.254 broadcast 192.168.99.255 gateway 192.168.99.129   1. ตรวจสอบ network interfaces ได้ผลลัพธ์ดังนี้ root@ubuntu:~# ifconfig eth0 Link encap:Ethernet HWaddr 00:4d:60:1e:fb:ab inet addr:192.168.99.20 Bcast:192.168.99.127 Mask:255.255.255.128 eth1 Link encap:Ethernet HWaddr 00:04:a5:fd:a4:9c inet addr:192.168.99.251 Bcast:192.168.99.255 Mask:255.255.255.128 lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0   2. เพิ่ม 2 บรรทัดนี้ต่อท้ายในไฟล์ /etc/iproute2/rt_tables (ผมตั้งชื่อ routing table 1

Read More »

How to: SQL Server Failover Cluster

สิ่งที่ต้องมี Software Windows Server 2012 R2 Microsoft SQL Server 2016 รายละเอียดเพิ่มเติม Software Requirements Hardware เครื่องคอมพิวเตอร์อย่างน้อย 2 เครื่องสเป็คเดียวกัน (ในเอกสารนี้ใช้ 2 เครื่อง) ในเอกสารนี้ใช้ VMware ESXi รายละเอียดเพิ่มเติม Hardware Requirements เครื่องคอมพิวเตอร์ 1 เครื่องสำหรับเป็น iSCSI เซิร์ฟเวอร์ IP address สำหรับเครื่อง Server 2 เลข สำหรับ Microsoft failover cluster 1 เลข สำหรับ Microsoft SQL Server failover cluster 1 เลข ทุกไอพีต้องมีชื่อใน domain .psu.ac.th Shared Storage iSCSI (ในเอกสารนี้เลือกใช้ iSCSI) IP address สำหรับ  iSCSI Server หากมี shared storage อื่นๆ สามารถใช้ได้เลย Domain Account ติดต่อศูนย์คอมพิวเตอร์เพื่อขอสิทธิ์จอยโดเมน มีครบแล้วก็เริ่มกันเลย Shared Storage (iSCSI) (Windows Server 2012R2 Data center) เข้าระบบด้วยบัญชี administrator คลิกปุ่ม start พิมพ์ windows update เพื่อเปิดโปรแกรม windows update ให้ update ทุกอย่างให้เรียบร้อย (restart หากต้อง restart หากรีสตาร์ทกลับมาแล้วเข้าระบบด้วยผู้ใช้ administrator) เปิด Server Manager (ไอคอนแรกข้างปุ่ม start , โดยปกติจะถูกเรียกใช้งานโดยอัตโนมัติ) ที่ Dashboard มองไปที่ QUICK START ข้อ 2 Add roles and features คลิก คลิก Next เลือก Role-based of feature-based installation คลิก Next เลือก Select a server from the server pool เลือกเครื่องของเราในช่องด้านล่างคลิก Next มองหา File and Storage Services คลิกสามเหลี่ยมก็จะมี File and iSCSI Services ทำเครื่องหมายถูกหน้าข้อความ iSCSI Target Server จะมีหน้าต่าง สรุปการติดตั้งขึ้นมา คลิก Add Features คลิก Next ไปเรื่อยๆ จนเจอคำว่า Install คลิก Install รอจนกว่าจะติดตั้งเสร็จ (Installation succeeded on …) คลิก Close กลับมาที่ Server Manager คลิกที่ File and Storage Services คลิก iSCSI มองไปด้านขวาจะปุ่ม TASKS ให้คลิก TASKS เลือก New iSCSI Virtual Disk… จะมีหน้าต่าง New iSCSI Virtual Disk Wizard เลือก Type a custom path

Read More »