CentOS 6 คำสั่ง fsck -y ตอน boot อัตโนมัติ

ทดสอบแล้ว สำหรับ CentOS 6 เท่านั้น


touch /.autofsck
echo "-y" > /fsckoptions

** เอาไว้ใช้แก้ปัญหาในกรณี Disk มีปัญหา ไม่สามารถเขียนได้ (Read-Only) ทำให้ต้อง Reboot แล้วมันก็จะติด “Give root password for maintenance or press CTRL+D to continue” ใครจำ root password ได้ก็โชคดีไป ก็ใส่รหัสผ่าน แล้วใช้คำสั่ง fsck -y  ตามด้วย Drive ไป ก็จะแก้ไขได้ แต่ใครจำ root password ไม่ได้ งานนี้มีซวย บอกเลยครับ…!!

VMware vSAN คำสั่งดู Log-Congestion

รันใน Esxi Host ที่มีปัญหา Congestion ประเภท Log-Congestion เพื่อดูขนาดว่าปัจจุบัน Log มันเท่าไร


esxcli vsan storage list |grep -A1 "SSD: true" |grep UUID|awk '{print $3}'|while read i;do sumTotal=$(vsish -e get /vmkModules/lsom/disks/$i/info |grep "Log space consumed"|awk -F \: '{print $2}'|sed 'N;s/\n/ /'|awk '{print $1 + $2}');gibTotal=$(echo $sumTotal|awk '{print $1 / 1073741824}');echo "SSD \"$i\" total log space consumed: $gibTotal GiB";done

ค่าที่ได้ หน่วยจะเป็น GB หากเกิน 20GB ไปแล้ว ระวังความซวยจะมาเยือน โปรดหยุดกิจกรรมการเขียนข้อมูลใดๆ ถ้าเป็นไปได้ เพราะมันอาจจะทำให้ Host ค้างได้ และมันจะทำให้ Host อื่นๆค้างตามด้วยได้

CentOS ตั้งค่าอัพเตด Repo ประเทศไทย

สำหรับท่านที่ใช้งาน CentOS และมีปัญหาว่าตอน yum update หรือ yum install แล้วมันวิ่งไปดึงเอา repo จากต่างประเทศ แล้วทำให้ช้า ทั่งๆที่ใช้งานในประเทศไทย วิธีการแก้ไขปัญหานี้ ให้ใช้คำสั่งนี้


perl -pi -e "s/infra=.*/infra=$infra&cc=th/" /etc/yum.repos.d/*.repo;

สำหรับ Epal


perl -pi -e 's/arch=.*/arch=\$basearch&cc=th/' /etc/yum.repos.d/epel.repo;

แบบเบร็ดเสร็จ


perl -pi -e "s/infra=.*/infra=$infra&cc=th/" /etc/yum.repos.d/*.repo;
yum install epel-release -y;
perl -pi -e 's/arch=.*/arch=\$basearch&cc=th/' /etc/yum.repos.d/epel.repo;
yum update -y;

คำสั่งลบ Apps ที่ติดมากับ Windows

สำหรับผู้ที่ใช้งาน Windows เวลาลง Windows ใหม่ แล้วมันจะมีแอพต่างๆติดตั้งมาด้วย เช่น Mail, Skype, xbox, Etc. โดยปกติแล้วผมไม่ได้ใช้งานพวกนี้เลย และมันก็เปลืองทรัพยากรโดยใช่เหตุ สำหรับใครที่ต้องมานั่งลบหลังลง Windows ใหม่ทุกๆครั้ง สามารถใช้คำสั่งนี้ใน Windows PowerShell ได้เลย


Get-AppxPackage *3dbuilder* | Remove-AppxPackage
Get-AppxPackage *windowsalarms* | Remove-AppxPackage
Get-AppxPackage *windowscommunicationsapps* | Remove-AppxPackage
Get-AppxPackage *windowscamera* | Remove-AppxPackage
Get-AppxPackage *officehub* | Remove-AppxPackage
Get-AppxPackage *skypeapp* | Remove-AppxPackage
Get-AppxPackage *getstarted* | Remove-AppxPackage
Get-AppxPackage *zunemusic* | Remove-AppxPackage
Get-AppxPackage *windowsmaps* | Remove-AppxPackage
Get-AppxPackage *solitairecollection* | Remove-AppxPackage
Get-AppxPackage *bingfinance* | Remove-AppxPackage
Get-AppxPackage *zunevideo* | Remove-AppxPackage
Get-AppxPackage *bingnews* | Remove-AppxPackage
Get-AppxPackage *onenote* | Remove-AppxPackage
Get-AppxPackage *people* | Remove-AppxPackage
Get-AppxPackage *windowsphone* | Remove-AppxPackage
Get-AppxPackage *photos* | Remove-AppxPackage
Get-AppxPackage *windowsstore* | Remove-AppxPackage
Get-AppxPackage *bingsports* | Remove-AppxPackage
Get-AppxPackage *soundrecorder* | Remove-AppxPackage
Get-AppxPackage *bingweather* | Remove-AppxPackage
Get-AppxPackage *xboxapp* | Remove-AppxPackage

Linux คำสั่งหาไฟล์ที่มีขนาดเท่ากัน

คำสั่งหาไฟล์ที่มีขนาดเท่าๆกัน วัดกันที่ระดับ bytes หากต้องการรู้ว่าไฟล์ที่เราต้องการจะหามันกี่ bytes ก็สามารถใช้คำสั่ง ll (L ตัวเล็ก 2 ตัว) แล้วจะเห็นตัวเลขขนาดไฟล์ที่เป็น bytes ขึ้นมานะครับ


find /home/ -type f -size 1234c -exec ls {} \;

แทน 1234 ด้วยขนาดไฟล์ที่ต้องการครับ

CentOS6 ติดตั้ง Open VM Tools

โดยค่า default เราจะไม่สามารถติดตั้ง open-vm-tools ผ่านคำสั่ง yum ใน CentOS 6 ได้ครับ สำหรับคนที่ใช้งาน VMware อาจจะมีปัญหาปวดหัวกับการติดตั้ง VM Tools จากตัว Esxi เองอยู่บ้าง การใช้งาน open-vm-tools นั้นจะช่วยให้เราลดปัญหาตรงนี้ไปได้เยอะเลย


# Open VM Tools - CentOS 6
yum --enablerepo=extras install epel-release
yum install -y open-vm-tools
service vmtoolsd start
chkconfig vmtoolsd on

หมายเหตุ: ถ้าใช้คำสั่ง yum บรรทัดแรกไม่ได้ ให้ทำการ Import ด้วยคำสั่งนี้แทน


rpm -Uvh http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

WP Most Popular ทำเว็บล่มได้หากไม่ทำ Indexing

เนื่องจากมีลูกค้าของทาง CloudHost ได้ใช้บริการ Cloud Server และในส่วนของ Script ได้ใช้งาน WordPress CMS และ Plugin: WP Most Popular (https://th.wordpress.org/plugins/wp-most-popular/) ซึ่ง ณ วันที่เขียนบทความ จะเป็นตัว WP Most Popular 0.3.1 นะครับ

MRTG

จากกราฟ MRTG: ปัญหาอยู่ที่ Traffic มีเข้ามาจำนวนมาก (จาก Facebook Post) และทำให้ CPU ถูกใช้งานไปเกือบๆ 100% และ Load สูงมากๆ แถม RAM ก็หมดอีก โดย Space ที่ลูกค้าใช้งานอยู่คือ 4 vCore CPU และ 8GB RAM ครับ ส่วนซอฟต์แวร์ที่ใช้งานคือ Apache + Nginx, PHP (With Opcache) & MySQL และเว็บ WordPress นี้ไม่ต้องการใช้งาน Plugin Cache ข้อมูลหน้าเว็บ เพราะว่าต้องการสถิติที่แบบ Real-Time ครับ

หลังจากที่เซิฟเวอร์โหลดสูงไม่มีท่าทีว่าจะหยุด ทางผมจึงได้ใช้ CloudFlare Cache เข้ามาช่วย (https://xvlnw.com/topic/178) แต่ก็ไม่เป็นผลสำเร็จ เนื่องจากการแคชของ CloudFlare ยังต้องมาเรียกข้อมูลที่เซิฟเวอร์อยู่ และเซิฟเวอร์ไม่สามารถส่งข้อมูลได้เร็ว เว็บก็ยังคงโหลดช้าเหมือนเดิม ในช่วงที่เอา CloudFlare มาช่วย จะเห็นได้จากกราฟ Traffic ด้านบน ทีมี Traffic และ New TCP Connection ขาดหายไป แต่นั่นก็ไม่ทำให้ CPU, Load ลดลงแต่อย่างใด

ผมจึงคิดได้ว่าอาจจะเกิดจาก Plugin: WP-PostViews (https://th.wordpress.org/plugins/wp-postviews/) ที่เป็น Plugin เกี่ยวกับการเก็บสถิติการเข้าชมหน้าโพสต่างๆ ก็เลยใช้ตัวช่วย phpMyAdmin ในการเข้าไปตรวจสอบสถิติในการใช้งาน MySQL เพราะเห็นว่าใน SSH ใช้คำสั่ง top -c แล้วเห็นว่ามี process ของ MySQL ใช้งาน CPU สูงอยู่ตลอดเวลา จึงได้ผลตามภาพ

SQL Stats

ก็แปลกใจอยู่ เพราะว่าการอัพเดต views นั้นจะใช้คำสั่ง update เป็นหลัก แต่ % ของการใช้คำสั่ง update นั้นแทบจะไม่มีเลย แต่เป็นการใช้งาน select ซะมากกว่า เพราะฉะนั้น ปัญหาอาจจะไม่ได้มาจาก WP-PostViews แล้วแน่นอน จึงได้ใช้ phpMyAdmin ตัวเดิมนี่แหละ ดูคำสั่ง Query ที่ค้างอยู่ใน Processes ก็ถึงบางอ้อกันเลยทีเดียว เพราะว่ามีการใช้คำสั่ง select มาจากตาราง wp_most_popular โดยการใช้คำสั่ง where post_id = ‘xxxx’ เพื่อเรียกข้อมูลให้ตรงกับ post นั้นๆ เยอะมาก เพราะฉะนั้น ปัญหามันจะต้องมาจาก WP Most Popular อย่างแน่นอน

จึงได้เข้าไปส่องในตาราง และดูโครงสร้างของตาราง ก็พบว่า post_id ไม่ได้มีการทำ Indexing ไว้ ทำแต่ Primary Key ที่เป็นฟิลล์ id เท่านั้น, ก็เพื่อความแน่ใจว่ามันเป็นแบบนี้ตั้งแต่ทีแรก ก็เลยไปโหลด Plugin: WP Most Popular 0.3.1 ซึ่งเป็นเวอร์ชั่นล่าสุด ณ เวลาที่เขียนบทความนี้นะครับ เอามาแงะดูและผลที่ได้ตามภาพ

Setup Plugin - WP Most Popular

OMG! มันไม่ได้ทำ Indexing ให้กับฟิลล์ post_id จริงๆด้วย ผมก็เลยทำ Indexing ด้วยตัวเอง ผ่านทาง phpMyAdmin นั่นแหละ แล้วผลเป็นอย่างไรหละ? ก็ตามภาพกราฟ MRTG ที่โพสไปตอนแรกนั่นเอง การใช้งาน CPU ลดลง, และ Load ก็ลดลง มีการคืน RAM กลับมาให้เหลือไว้ใช้งานได้อีก รวมถึงการที่ Traffic Load เพิ่มมากขึ่นอีกด้วย เพราะฉะนั้น สำหรับใครที่ใช้งาน WP Most Popular อยู่แล้ว แนะนำให้ไปทำ Indexing ในฟิลล์ post_id กันด้วยนะครับ (ออกแบบ DB ดี มีชัยไปกว่าครึ่ง)

หมายเหตุ: สำหรับ WordPress ที่ใช้งาน Plugin Cache ข้อมูลต่างๆ จะไม่เจอปัญหานี้นะครับ (รวมถึงใช้ CloudFlare เข้ามาช่วยแคชได้ด้วย) เพราะว่าการ Query มันก็เอามาเก็บเป็นแคช และเวลาเรียกครั้งต่อไปก็ไม่ได้ไป Query ใหม่อยู่แล้ว จนกว่าจะเคีลยร์แคช หรือแคชหมดเวลานั่นแหละ ก็อย่างที่บอกไปข้างต้นว่าเว็บนี้ไม่ต้องการแคชข้อมูลนั่นเอง มันก็เลยเจอปัญหาอย่างที่เห็นครับ

DirectAdmin วิธีติดตั้ง Driver MS SQL Server ให้กับ PHP

สำหรับ DirectAdmin Build-in จะไม่มี driver mssql มาให้ ต้องติดตั้งเสริมเองนะครับ โดยเราจะใช้ตัว FreeTDS เข้ามาช่วยครับ

เกี่ยวกับ FreeTDS – http://www.freetds.org/userguide/what.htm

วิธีการติดตั้ง:

ให้ทำการล็อคอินเข้าไปที่ SSH ของเซิฟเวอร์ที่ต้องการติดตั้ง และใช้คำสั่งติดตั้ง FreeTDS


cd /root
wget ftp://ftp.freetds.org/pub/freetds/stable/freetds-patched.tar.gz
tar -xvzf freetds-*.tar.gz
cd freetds-*
./configure --prefix=/usr/local/freetds
make
make install

ถ้าโหลดไม่ได้ ให้ตรวจสอบลิงก์โหลด Stable Version ได้ที่เว็บไซต์ http://www.freetds.org/

หลังจากนั้น ไปที่ Path /usr/local/directadmin/custombuild/configure/ap2/ แก้ไขไฟล์ PHP Config ตามเวอร์ชั่นที่เราใช้งานอยู่ เช่น หากใช้ PHP 5.6 อยู่ ก็แก้ไขไฟล์ configure.php56 หากใช้หลายเวอร์ชั่น ก็แก้ไขให้ครบนะครับ โดยการเพิ่มคำสั่งด้านล่างนี้ลงไปก่อนบรรทัดสุดท้าย


--with-mssql=/usr/local/freetds \

หรือจะเพิ่มลงไปบรรทัดสุดท้าย ให้เอา \ ออกครับ

หลังจากแก้ไขไฟล์ PHP Config ครบแล้ว ให้ทำการ Build php ตามคำสั่งนี้


cd /usr/local/directadmin/custombuild
./build clean
./build php d

ตรวจสอบความถูกต้อง


php -m|grep mssql
mssql

เป็นอันเสร็จครับ

วิธีการตั้งค่า Redirect HTTP to HTTPS บน CloudFlare

สำหรับผู้ที่ใช้งาน CloudFlare และเปิดใช้งาน SSL ด้วย และอยากให้พิมพ์ URL แบบไม่มี SSL และเด้งไปหน้าที่เป็น SSL ทุกครั้ง สามารถสร้าง Page Rules ได้ตามรูปด้านล่างนี้ครับ

1. ล็อคอินที่ CloudFlare เลือกโดเมน และไปที่เมนู “Page Rules” จากนั้นคลิกที่ “Create Page Rule”

cloudflare-ssl-redirect-1

2. ใส่ URL ของโดเมนเรา และตามด้วย /* ด้านหลัง และเลือก Always Use HTTPS จากนั้นคลิกที่ “Save and Deploy”

cloudflare-ssl-redirect-2

3. จากนั้นก็จะได้ตามรูปด้านล่างนี้ เป็นอันเสร็จสิ้น

cloudflare-ssl-redirect-3

 

CloudFlare ตั้งค่า Cache สุดโหด ลดภาระเซิฟเวอร์

เชื่อว่าหลายๆท่านคงจะเคยได้ยิน CloudFlare ในที่นี้ผมจะเรียกสั้นๆว่า CF นะครับ โดยตัวมันเอง สามารถที่จะใช้งานได้ฟรี แถมยังมี SSL ให้ฟรี และปัจจุบันก็รองรับ HTTP 2 โดยที่เราไม่ต้องทำอะไรที่เซิฟเวอร์จริงๆเลย หรือแม้ว่าเซิฟเวอร์จริงๆของเราจะรองรับแค่ HTTP 1.0/1.1 หากเราไปใช้บริการ CF เราก็จะได้ใช้ HTTP 2 กันเลยฟรีๆ

แต่บทความนี้จะเจาะลึกลงไปยังการ Caching ข้อมูลในเว็บของเราระดับโหด ซึ่งหากเราใช้ CF โดยไม่ได้ปรับแต่งอะไรมาก จากที่ตรวจสอบพบว่ายังมี Traffic เข้ามาเรียกข้อมูลในหน้าเว็บไซต์ตลอดเวลา เพื่อให้เกิดความ Real-Time แต่ในบางครั้ง หน้าเว็บไซต์ของเราไม่ได้มีเนื้อหาอัพเดตอยู่อย่างสม่ำเสมอ หรือเนื้อหาอัพเดตตลอดเวลา อาจจะเป็นเว็บไซต์แนวๆอ่านข้อมูลซะมากกว่า เป็นต้น การ Caching ในบทความนี้จึงเหมาะกับเว็บประเภทนี้มากกว่านะครับ สำหรับเว็บบอร์ด หรือเว็บไซต์ที่ต้องอัพเดตเนื้อหาแบบ Real-Time อาจจะไม่เหมาะกับวิธีการที่ผมจะกล่าวต่อไปนี้ครับ

ก่อนอื่นเรามาดูจากกราฟ MRTG ที่ผมได้ทดสอบระหว่าง Caching กับไม่ได้ Caching แต่ยังใช้ CloudFlare (CF) มาดักไว้ข้างหน้าอยู่นะครับ ไม่ได้เข้ามาตรงๆที่เซิฟเวอร์ ผลปรากฏดังกราฟด้านล่างนี้ครับ

MRTG

อธิบายกราฟ MRTG: ช่วงที่กราฟสูงๆ นั่นคือการที่เราไม่ได้ทำ Caching แต่ยังใช้บริการ CloudFlare อยู่ครับ ส่วนช่วงที่กราฟต่ำๆ คือการตั้งค่า Caching ไว้ที่ CloudFlare แล้วครับ

ส่วนด้านล่างนี้จะเป็นกราฟฝั่งของทาง CloudFlare ตอนที่เราทดสอบการแคช และไม่แคช ในเวลาเดียวกันนะครับ

CloudFlare Caching

สำหรับรูปด้านล่าง จะเป็น Bandwidth ที่อยู่กับทาง CloudFlare และไม่ได้หลุดเข้ามาที่เซิฟเวอร์ตรงๆ (ข้อมูลจะเป็น 24 ชั่วโมงล่าสุดนะครับ)

CloudFlare Bandwidth Saved

วิธีการตั้งค่า Caching:

การตั้งค่า Caching นั้น คงต้องอธิบายว่าแต่ละเว็บไซต์คงไม่เหมือนกัน เพราะว่าเราจะต้องมีบางหน้า ที่ต้องการข้อมูลที่ Real-Time เช่น หน้าเข้าสู่ระบบ (Login) ในที่นี้ผมจะยกตัวอย่าง WordPress CMS ที่จะเห็นภาพได้ชัด และเชื่อว่าหลายๆคนก็คงจะเคยใช้กันอยู่แล้วนะครับ ข้อมูลที่ไม่ได้ต้องการ Real-Time ก็คือข้อมูลหน้าเว็บไซต์ พวก Post, Page, Category, Tags และข้อมูลที่ต้องการความ Real-Time ก็คือ /wp-admin หรือระบบหลังบ้านของ WordPress เวลาเรา Login หรือเข้าไป Management ต่างๆ ต้องการข้อมูลที่ Real-Time เสมอ

หากเข้าใจด้านบนนี้แล้ว เราก็จะรู้ว่าเราควรจะตั้งค่าให้ Caching ข้อมูลอย่างไรนะครับ วิธีการตั้งค่า ให้เราเข้าไปยังโดเมนนั้นๆของเราใน CloudFlare และไปที่เมนู “Page Rules” สำหรับ Package Free เราจะสามารถสร้าง Page Rules ได้ทั้งหมด 3 Rules ด้วยกัน ส่วนตัวเสียเงินอันนี้ผมไม่รู้ว่าได้เท่าไรนะครับ (ขอข้ามไป)

การเรียบลำดับ Page Rules คือ “อันบนสุด สำคัญสุด และจะไม่ทำอันต่อไป หากเข้าเงื่อนไขอันใดอันหนึ่ง” การตั้งค่า WordPress จึงตั้งค่าได้ตามนี้ครับ

CF Caching Page Rules

Bypass : ไม่ทำแคช ให้วิ่งเข้าหาเซิฟเวอร์ตรงๆ

Cache Everything : ทำการแคชทุกๆอย่าง

สำหรับบทความนี้ก็คงขอจบเท่านี้นะครับ การนำเอาไปใช้งาน ก็ขึ้นอยู่กับตัวเว็บไซต์ของท่านด้วย ใช้ Script อะไร? และจะนำเอาไปประยุกต์ใช้งานให้เกิดประโยชน์ได้อย่างไรครับ 🙂