ช่วงต้นอาทิตย์ที่ผ่านมา ลูกค้าท่านหนึ่งที่ผมเคยร่วมติดตั้ง Elastix 2.4 ด้วยกัน โทรมาแจ้งว่าตอนนี้ว่าระบบ VoIP ในออฟฟิศล่มหมดเลย ทั้งที่วันก่อนก็ยังทำงานเป็นปกติดี
หาสาเหตุของปัญหา
จากที่ผมสอบถามลูกค้าท่านนั้น เขาบอกว่าวันก่อนได้อัพเดท Elastix (ด้วยคำสั่ง yum -y update) หลังอัพเดทก็ยัง OK อยู่ แต่ยังไม่รีบู๊ตเครื่องเพราะมีคนใช้งานอยู่ ตั้งเวลาไว้ให้รีบู๊ตเครื่องตอนกลางคืน วันรุ่งขึ้นปรากฏว่า VoIP ล่มหมดเลย ใช้งานไม่ได้ทั้งออฟฟิศ เช็คเน็ตเวอร์คทั้งหมดแล้วก็ OK เครื่องที่ลง Elastix ก็ยังดีอยู่ สามารถเข้าเว็บ Elastix ได้ สามารถรีโมทเข้าไปที่ CentOS ในเครื่องได้ เช็คไปเช็คมาเจอว่า Asterisk ไม่สตาร์ท พยายามสั่ง amportal start แล้วก็ไม่ได้ รีบู๊ตเครื่องอีกหลายรอบแล้วก็ยังไม่ได้ หมดหนทาง เลยโทรหาผม
ตอนระบบ VoIP ล่ม เวลาสั่งรัน asterisk -rv ได้แบบนี้
- โค้ด: เลือกทั้งหมด
Unable to connect to remote asterisk (does /var/run/asterisk/asterisk.ctl exist?)
ซึ่งจะเห็นได้ว่า Asterisk ไม่สตาร์ทครับ ระบบก็เลยล่ม
สาเหตุ
ผมจำได้ว่า Elastix ของลูกค้าได้มีการติดตั้ง Codec G.723, G.729 เพิ่มเติม ผมก็คาดว่าปัญหาน่าจะเกิดจาก Codecs สองตัวนี้แหล่ะครับที่ทำให้ Asterisk ไม่รันเลยทำให้ VoIP ล่มทั้งออฟฟิศ
ซึ่งคงยังจำกันได้ว่าจาก บทความแนะนำการติดตั้ง G.723, G.729 ที่ว่าถ้าจะติดตั้ง G.723, G.729 จะต้องโหลดไฟล์ Codecs ให้ตรงกับ Asterisk เวอร์ชั่นที่ใช้งานอยู่ด้วย ถ้าเวอร์ชั่นไม่ตรงก็จะสตาร์ท Asterisk ไม่ได้
Elastix 2.4 ตอนติดตั้งแรกๆมันใช้ Asterisk 1.8.20 ครับ อัพเดทอีกทีก็ใช้ 1.8.21, 1.8.22 แต่อัพเดทครั้งหลังสุด (น่าจะสักประมาณต้นเดือน มิ.ย. 2556 นี้) มันกระโดดเปลี่ยนไปใช้ Asterisk 11.4 เลย ซึ่งจะเห็นว่าเป็น Asterisk คนละเวอร์ชั่นกันครับ นี่แหล่ะครับสาเหตุที่ทำให้ Asterisk ไม่สตาร์ท
วิธีการแก้ไข
ติดตั้ง G.729, G.723 ที่เป็นของ Asterisk 11 ดังนี้ครับ
1. ลบไฟล์ codec_g729.so, codec_g723.so ออกก่อน
เครื่องลูกค้าใช้ Elastix x86_64 และไฟล์ Codecs อยู่ที่โฟลเดอร์ /usr/lib64/asterisk/modules
- โค้ด: เลือกทั้งหมด
rm -rf /usr/lib64/asterisk/modules/codec_g729.so
rm -rf /usr/lib64/asterisk/modules/codec_g723.so
2. ดาวน์โหลดไฟล์ Codecs สำหรับ Asterisk 11
เว็บนี้ครับ http://asterisk.hosting.lv/
CPU เครื่องลูกค้าเป็น Xeon มี sse4 ด้วย
- โค้ด: เลือกทั้งหมด
wget http://asterisk.hosting.lv/bin/codec_g723-ast110-gcc4-glibc-x86_64-core2-sse4.so
wget http://asterisk.hosting.lv/bin/codec_g729-ast110-gcc4-glibc-x86_64-core2-sse4.so
3. ก๊อบปี้ไฟล์
- โค้ด: เลือกทั้งหมด
cp codec_g723-ast110-gcc4-glibc-x86_64-core2-sse4.so /usr/lib64/asterisk/modules/codec_g723.so
cp codec_g729-ast110-gcc4-glibc-x86_64-core2-sse4.so /usr/lib64/asterisk/modules/codec_g729.so
4. สตาร์ท Asterisk
- โค้ด: เลือกทั้งหมด
amportal stop
amportal start
5. รัน asterisk -rv อีกครั้ง
ก็เข้าได้แล้วครับ
- โค้ด: เลือกทั้งหมด
Asterisk 11.4.0, Copyright (C) 1999 - 2012 Digium, Inc. and others.
Created by Mark Spencer <markster@digium.com>
Asterisk comes with ABSOLUTELY NO WARRANTY; type 'core show warranty' for details.
This is free software, with components licensed under the GNU General Public
License version 2 and other licenses; you are welcome to redistribute it under
certain conditions. Type 'core show license' for details.
=========================================================================
Connected to Asterisk 11.4.0 currently running on elastix (pid = 6255)
elastix*CLI>
6. ทดสอบระบบ
อีกแป๊บนึงผมก็เห็น IP Phone ทะยอยรีจิสเตอร์เข้ามายัง Elastix ในที่สุดระบบ VoIP ของลูกค้าท่านนั้นก็กลับมาใช้งานได้ดีเช่นเดิมครับ