การตั้งค่าเครื่องแม่ข่ายระบบการเรียนการสอนออนไลน์สำหรับการสอบ
- Posted by Sutthiphong Hachit
- Categories Explicit Knowledge
- Date August 24, 2024
ขั้นตอนการปรับเครื่องแม่ข่ายให้มีสภาวะพร้อมสำหรับการสอบ
1. เปิดโหมดบำรุงรักษาระบบ (Maintainance mode)
เมื่อถึงเวลาที่กำหนดให้ดำเนินการเปิดโหมดบำรุงรักษาระบบ (maintainance mode)
2. ใช้คำสั่งยกเลิกเซสชันการใช้งานของผู้ใช้งาน
เพื่อให้ระหว่างการดำเนินงานไม่มีผู้ใช้งานอยู่ในระบบซึ่งจะส่งผลกระทบกับการจัดเก็บข้อได้ในระหว่างดำเนินการ มีนั้นตอนการดำเนินการดังนี้
1. เข้าสู่เครื่องแม่ข่ายด้วยวิธีการ ssh
2. ไปยังตำแหน่ง cd /app/moodle/lms/admin/cli
3. รันคำสั่ง php kill_all_sessions.php
ผู้ใช้งานที่อยู่ในระบบจะถูกปฎิเสธการใช้งานต่อ และออกจากระบบ
3. ตั้งค่าเครื่องแม่ข่าย
3.1. เครื่องแม่ข่าย load balance
จุดที่ต้องดำเนินการตั้งค่าอยู่ที่ /etc/nginx/default.d
3.1.1.แก้ไขการตั้งค่า proxy.conf
ในช่วงเวลาการเรียนการสอน ณ ปัจจุบันได้กำหนดค่าการเชื่อมต่อของระบบไว้โดยใช้เวลาในการเชื่อมต่อนานขึ้น เพื่อให้บางกิจกรรมสามารถทำงานต่อได้สำเร็จ เช่นการส่งออกรายวิชา การนำเข้ารายวิชา การอัพโหลดข้อมูลที่มีขนาดใหญ่ กำหนดค่าไว้ดังนี้
ในช่วงจัดสอบจะมีจำนวนผู้ใช้งานเข้าพร้อมกันจำนวนมากในช่วงเวลาเดียวกัน มีพฤติกรรมการใช้งานในลักษณะตอบคำถามแบบตัวเลือก หรือเติมคำเป็นส่วนใหญ่ ไม่ได้มีการอัพโหลดหรือสำรองข้อมูลที่ต้องใช้เวลาการเชื่อมต่อเป็นเวลานาน ซึ่งในจุดนี้จะต้องมีการปรับการตั้งค่าให้ลดเวลาการรอการทำกิจกรรมให้เหลือน้อยลงเพื่อให้ระบบสามารถให้บริการได้
ตารางสรุปการตั้งค่า proxy.conf
|
ค่าที่ต้องปรับ |
ช่วงการเรียนการสอนปกติ |
ช่วงการสอบ |
|
proxy_connect_timeout |
90 |
60 |
|
proxy_send_timeout |
1800 |
60 |
|
proxy_read_timeout |
1800 |
60 |
3.1.2. แก้ไขการตั้งค่า http.conf
การตั้งค่าในส่วนนี้คือลดเวลาในการเชื่อมต่อสั้นลงเช่นเดียวกับ proxy เพื่อไม่ให้เกิดการจองทรัพยากรเครื่อง (hold resourse)
ตารางสรุปการตั้งค่า http.conf
|
ค่าที่ต้องปรับ |
ช่วงการเรียนการสอนปกติ |
ช่วงการสอบ |
|
client_header_timeout |
1800 |
60 |
|
client_body_timeout |
1800 |
60 |
|
send_timeout |
1800 |
60 |
|
keepalive_timeout |
90 |
33 |
|
keepalive_requests |
4096 |
1000 |
3.2. เครื่องแม่ข่ายส่วนระบบการเรียนการสอน
3.2.1.แก้ไขไฟล์ /ect/php-fpm.d/www.conf
ได้ทำการทดสอบ ได้ทดลองปรับค่า pm.start ไปที่ 3400 โปรเซส พบว่าแรมยังสามารถรองรับได้ เป็นการทดสอบเพื่อความมั่นใจว่าระบบจะรองรับการทำงานในกรณีที่มีโปรเซสเกิดขึ้นพร้อมกันในหนึ่งช่วงเวลา แต่ในกรณีใช้งานจริงจะกำหนดตามข้อมูลตารางสรุป
ตารางสรุปการตั้งค่า www.conf
|
ค่าที่ต้องปรับ |
ช่วงการเรียนการสอนปกติ |
ช่วงการสอบ |
|
listen.backlog |
1023 |
1023 |
|
pm |
dynamic |
dynamic |
|
pm.max_children |
3400 |
3400 |
|
pm.start_servers |
500 |
1200 |
|
pm.min_spare_servers |
500 |
1200 |
|
pm.max_spare_servers |
500 |
1200 |
แก้ไขไฟล์ ณ ตำแหน่ง /etc/nginx/default.d
3.2.2. ไฟล์ http.conf
client_header_timeout 60;
client_body_timeout 60; # exam 60 learn 1800
send_timeout 60; # exam 60 learn 1800
keepalive_timeout 33; # exam 33 learn 90
keepalive_requests 1000; # exam 1000 learn 4096
ตารางสรุปการตั้งค่า http.conf
|
ค่าที่ต้องปรับ |
ช่วงการเรียนการสอนปกติ |
ช่วงการสอบ |
|
client_header_timeout |
60 |
60 |
|
client_body_timeout |
1800 |
60 |
|
send_timeout |
1800 |
60 |
|
keepalive_timeout |
90 |
33 |
|
keepalive_requests |
4096 |
1000 |
3.2.3. ไฟล์ php.conf
fastcgi_connect_timeout 60;
fastcgi_send_timeout 60; #exam 60 learn 1800
fastcgi_read_timeout 60; #exam 60 learn 1800
ตารางสรุปการตั้งค่า php.conf
|
ค่าที่ต้องปรับ |
ช่วงการเรียนการสอนปกติ |
ช่วงการสอบ |
|
fastcgi_connect_timeout |
60 |
60 |
|
fastcgi_send_timeout |
1800 |
60 |
|
fastcgi_read_timeout |
1800 |
60 |
3.2.4. ไฟล์ proxy.conf
proxy_connect_timeout 60; #exam 60 learn 360
proxy_send_timeout 60; #exam 60 learn 1800
proxy_read_timeout 60; #exam 60 learn 1800
ตารางสรุปการตั้งค่า
|
ค่าที่ต้องปรับ |
ช่วงการเรียนการสอนปกติ |
ช่วงการสอบ |
|
proxy_connect_timeout |
360 |
60 |
|
proxy_send_timeout |
1800 |
60 |
|
proxy_read_timeout |
1800 |
60 |
โดยการกำหนดค่าเหล่านี้จะต้องดำเนินการก่อนการสอบและทำการรีสตาร์ทเครื่องแม่ข่ายเนื่องจากเครื่องที่ทำงานเป็นเวลาระยะหนึ่งจำเป็นต้องมีการ restart เพื่อป้องกันการจองทรัพยากร (RAM) ของโปรเซสบางโปรเซสแบบไม่คืน (Memory Leak)
ขั้นตอนการรีสตาร์ทเครื่องแม่ข่ายมีลำดับขั้นตอนดังนี้
1. หยุดการทำงานเครื่องแม่ข่าย LMS
– service nginx stop
– reboot
2. หยุดการทำงาน mysql service ในเครื่องฐานข้อมูล
– service mysql stop
– reboot
3. เริ่มการทำงาน mysql service ในเครื่องฐานข้อมูล
– service mysqld start
4. ตรวจสอบสถานะ service mysql
– service mysqld status
5. รีสตาร์ทเครื่องแม่ข่าย cache
– service redis stop
– reboot
– service redis start
6. เริ่มการทำงาน service nginx ในเครื่องแม่ข่าย LMS
– service nginx start
7. รีสตาร์ท service nginx ในเครื่องแม่ข่าย loadbalance
– service nginx stop
– reboot
– service nginx start
8. ในระบบ LMS
– ดำเนินการ purge cache
– ในปลั๊กอิน redis management โดยเลือกที่เมนู server > redis management ดำเนินการ flush ทั้งในส่วนของ redis_app และ redis_session
ตรวจสอบความพร้อมใช้งาน
1. เปิดหน้า notification เพื่อตรวจสอบการแจ้งเตือน
ตรวจสอบการทำงานของ crontab โดยจะต้องไม่มีแจ้งเตือนเกี่ยวกับ crontab
2. ตรวจสอบ report
2.1. Performance overview สถาะนะของรายงานจะต้องเป็นสถานะ “OK” หากพบความผิดปกติควรดำเนินการแก้ไข้

2.2. Security checks ตรวจสอบผลรายงานด้านความปลอดภัยของระบบให้อยู่สถานะ “OK” หากพบความผิดปกติควรดำเนินการแก้ไข้

2.3. System status report รายงานสถานะของระบบโดยค่าที่ต้องตรวจสอบประกอบด้วย Environment, Upgrade, Cron running จะต้องอยู่ในสถานะ “OK”

2.4. ปิดโหมดบำรุงรักษา (maintainance mode)
ทั้งหมดนี้เป็นขั้นตอนการเตรียมเครื่องแม่ข่ายสำหรับช่วงสอบให้สามารถรองรับการทำกิจกรรมการสอบได้อย่างมีประสิทธิภาพช่วยให้การเข้าสอบพร้อมกันในช่วงเวลาเดียวกันไม่เกิดปัญหาการเข้าใช้งานได้
You may also like
ที่มา/ปัญหา เพื่อให้การใช้งาน Docker Volumes ร่วมกับโปรแกรม Cursor และ Git Azure ได้อย่างมีประสิทธิภาพจึงต้องทำการเชื่อมต่อข้อมูลไฟล์ Project กับ Container และใช้ SSH ในการเชื่อมต่อโดยมีขั้นตอนการทำดังต่อไปนี้ สิ่งที่จำเป็นและต้องเตรียม ๑. Docker Desktop ๒. Docker Container ๓. Extension SFTP ของ Cursor หรือ VS Code ขั้นตอนการติดตั้งและใช้งาน ๑. ติดตั้ง OpenSSH Server โดยเข้าไปที่ Container Exec แล้วลองพิมพ์ …
ที่มา/ปัญหา การใช้งาน Docker Container ปัจจุบันเราจะใช้วิธีการ Bind Mounts เพื่อเชื่อมโยง Folder Code จากเครื่อง Windows เข้าไปใน Container โดยตรงทำให้เราสามารถแก้ไขเปลี่ยนแปลงไฟล์ระหว่าง Windows กับ Container ได้สะดวกแต่ปัญหาก็คือการใช้ Bind Mounts นั้นทำให้ web ที่เราพัฒนาอยู่เรียกใช้งานได้ช้ามากเนื่องจากการเชื่อมต่อไฟล์ระหว่าง Windows กับ Container จะต้องแปลงไฟล์ระบบของ Windows ให้เข้ากันกับไฟล์ระบบของ Container ก่อน ทำให้การอ่านไฟล์ช้ากว่าปกติ การแก้ปัญหาก็คือ การนำ Docker Volumes มาใช้แทนการ Bind Mounts …
กรณีที่ไม่สามารถลบรายวิชาได้ผ่านในส่วนของหน้าบ้านของระบบ BUU LMS เมื่อพยายามที่จะลบรายวิชาดังกล่าวระบบจะขึ้นค้างตามภาพด้านล่าง หลังจากกด Refresh แล้วทดสอบค้นหารายวิชาบนระบบยังคงพบว่ารายวิชาดังกล่าวที่การลบออกไปนั้นยังคงมีอยู่ระบบ 1. แก้ปัญหาโดยการรัน Script ของ delete_course.php เพื่อลบรายวิชา โดยใช้คำสั่ง php /app/moodle/lms/admin/cli/delete_course.php –courseid=xxxx 2. ถ้าหาก Run Script ตามข้อที่ 1 แล้วเจอ Error เหมือนภาพด้านล่าง ให้ใช้สั่ง php /app/moodle/lms/admin/cli/delete_course.php –courseid=xxxx –non-interactive –disablerecyclebin แทน
