Server

Debian VS CentOS

posted on 26 Jun 2009 15:17 by totiz in Server

    บทความนี้จะเป็นเรื่องเฉพาะทางของ Linux นะครับ

 

    หลายคนเคยใช้ หรือกำลังสนใจที่จะใช้ Linux เป็น Server ไม่ว่าจะ Web Server, Mail Server, DNS Server, Gateway, ...  หรืออื่นๆ อีกมากมาย  แต่ยังติดอยู่ที่ว่าจะใช้ตัวไหนดี

    ถ้าพูดถึงความนิยมแล้ว ก็จะมีแค่ 2 ค่ายหลักๆ ก็คือ Debian กับ CentOS ทั้ง 2 ค่ายนี้ต่างมี นักพัฒนา และ
แอดมินทั่วโลกให้การสนับสนุนอยู่ 

    มี Admin ท่านหนึ่งกล่าวไว้ว่า

I have used both as a user. I can confidently say both do the job equally
well.

As an administrator, I always prefer debian or debian based distros. But
that is because I spend most of my time on Debian and know it much better
than centos. In any case, aside from the proprietary stuff, what you can do
in debian, can be done in centos as well. It is a matter of where you can
get something done efficiently and quickly.

If the admin is comfortable/has experience with debian, go with Debian. If
the admin has experience with centos, go with centos.

just my 2 cents
raju

    แปล

ไม่ว่าจะเป็น Debian หรือ CentOS ต่างก็สามารถทำงานได้พอๆ กัน

แต่ผมชอบ Debian มากกว่าเพราะ ผมได้ใช้เวลากับมันมากกว่า CentOS ทำให้ผมถนัด Debian มากกว่า
แต่ในความเป็นจริงแล้ว  อะไรๆที่คุณทำได้บน Debian ก็สามารถทำได้บน CentOS เช่นกัน
มันขึ้นอยู่กับว่าคุณถนัดตัวไหนมากกว่ากันต่างหาก

ถ้าคุณถนัด Debian ก็ใช้ Debian ถ้าคุณถนัด CentOS ก็ใช้ CentOS

 
    ถ้าหากใครยังลังเลว่าจะใช้ตัวไหนละก็  ก็ลองมันทั้ง 2 ตัวเลยก็ได้ครับ  แล้วชอบตัวไหนก็ใช้ตัวนั้น
เพราะมันก็ทำงานได้เหมือนๆ กัน (ผมชอบ CentOS มากกว่า เพราะผมใช้แต่ CentOS ^_^)

อ้างอิง: http://linux.derkeiler.com/

    บทความนี้จะเป็นเรื่องเฉพาะทางหน่อยนะครับ  สำหรับคนทีเ่ป็น Admin Linux ควรจะรู้เอาไว้

  • ปัญหา  Read-only file system เป็นปัญหาที่อาจเกิดกับ Drive ที่ Mount เอาไว้ใน Linux
    แล้วมีการปิดระบบโดยฉับพลัน เช่น ไฟดับ, ปิดระบบโดยกดปุ่ม Power, โปรแกรม Crash ขณะกำลังเขียนไฟล์

    ซึ่งปัญหาตรงนี้มันเป็นที่ตัวระบบไฟล์  ไม่ใช่ว่าตัว Harddisk มีปัญหาอย่างที่หลายคนเข้าใจ(รวมทั้งผมด้วย)
วิธีแก้ก็คือ  ต้องกู้ตัวระบบโครงสร้างไฟล์กลับคืนมาโดยสั่งตามนี้เลยครับ

  • ปิด Service ทุกตัวที่อ่านไฟล์ตรง Drive ที่มีปัญหาอยู่
  • umount -l /dev/xxx (เช่น umount -l /hdd1) Unmount ตัว Drive ที่มีปัญหา
  • fsck -fn /dev/xxx (เช่น fsck -fn /dev/sda1)  เพื่อตรวจสอบดูก่อนว่ามีปัญหาจริงหรือป่าว
  • fsck -fy /dev/xxx (อาจใช้เวลาเป็น ชม.) หลังจากที่ตรวจสอบแล้วพบว่ามีปัญหาจริง ก็ค่อยสั่งบรรทัดนี้ครับ  โดยคำสั่งนี้จะไปตรวจสอบ และแก้ไขจุดที่ผิดพลาดต่างๆ
  • Mount (เช่น mount /dev/sda1 /hdd1) กลับเข้าที่เดิม
  • ทดสอบลองเขียนไฟล์ลงไปดู เท่านี้ก็เป็นอันเรียบร้อยครับ
ที่มา: http://markmail.org/message/fnvp7aww46xqdmac

  หากเวปที่มีจำนวน connect ปริมาณมากๆ  ไม่ว่าจะเป็น Apache และ Lighttpd หากไม่ปรับแต่งอะไรเลย
ก็มีโอกาสตัว Web server จะทำงานไม่ทันได้ง่ายๆ

การปรับแต่ง Lighttpd สำหรับ connection ปริมาณมากๆ

  •  server.max-keep-alive-requests = 0
      สำหรับกำหนดว่า connection ต้องเป็นแบบ close เท่านั้น(ลด concurrent connection ไปได้เยอะ)
  • server.network-backend = "writev"
      สำหรับเวปที่มีการส่งไฟล์ใหญ่ๆ เช่นพวกเวปดาวน์โหลดไฟล์ ควรใช้ network-backend เป็น writev(ที่มา)
  • server.max-connections = 8192
      กำหนดจำนวน connection มากสุด
  • server.max-fds = 16384
      กำหนดจำนวนการเปิดไฟล์ทั้งหมด(socket, file,php)
  • server.max-worker = 128
      กำหนดจำนวน process ที่จะใช้ทำงานสำหรับรองรับ request ต่างๆ (ยิ่งเวปเรามี delay จากระบบ network มากเท่าไร ค่านี้ก็ควรกำหนดเอาไว้เยอะๆ)
  • server.max-stat-threads  = 128
      เป็นค่าที่กำหนดจำนวน stat() sys-call ยิ่งเยอะยิ่งดีเช่นกัน(แต่ต้องพอดีๆ ที่มา)
  • server.max-read-threads = 512
      กำหนดจำนวน thread ที่จะใช้ในการอ่านไฟล์พร้อมๆกัน
  วันนี้ก็พอเท่านี้ก่อนนะครับ ไว้วันหลังจะนำ Tips การปรับแต่งมาลงอีก(ถ้าไม่ขี้เกียจซะก่อนนะ ^_^)

    หลังจากศึกษา Lighttpd มานานอยู่หลายวันและลองเล่นใน VMWare อยู่สักพัก
พอมาวันนี้ลองเอาไปรันจริงบน Server ที่ปกติใช้ Apache อยู่ ก่อนอื่นมาดู Stats ของ Server ดูก่อน

  • 5.7 requests/sec
  • 908 requests currently being processed
  • ram used: 1.9 GB
  • CPU: 1.52    2.14    3.05

    หลังจาก switch จาก apache มาเป็น lighttpd ครั้งแรก ผลปรากณว่ารันไปได้ไม่เกิน 1 นาทีเดี้ยงครับ อาการคือ Lighttpd ยังรันอยู่แต่ไม่รับ request เพิ่มผมก็เลยไป search หาทางแก้ดู ผลปรากฎว่าเหตุผลที่ เป็นอย่างนี้เพราะไม่ได้กำหนด server.max-fds เอาไว้

    อธิบายสั้นๆ ก่อนครับว่า  server.max-fds คือค่าที่เอาไว้กำหนดลิมิตของ file descriptors ซึ่ง file descriptors ใน Lighttpd จะหมายถึง การเปิดไฟล์ และการสร้าง socket ผมเลยกำหนดใหม่จากเดิมค่า Default มันเป็น 1024 เลยกำหนดให้เป็น 204
ที่มา : http://redmine.lighttpd.net/wiki/lighttpd/Docs%3APerformance

     แล้วสั่ง restart ใหม่ ผลปรากฎว่าไม่ล้มครับ  รันได้ปกติและกินแรมน้อยลงด้วยอีกต่างหาก จาก 1.9 GB เหลือ 436 MB และ CPU เหลือ 1.72    1.37    2.29

สรุป

ข้อดี 

  • Lighttpd ความเร็วไม่แตกต่างกันเท่าไรนัก  แต่ทางด้านทรัพยากรถือว่าประหยัดกว่ามาก
  • หาก Config ดีๆ จะทำให้เร็วกว่ามาก เช่นพวก mod_cache mod_mcl, ...
  • features ดีๆเยอะ เช่น x_sendfile และอื่นๆ(ผมยังลองเล่นนิดเดียวเอง)
  • การ Config ค่าต่างๆ จัดได้ว่าง่ายกว่า Apache พอสมควร
  • ความเสถียรคงไม่ต้องพูดถึง พราะเวปใหญ่ๆอย่าง youtube, wikipedia, meebo เองก็ใช้
  • รองรับ Fastcgi แทน php module ใน apache ซึ่งได้ยินว่าแรงมาก  แต่ผมยังไม่ได้รองจริงๆ จังๆ
  • มี x-sendfile ที่นับว่าเป็นจุดเด่นอย่างหนึงของตัว Lighttpd เลยที่เดียว (เป็นเหตุผลหลักที่ผมย้ายมาใช้ด้วย)
ข้อเสีย
  • ตัว Lighttpd  ยังใหม่มากเมื่อเทียบกับ Apache ทำให้สังคมคนใช้ยังน้อยอยู่
  • หาคน support ยาก เพราะยังน้องใหม่อยู่เ่ช่นกัน
  • ไม่รองรับ .htaccess ซึ่งค่อนข้างจะเป็นปัญหาสำหรับเวปที่ config อะไรๆ ใน .htaccess ไว้เยอะก็ต้องมา config ใหม่ใน lighttpd ที่รูปแบบการ config ก็ต่างกัน
  • บ้างอย่างที่มีใน Apache จะไม่มีใน Lighttpd แต่หาอย่างอื่นมาทดแทนได้โดยส่วนมาก

สรุปโดยรวม

     สำหรับเวปที่มีโหลดสูงๆ และรันเพียงไม่กี่ site ในเครื่องเดียว  แนะนำให้ใช้ครับเพราะถ้า mod ดีๆ จะแรงกว่ามาก และลดทัพยากร server ได้เยอะด้วย 

    ส่วนเหตุผลที่เหมาะกับ site น้อยๆ เพราะว่า  หากต้องการ config อะไรมันไม่สามารถทำได้เหมือ .htaccess ทำให้ต้อง reload ตัว lighttpd ใหม่ซึ่งอาจยุ่งยากถ้าจะจัดการกับ site ที่มีปริมาณมากๆ ซึ่งในที่นี ผมรันแค่ site เดียวทำให้สบายครับในเรื่องนี้

edit @ 21 May 2009 03:10:57 by totiz

edit @ 21 May 2009 03:12:09 by totiz

กำหนดตามนี้ครับ

 

relayhost = [xxx.xxx.xxx.xxx]:25
#relayhost = [mailtmp.nonstopbit.com]:50
#relayhost = [smtp.loxinfo.co.th]:25

#auth
smtp_sasl_auth_enable=yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd

#tls
smtp_use_tls = yes
smtp_sasl_security_options = noanonymous
smtp_sasl_tls_security_options = noanonymous
smtp_tls_note_starttls_offer = yes
tls_random_source = dev:/dev/urandom
smtp_tls_scert_verifydepth = 5
smtp_tls_key_file=/etc/postfix/certs/itchy.key
smtp_tls_cert_file=/etc/postfix/certs/itchy.pem
smtpd_tls_ask_ccert = yes
smtpd_tls_req_ccert =no
smtp_tls_enforce_peername = no

 

 อย่าลืมเปลี่ยน xxx.xxx.xxx.xxx เป็น IP ปลายทางด้วยนะครับ

 หลังจากนั้นให้สร้างไฟล์  /etc/postfix/sasl_passwd ขั้นมาแล้วกำหนดังนี้

  •  xxx.xxx.xxx.xxx   User:PassWord

 อย่าลืมกำหนด User Password ให้ถูกต้องด้วยนะครับ
 หลังจากนั้นก็สั่งตามนี้

  •  postmap hash:/etc/postfix/sasl_passwd

 ตามด้วย

  •  service postfix restart

 เพียงเท่านี้ก็เรียบร้อยแล้วครับ
 ท่านสามารถตรวจสอบการทำงานได้โดยสั่ง tail -f /var/log/maillog