ติดตั้ง/ปรับแต่ง DirectAdmin เพื่อให้รองรับจำนวนคนจำนวนมาก

อันนี้เป็นประสบการณ์กากๆของผมที่ทำต้องจัดการให้เซิฟเวอร์ที่ใช้ DirectAdmin อยู่ สามารถรองรับจำนวนคนได้เยอะๆครับ วิธีการง่ายๆดังนี้ครับ

  1. ปรับ Web Server ให้ใช้ Nginx เป็น Reverse Proxy (อ้างอิงวิธีการจาก ลิงค์นี้)
    1. ก่อนอื่นสำหรับ คนที่ติดตั้ง DirectAdmin ไปแล้วต้องมั่นใจว่า CustomBuild ต้องมากกว่าเวอร์ชั่น 2 สามารถตรวจสอบได้โดย SSH เข้าไป แล้วใช้คำสั่งดังนี้
      cd /usr/local/directadmin/custombuild
      ./build version

      ดูว่าเลขหน้าสุดเป็นเลข 2 ไหมครับ ถ้าไม่ ให้ทำการปรับ CustomBuild เป็นเวอร์ชั่น 2 ครับ โดยสามารถทำได้ตามลิงค์นี้ครับ หรือสั่งคำสั่งด้านล่างนี้ครับ (คำเตือน Backup ทุกอย่างก่อน Update ทุกครั้ง)

      cd /usr/local/directadmin
      mv custombuild custombuild_1.x
      wget -O custombuild.tar.gz http://files.directadmin.com/services/custombuild/2.0/custombuild.tar.gz
      tar xvzf custombuild.tar.gz
      cd custombuild
      ./build
      ./build all d
      ./build rewrite_confs
    2. ติดตั้ง Nginx เป็น Reversed Proxy ซึ่งตรงนี้ทาง DirectAdmin เริ่ม Support การติดตั้งอัตโนมัติแล้ว สามารถทำได้ตามคำสั่งด้านล่างนี้ครับ
      cd /usr/local/directamin/custombuild
      ./build update
      ./build update_da
      ./build set webserver nginx_apache
      ./build nginx_apache
      ./build rewrite_confs
    3. เมื่อติดตั้งเสร็จแล้ว มันยังมีปัญหานิดหน่อยครับ คือตัว Apache ทีให้บริการ Web App นั้นมอง IP ของเซิฟเวอร์เองเป็น Client เนื่องจากวิ่งผ่าน Nginx จึงต้องลง mod เพิ่ม ดังนี้ครับ
      cd /usr/local/src
      wget https://github.com/y-ken/mod_rpaf/archive/master.zip
      unzip master.zip
      cd mod_rpaf-master
      /bin/sed -i "s/remote_/client_/g" mod_rpaf-2.0.c
      make && make install

      จากนั้นไปที่ /etc/httpd/conf/extra/httpd-includes.conf  แล้วเพิ่มข้อความต่อไปนี้ลงล่างสุดครับ

      LoadModule rpaf_module      /usr/lib/apache/mod_rpaf-2.0.so
      <IfModule mod_rpaf-2.0.c>
          RPAFenable On
          RPAFproxy_ips 127.0.0.1
          RPAFsethostname On
          RPAFheader X-Client-IP
      </IfModule>
  2. ปรับแต่งเซิฟเวอร์เพื่อให้รองรับคนจำนวนมากได้ (จำเป็นค่อนข้างมาก ไม่งั้นอาจจะเจอ Bad Gateway หรือ Gateway Timeout บ่อย)
    1. ปรับแต่ง Kernel Queue เพื่อให้รับการเชื่อมต่อจำนวนมากๆได้ โดยใช้คำสั่งต่อไปนี้
      sysctl -w net.core.somaxconn=100000

      และเพิ่มบรรทัดต่อไปนี้ลงในไฟล์ /etc/sysctl.conf

      net.core.somaxconn=100000
    2. ปรับแต่ง Port ที่ระบบใช้ได้ให้มากกว่าเดิม โดยใช้คำสั่งต่อไปนี้
      sysctl -w net.ipv4.ip_local_port_range="10000 65535"

      และเพิ่มบรรทัดต่อไปนี้ลงในไฟล์ /etc/sysctl.conf

      net.ipv4.ip_local_port_range=10000 65535
    3. ปรับแต่งให้ปิดการเชื่อมต่อได้เร็วขึ้น เพื่อเอาไปใช้รับการเชื่อมต่อใหม่ โดยใช้คำสั่งต่อไปนี้
      sysctl -w net.ipv4.tcp_tw_reuse=1

      และเพิ่มบรรทัดต่อไปนี้ลงในไฟล์ /etc/sysctl.conf

      net.ipv4.tcp_tw_reuse=1
    4. อันนี้ผมจำไม่ได้ว่ามันทำอะไรครับ แต่เห็นเซิฟเวอร์ปัจจุบันมี และคิดว่าค่อนข้างสำคัญ
      sysctl -w net.ipv4.ip_nonlocal_bind=1

      และเพิ่มบรรทัดต่อไปนี้ลงในไฟล์ /etc/sysctl.conf

      net.ipv4.ip_nonlocal_bind=1
    5. ปรับแต่งเพิ่มจำนวนไฟล์สูงสุดที่ 1 โปรเซสเปิดได้ให้มากที่สุด โดยใช้คำสั่งต่อไปนี้
      ulimit -n 999999

      และเพิ่มบรรทัดต่อไปนี้ลงในไฟล์ /etc/security/limits.conf

      * soft nofile 999999
      * hard nofile 999999
  3. ปรับแต่งให้ Nginx ให้บริการ Static File (ไฟล์ที่ไม่ประมวลผลเช่นภาพเป็นต้น) โดยไม่ผ่าน Apache เพราะ Nginx สามารถทำงานด้านนี้ได้ดีกว่า Apache มาก (คำเตือน วิธีนี้จะทำให้ส่วนที่ถูกซ่อนไว้ โดย Password Protected Directories ของ DirectAdmin อาจจะทำให้ข้อมูลที่ถูกซ่อนบางส่วนหลุดไปได้โดยไม่ถามรหัสผ่าน แต่ผมว่าในเคสทั่วไปไม่ค่อยมีคนใช้) โดยสั่งคำสั่งดังต่อไปนี้
    cd /usr/local/directadmin/data/templates/custom
    wget "https://www.ishare.in.th/wp-content/uploads/2015/02/conf.zip"
    unzip conf.zip
    rm -f conf.zip
    cd /usr/local/directadmin/custombuild
    ./build rewrite_confs
    service nginx reload

    เพียงเท่านี้ Nginx ก็จะให้บริการ Static File ส่วนมากให้ทันที (ผมอาจจะ list ไม่หมดเพราะผมก็ไปคัดลอกจากที่อื่นมาครับ)

เพียงเท่านี้ก็คิดว่าเซิฟเวอร์ปัจจุบันของท่านก็น่าจะรับโหลดเพิ่มขึ้นได้อีกเยอะครับ หากยังไม่สามารถรองรับได้อีก อาจจะต้องปรับ nginx ให้ cache หน้าที่ประมวลผลไว้สักหน้าละ 10 – 60 วิ แล้วแต่กรณีไป แต่พอดีที่ๆผมทำงาน Implement ระบบ Cache ด้านในไว้ เลยไม่มีปัญหามากครับ

Exit mobile version