Cassandra #02 Scale-Out to Multi-nodes

ต่อจาก Cassandra #01 เริ่มต้นใช้งาน ความสามารถที่สำคัญของ Cassandra คือสามารถทำการ Scale Out หรือขยายความสามารถของระบบได้โดยการเพิ่มเครื่องคอมพิวเตอร์ในระดับ Commodity Hardware [1] เข้าไปใน Cluster ในบทความนี้ จะแสดงวิธีการสร้าง Cassandra Cluster ที่ประกอบไปด้วย 3 Node ชื่อ cassandra01, cassandra02 และ cassandra03 โดยมีชื่อ Cluster ว่า PSUCluster และกำหนดให้ cassandra01 เป็น Seed Node (ทำหน้าที่เป็นผู้ประสานงานสำหรับ Node ใหม่ๆเข้าร่วม Cluster) ขั้นตอนการขยายระบบแบบ Scale Out ไปยังหลายๆ Node แต่ละ Node ทำดังนี้ ติดตั้ง Cassandra ตามขั้นตอนใน Cassandra #01 เริ่มต้นใช้งาน แก้ไขไฟล์ /etc/cassandra/cassandra.yaml ดังนี้ # กำหนดชื่อ Cluster ที่ต้องการ cluster_name: ‘PSUCluster’ # กำหนด Seed Node ซึ่งมีไว้ให้ node ใหม่ประกาศตัวเองเพื่อเข้าร่วม Cluster # ควรมีไม่เกิน 3 Node ต่อ Data Center # ในที่นี้ กำหนดไว้เพียงตัวเดียว seed_provider: parameters: – seeds: “192.168.107.111” # กำหนด listen_address เป็นค่าว่าง listen_address: # กำหนด endpoint_snitch เป็น GossipingPropertyFileSnitch # เพื่อให้สามารถมี Cluster แบบข้าง Data Center ได้ endpoint_snitch: GossipingPropertyFileSnitch ในการเริ่มใช้งานครั้งแรก ให้ลบข้อมูลใน /var/lib/cassandra/data/system ออกก่อน sudo rm -rf /var/lib/cassandra/data/system/* ในการใช้ Endpoint Snitch แบบ GossipingPropertyFileSnitch ต้องลบไฟล์ cassandra-topology.properties ออกไปก่อน sudo rm /etc/cassandra/cassandra-topology.properties จากนั้นก็ Start Cassandra Service sudo service cassandra restart วิธีดูสถานะของระบบ sudo watch nodetool status ในตอนแรกจะเป็นแบบนี้ เมื่อ cassandra02 เข้ามา และเมื่อครบ 3 Node วิธี Debug ว่าเกิดอะไรขึ้น sudo tail -f /var/log/cassandra/debug.log   Reference [1] http://docs.datastax.com/en/landing_page/doc/landing_page/planning/planningHardware.html [2] http://docs.datastax.com/en/cassandra/3.0/cassandra/architecture/archIntro.html [3] https://docs.datastax.com/en/cassandra/3.0/cassandra/initialize/initSingleDS.html

Read More »

Cassandra #01 เริ่มต้นใช้งาน

Cassandra เป็นระบบ Database ที่เหมาะสำหรับการ Scalability และให้ High Availability โดยไปลดประสิทธิภาพ มีความทนทานสูง (Fault Tolerance) โดยสามารถใช้งานเครื่องคอมพิวเตอร์ทั่วไปๆ (Commodity Hardware) หรือ ใช้งาน Cloud Infrastructure สำหรับงานที่มีความสำคัญได้ (Mission Critical) สามารถกระจายสำเนา (Replication) ข้าม Data Center ได้อีกด้วย [1][3] ในบทความนี้ จะแสดงการติดตั้งบน Ubuntu 16.04 เพียงเครื่องเดียวก่อน และให้เห็นวิธีการติดต่อตัวฐานข้อมูล การส่ง Query เบื้องต้น # echo “deb http://www.apache.org/dist/cassandra/debian 310x main” | sudo tee -a /etc/apt/sources.list.d/cassandra.sources.list # curl https://www.apache.org/dist/cassandra/KEYS | sudo apt-key add – # sudo apt-get update # sudo apt-get install cassandra ต่อไป วิธีการส่งคำสั่งไปยัง Cassandra จะใช้งานผ่าน cqlsh (Cassandra Query Language Shell) # cqlsh -C Connected to Test Cluster at 127.0.0.1:9042. [cqlsh 5.0.1 | Cassandra 3.10 | CQL spec 3.4.4 | Native protocol v4] Use HELP for help. cqlsh> ใน Cassandra จะเรียก Database ว่า Keyspace วิธีที่จะดูว่ามี Keyspace อะไรอยู่บ้าง ใช้คำสั่ง [2] cqlsh> DESCRIBE keyspaces; system_schema system_auth system system_distributed system_traces สั่งสร้าง Keyspace ชื่อ test ด้วยคำสั่งต่อไปนี้ cqlsh> CREATE KEYSPACE test WITH REPLICATION = {‘class’ : ‘SimpleStrategy’, ‘replication_factor’ : 3}; เนื่องจาก Cassandra มีลักษณะพิเศษที่ไม่เหมือนกับ Database Servers อื่นๆ ก็คือเรื่องการ Replication ตั้งแต่เริ่มต้น ในคำสั่งข้างต้น จะบอกว่า ระบบจากสร้าง 3 สำเนา เป็นหลัก (จะกล่าวรายละเอียดในตอนต่อๆไป) ต่อไป สั่งสร้าง Table ชื่อ table1 csqlsh> use test; cqlsh:test> create table table1 ( … id text primary key, … age int, … firstname text, … lastname text … ); คำสั่งในการ Insert ข้อมูล cqlsh:test> INSERT INTO table1 (id, age, firstname, lastname) VALUES ( ‘000001’, 10, ‘John’,

Read More »

JMeter #01: การสร้าง Load Test เบื้องต้น

Apache JMeter เป็น Open Source Software ที่พัฒนาด้วย Java 100% ออกแบบมาใช้สำหรับการทดสอบโหลดของพฤติกรรมการใช้งาน และวัดประสิทธิภาพ เดิมใช้เพื่อทดสอบ Web Application แต่ปัจจุบันสามารถใช้งานทดสอบได้หลากหลายขึ้นด้วย อ่านเพิ่มเติม: http://jmeter.apache.org/index.html บทความที่เกี่ยวข้อง: https://sysadmin.psu.ac.th/?s=jmeter ในการใช้งานทั่วไปเบื้องต้น สามารถอ่านได้จาก การติดตั้งโปรแกรมตรวจสอบประสิทธิภาพ Server : Apache JMeter บนเครื่อง Windows   การวัดประสิทธิภาพ (Performance Test) [1] แบ่งออกเป็น Performance Testing Load Testing Stress Testing ในที่นี้จะใช้ JMeter ในการทำ Load Testing โดยจะทดสอบ Web Application ตามเป้าหมายต่อไปนี้ ทดสอบกับ Web Page ที่ตั้งไว้ ซึ่งประกอบด้วยภาพจำนวนมาก จำนวน Connection ต่อวินาที ในระดับต่างๆ ในแต่ระดับ จะมีหยุดรอ 10 วินาที ก่อนจะยกระดับที่สูงขึ้น ขั้นตอนการใช้งาน JMeter สร้าง Load Testing เนื่องจากการทดสอบจะยิงไปที่ Web Page เดียวกันตลอด จึงสร้าง HTTP Request Default เพื่อให้ง่ายต่อการเปลี่ยนแปลง โดยคลิกขวาที่ Test Pane เลือก Add > Config Element > HTTP Request Default ใน HTTP Request Default กรอก Server Name or IP Port Number Path ตามต้องการ เช่น ต้องการทดสอบ http://192.168.107.107:80/wordpress/?p=4 คลิกขวาที่ Test Plan เลือก Add > Threads (Users) > Thread Group กรอก Name และ Number of Threads (users) ในตัวอย่างนี้ ตั้งค่า Number of Threads (users) เป็น 10 และ Ramp-Up Period (in seconds) เป็น 1 เพราะต้องการให้ทดสอบระบบว่า เมื่อ มีผู้ใช้ใช้งานพร้อมกัน 10 คนในวินาทีเดียวกันนั้น ระบบจะตอบสนองอย่างไร คลิกขวาที่ Thread Group นี้ (ตอนนี้จะเปลี่ยนชื่อจาก Thread Group เป็น 10 แล้ว) แล้วเลือก Add > Sampler > Http Request ในส่วนนี้ ไม่ต้องแก้ไขอะไร โดย JMeter จะไปเอาค่าที่ตั้งไว้ใน HTTP Request Default ข้างต้นมาใช้ ต่อไป เป็นส่วนของการแสดงผล คลิกขวาที่ Test Plan เลือก Add > Listener > Summary Report ต่อไป ใส่ Timer เพื่อให้ระบบ หยุดพักการทดสอบ เมื่อทำแต่ละ Thread Group เสร็จ เป็นเวลา 10 วินาที ก่อนจะเริ่ม Thread Group ต่อไป คลิกขวาที่ Test Plan เลือก Add > Timer

Read More »

Private Cloud with Juju and LXD Workshop

::Juju:: Juju #01 เริ่มต้นใช้งาน Juju Juju #02 วิธีติดตั้ง WordPress Juju #03 วิธีสร้าง Load Balance MySQL Juju #04 วิธีทำให้ WordPress กระจายงานไปยัง MySQL Slave ด้วย HyperDB Juju #05 วิธีกระจายงานไปยัง MySQL แบบ Master-Master Juju #06 เชื่อม MySQL Master-Master เข้ากับ HAProxy Juju #07 กระจายโหลดข้ามเครื่อง  

Read More »

Juju #07 – กระจายโหลดข้ามเครื่อง

ที่ผ่านมา เป็นการติดตั้ง Juju ซึ่งเบื้องหลังคือ LXD Container แต่ทั้งหมดยังอยู่บนเครื่องเดียวกัน ภาพต่อไปนี้ เป็นการทดสอบความเร็วในการตอบสนองของ WordPress ซึ่งเป็น Post ที่มีภาพจำนวนมาก และมีขนาดในการ Download ทั้งหมด 5 MB ใช้เวลาประมาณ 1.24 วินาที เมื่อใช้ jMeter ระดมยิงด้วยความเร็ว 100 Connections ต่อ 1 วินาที ต่อเนื่อง 10 วินาที ได้ผลว่า เวลาเฉลี่ยคือ 2.478 วินาที ต่อมาลองเพิ่มจำนวน Container จาก 1 เครื่องไปเป็น 3 เครื่อง แต่ทำงานอยู่บน Physical Server เดียวกัน แล้วทดลองยิงแบบเดิม ได้ผลออกมาคือ ใช้เวลาเฉลี่ย 1.663 วินาที จากนั้น ทดสอบแยก Container ออกไป เป็น 3 Physical Servers ได้ผลออกมาว่า ใช้เวลาลดลงเหลือเพียง 1.056 วินาทีเท่านั้น สรุป การกระจายโหลดออกไปยังหลายๆ Physical Servers ทำให้สามารถรับโหลดจำนวนมากได้ ในบทความต่อไปจะมาลงรายละเอียดในการ Setup กัน   Reference: – https://www.digitalocean.com/company/blog/horizontally-scaling-php-applications/ – https://www.digitalocean.com/community/tutorials/how-to-install-linux-nginx-mysql-php-lemp-stack-in-ubuntu-16-04 – http://php.net/manual/de/mysqlnd-ms.loadbalancing.php – https://serversforhackers.com/video/php-fpm-configuration-the-listen-directive – http://nginx.org/en/docs/http/request_processing.html – http://stackoverflow.com/questions/5328844/nginx-load-balance-with-dedicated-php-fpm-server – https://code.google.com/archive/p/sna/wikis/NginxWithPHPFPM.wiki – http://nginx.org/en/docs/http/load_balancing.html – http://opensource.cc.psu.ac.th/KM-container

Read More »