Hiện tại có rất nhiều hướng dẫn cấu hình để có thể tạo được VPS chịu tải lớn trên mạng thông qua load balancing, optimize các services… Hôm nay, mình sẽ hướng dẫn các bạn một cách khác sử dụng kết hợp HocVPS Script, Zend Opcache, Memcache để có thể xây dựng được VPS có thể chịu được hàng nghìn người online cùng lúc.

Mình đã thử cài đặt VPS ở Vultr với gói 0.022$/giờ ~ 15$/tháng, 2 CPU, 2GB RAM thấy có lúc online đến 4k (theo thống kê Google Analytics) vẫn chạy ổn. Tiếc là ko có điều kiện test lâu dài xem thực tế sức chịu đựng của VPS như thế nào.

Hình ảnh chụp lúc online 4.363 người ngày 12/11/2014, đo bằng Google Analytics, site tin tức bằng WordPress:

43633

Số lượng người online nhiều như vậy nhưng chỉ sử dụng hết 20% CPU, RAM còn thừa rất nhiều, nếu hoạt động hết công suất không biết lên đến mấy k online nữa 🙂

1. Cài đặt HocVPS Script

hocvps script

Sử dụng HocVPS Script bạn sẽ được tự động cài đặt và tối ưu LEMP server trên CentOS. Trước khi tiến hành cài đặt, nhớ chọn hệ điều hành CentOS, location Japan ở Vultr để có tốc độ về Việt Nam nhanh nhất.

Ngoài ra bạn nên tạo thêm swap 1GB cho VPS (thường swap gấp đôi hoặc ~ RAM)

Các bước cài đặt thực hiện tương tự như hướng dẫn cài đặt HocVPS Script.

2. Cài đặt Zend Opcache

Zend OPcache

Mục đích sử dụng Zend OPcache để tối ưu và tăng tốc PHP, điều này đặc biệt quan trọng và bắt buộc phải cài với những VPS có số lượng người online lớn. Qua đó giảm thiểu hoạt động của CPU và giảm đáng kể số lượng RAM mà PHP sử dụng.

HocvPS Script đã tự động cài đặt Zend OPcache giúp bạn, giờ chỉ cần điều chỉnh lại các tham số cho phù hợp với nhu cầu sử dụng của bạn mà thôi.

Bạn hãy theo dõi tình hình thực tế khi chạy VPS với 1 trình web viewer, ví dụ opcache-gui (server cài HocVPS thì đường dẫn là http://domain.com:port/op.php). Tăng hoặc giảm bộ nhớ làm sao giữ cho memory usage <= 70% là ổn, bộ nhớ còn trống sẽ được dùng cho các việc khác.

Lưu ý Bước tiếp theo bạn có thể dùng plugin cache như WP Super Cache hoặc Memcached với W3 Total Cache (bước 3 và 4). Nên thử với WP Super Cache trước, vì đa phần các website chỉ cần plugin này là đủ, mà cài đặt lại đơn giản.

3. Cài đặt Memcached

VPS-Memcached-WP-Site-Speed

Memcached mình sử dụng để cache query database, object và page cache. Thông thường, các dữ liệu trên thường được cache bằng cách sử dụng disk, nhưng memcached lưu thông tin trên RAM nên hiệu suất và tốc độ được tăng lên rất nhiều.

Các bạn thực hiện theo như hướng dẫn cài đặt memcached. Trong phần Cấu hình Memcached lưu ý tăng thông số MAXCONN="1024" thành MAXCONN="10240"

nano /etc/sysconfig/memcached

PORT="11211"
USER="memcached"
MAXCONN="10240"
CACHESIZE="64"
OPTIONS=""

Tương tự như Zend OPcache bên trên, bạn nên sử dụng tool theo dõi phpMemcachedAdmin, điều chỉnh đảm bảo cho bộ nhớ <= 70%, tránh việc thừa quá nhiều RAM (như blog Học VPS do chỉ là WordPress nên dành 64MB RAM cho memcached).

Ở bước cuối bạn không cần thiết phải cài plugin WP-FFPC cho WordPress vì chúng ta sẽ sử dụng plugin W3 Total Cache như hướng dẫn bên dưới.

4. Cấu hình W3 Total Cache

Để đảm bảo mọi thứ hoạt động trơn tru, các bạn hãy sử dụng plugin W3 Total Cache. Bình thường mình vẫn hay sử dụng plugin WP Super Cache vì nó đơn giản, dễ dùng và cũng rất hiệu quả (Canh Me hiện đang dùng). Tuy nhiên khi đã sử dụng đến Memcached, bạn bắt buộc phải chuyển qua W3 Total Cache hoặc WP-FFPC.

W3 Total Cache

Sau khi cài đặt xong plugin, các bạn hãy kích hoạt Page Cache, Database cache và Object Cache sử dụng method là Memcached. Ngoài ra, cũng cần kích hoạt Browser Cache và CDN nếu có thể.

Hãy nhấn vào từng mục để có thể cấu hình chi tiết cụ thể hơn.

Hi vọng, với bài viết này các bạn sẽ có thể tự build được 1 VPS chịu tải tốt. Đừng quên để lại comment bên dưới thông báo kết quả bạn đạt được sau khi thực hiện nhé.

Update: mình đã loại bỏ ngx_pagespeed khỏi bài viết do không cần thiết.
Tagged:

741 Comments

  1. Son Tran 6 comment

    Bác Luân ơi cho em hỏi chút.
    Em có cái webshop bán hàng đợt này rất hay bị

    Error establishing a database connection

    em cứ phải restart mysqld mới hoạt động trở lại được
    Hiện tại nó đang dùng theme MaxShop, có hơn 1k2 sản phẩm, dùng gói VPS 1GB Ram của Digital Ocean và cái EasyEngine.
    Mong bác giúp em có phương án xử lý, em đã thử Repair and Optimize Databases rồi nhưng cũng ko đc. Thanks

    1. Luân Trần Admin

      Server của bạn thiếu RAM rồi. Hãy kích hoạt Swap nếu chưa có, tối ưu lại cache.
      Nếu vẫn không được thì nâng lên gói cao hơn đi.

    2. Son Tran 6 comment

      Bác Luận giúp em với, em resize vps digitalocean lên gói 20$ và nó bị lỗi không khởi động được, gửi ticket họ gửi lại thế này.

      We have booted your droplet into the rescue environment.

      For instructions, please review the section “Attempt Recovery with a Recovery ISO” in the following document:

      https://www.digitalocean.com/community/tutorials/how-to-recover-from-file-system-corruption-using-fsck-and-a-recovery-iso#attempt-recovery-with-a-reco…

      If you wish for us to restore the Hard Drive as a boot device… please let us know!

      Sau khi em làm theo hướng dẫn thì vào đc ssh recovery, nhưng tất cả file nó đều mout về mnt rồi, download được source về nhưng database thì không biết lấy về thế nào,

      gửi ticket tiếp thì nhận được:

      Because you cannot run MySQL on the guestOS of the recovery ISO you’ll need to download the files enmass and then upload those to a server or OS that will let you get MySQL working. For example you can use a command like this to rsync all files from the Droplet to another:

      rsync -av –progress /mnt/var/lib/mysql root@remoteIP:/var/lib/mysql

      On the New Server, chown -R mysql:mysql /var/lib/mysql

      Then start MySQL. You’ll need to have the same version of MySQL on the new server.

      let us know if you have any questions about this.

      Bác xem có cách nào giúp em lấy lại database không chỉ cho em với, chứ mất database chắc em chớt, lấy lại đc data thì em tạo gói mới cài lại đc chứ ko thì huhuhu

        1. Son Tran 6 comment

          Không start đc bất kỳ dịch vụ nào ngoài việc download source về, em cũng vào thư mục sql download file ibdata1 và .frm, .idb về và lấy lại được data rồi bác ạ. Thanks bác đã nhiệt tình

  2. Z Mụp Nguyễn 36 comment

    Zend OP mình set 256MB nhưng memory usage luôn 100% và hit rate là 97%

    Theo ad mình có nên nâng dung lượng lên nữa không ? Mình xài 2 CPU / 2GB RAM + HOCVPS

    Tks ad

    1. Luân Trần Admin

      Hit rate cao là ngon, còn tuyệt đối không để memory usage 100%, ảnh hưởng đến performance hệ thống.

      1. Z Mụp Nguyễn 36 comment

        Vậy nếu 256 nếu mà vẫn full 100% vậy chắc phải nâng lên nữa hả ad. Vì mình nâng cao nhiêu thấy cũng full cả :d Nếu lên 512 luôn thì có ổ ko ta. Mà web gần như chưa có traffic nhiều. Vậy có là bất thường không

        1. Luân Trần Admin

          Do site của bạn nhiều file .PHP quá nên nó cần nhiều cache ấy mà. Không liên quan đến trafic nha.

      1. Z Mụp Nguyễn 36 comment

        Do cứ nhìn cái dòng đầu tiên nên cứ tưởng nó sắp full.

        Ngoài ra, khi reboot vps, khởi động nginx thì mình nhận được một thông báo lỗi với file /etc/nginx/conf.d/hocvps.com.conf

        file này là file rỗng hình như nó tự sinh ra. Sau khi xóa file thì khởi động nginx lại bình thường.

        Cái này có phải là lỗi không ad ?

        Cảm ơn ad nhé ^^

        1. Việt Phương Moderator

          File /etc/nginx/conf.d/domain.com.conf là file cấu hình nginx cho domain.
          Xóa đi là không còn phpmyadmin hay file manager đâu đó dù server vẫn hoạt động
          Mà file này rỗng sao đc nhỉ

  3. DINH QUANG TAN 1 comment

    mình cài đặt xong hết rồi thì xảy ra lỗi

    Warning: include(/home/iclbooku/public_html/wp-includes/images/smilies/page.php): failed to open stream: No such file or directory in /home/abc.com/public_html/index.php on line 3

    Warning: include(): Failed opening ‘/home/iclbooku/public_html/wp-includes/images/smilies/page.php’ for inclusion (include_path=’.:/usr/share/pear:/usr/share/php’) in /home/abc.com/public_html/index.php on line 3

    Warning: include(/home/iclbooku/public_html/wp-content/uploads/db.php): failed to open stream: No such file or directory in /home/abc.com/public_html/wp-config.php on line 5

    Warning: include(): Failed opening ‘/home/iclbooku/public_html/wp-content/uploads/db.php’ for inclusion (include_path=’.:/usr/share/pear:/usr/share/php’) in /home/abc.com/public_html/wp-config.php on line 5

    Nó hiện ở trên đầu trang web Bên dưới thì nội dung vẫn bình thường
    Bạn giúp mình khắc phục với

    1. Việt Phương Moderator

      Bạn xem các file đó theo các dòng ghi ở lỗi, có sửa đoạn nào không ?

    2. Luân Trần Admin

      Bản wordpress này của bạn bị lỗi gì rồi, kiểm tra lại cẩn thận đi.

  4. Sơn nhà Gia Phát 2 comment

    Chào bạn. mình đang tập tành học thêm cái VPS, mình đang muốn nâng cái PHP mà chưa biết cách làm. Bạn có bài viết nào hướng dẫn mình đc ko. Cám ơn bạn nhiều.

    1. Việt Phương Moderator

      Bạn theo hướng dẫn này nhé. Nhớ backup trước khi cài
      https://www.zerostopbits.com/how-to-upgrade-php-5-3-to-php-5-6-on-centos-6-7/
      1. Kiểm tra phiên bản PHP # php -v
      2. Cài đặt Remi và Epel repo, theo https://hocvps.com/cai-dat-epel-va-remi-repo-tren-centos/
      Bạn có thể kiểm tra xem nếu Remi và Epel đã cài ở hệ thống bằng # yum repolist
      3. Upgrade theo 2 cách:
      Cách 1: # yum --enablerepo=remi,remi-php56 upgrade php* -y
      Cách 2: Kích hoạt Remi repo bằng cách sửa # nano /etc/yum.repos.d/remi.repo
      Chuyển từ enabled=0 sang enabled=1 tại mục [remi] và [remi-php56] rồi save file lại và upgrade PHP: # yum -y upgrade php*
      5. Kiểm tra lại phiên bản PHP: # php -v

  5. Duy Nguyễn 1 comment

    Chào các bác, em muốn chia người dùng của 1 website ra nhiều server để giảm tải. Ví dụ: 500 CCU đầu vào 1 server , đến thằng 501->1k CCU thì lại cho vào 1 server khác . Thì làm như nào ạ ?

    Chi tiết được thì tốt hoặc các bác cho em “Key word” thôi cũng được ạ.

    Em cảm ơn các bác nhiều ạ !

  6. Huy Vũ 2 comment

    Hi Luân !
    Mình muốn sử dụng dịch vụ cài đặt sever tối ưu cho site wp được không.Luân cho mình nick Skype hoặc số điện thoại được không.

  7. Tuấn 11 comment

    Mình không hiểu mình cài memcached xong thì chạy rất ok nhưng khoảng 1 thời gian sau ví dụ từ tối đến sáng mai là ko vào đc website phải vào reset lại VPS mới vào được.. Cần giúp đỡ cảm ơn

      1. Tuấn 11 comment

        Không báo gì luôn bác trắng trang thôi. reset lại vps là lại ngon.. em không hiểu

        1. Luân Trần Admin

          Sau gặp lỗi trắng trang bạn check lại error log xem có thông tin gì không nhé?

  8. Nam Thanh 31 comment

    hi anh,

    Em không biết sao khi em cài plugin W3 Total Cache thì làm ảnh hưởng đến cronjob của server. Em xóa plugin đi thì cron job chạy bình thường. Server em CentOS, job em chạy 1 phút 1 lần. Làm sao sử dụng đc plugin này làm cache khi em đã dùng memcached

    1. Việt Phương Moderator

      Dùng Memcached để cache và plugin W3 Total Cache cấu hình sử dụng Memcached là mình thấy hiệu quả mà nhỉ

  9. Nam Phan 1 comment

    Cho e hỏi a dùng công cụ để test tải lớn vậy ạ. Có thể chạy local được không 🙂

  10. tivi 5 comment

    đúng là sư phụ nghe theo bác tiết kiệm đc khối tiền , lúc trước em sài vps ram 2g ở việt nam là 420k/ tháng mà chỉ chịu dc 2k là out . Còn làm theo bác em dùng ở Vultr chỉ 210k /tháng ram 1g mà chịu tải 4k không si nhê . Đúng là thánh

  11. An Quach 1 comment

    Cho mình hỏi bài viết có áp dụng được cho VPS 512-1Gb chạy Virtualmin không? Vì website mình không có nhiều lượt truy cập, nên mình dồn nhiều web vào chung VPS.

    1. Việt Phương Moderator

      Bạn thử thiết lập các 2,3,4 xem. Do hệ thống Virtualmin khác HocVPS nên mình cũng không rõ. Ram 512 là mức min cần thiết để chạy web trên VPS rồi

  12. TUAN LE VAN 11 comment

    Mình có dùng thử vps 300$ của google nhưng khi cài vào thì ko login được vào nữa báo sai cổng mình phải làm thế nào để dùng được ạ

    1. Việt Phương Moderator

      VPS GG bạn phải mở cổng thủ công(port 2222) trên trang quản lý VPS. Bạn kiểm tra lại nhé

  13. Leina 1 comment

    vps mình là 1cpu, 2GB ram, đang chạy hocvps, đã tạo swap, chạy WP, khi lượng người dùng online tầm 150 đến 200 là cpu cứ nhấp nhổm 99%, mặc dù ram chỉ tốn tầm 75%
    site đang chạy wp super cache + zend op cache của hocvps, ko biết mình có cần tối ưu gì nữa ko nhỉ, chứ cpu cứ max thế này site ì ạch dã man luôn 🙁

    1. Việt Phương Moderator

      WP Super Cache thích hợp cho đa số, dễ dùng, phù hợp với các website nhỏ. Nếu bạn dùng hệ thống VPS, bạn nên sử dụng kết hợp Memcached và W3 Total Cache. Cao hơn thì dùng hàng WP Rocket. Bạn kiểm tra lúc cao nhất thì service nào ngốn nhất?

  14. truongtuongtu 8 comment

    Bác Luân ơi cho em hỏi em đã cài memcache theo bác hướng dẫn rồi chỉnh thông số các kiểu đà điểu như bác hướng dẫn luôn. Nhưng khi cài W3 Total Cache vào thì dòng Memcached nó lại không sáng

      1. Việt Phương Moderator

        Bạn bị không sáng ở phần Cache nào? Ví dụ như hình: http://prntscr.com/egityy
        Ngoài ra, bạn khởi động Memcached chưa? Cấu hình test của # memcached-tool 127.0.0.1:11211 stats là gì

        1. truongtuongtu 8 comment

          Không sáng ở những phần chọn Memcache ấy bác

          http://prntscr.com/egiznr

          Cấu hình test đây bác ơi

          log_watcher_skipped 0
          log_worker_dropped 0
          log_worker_written 0
          lrutail_reflocked 0
          malloc_fails 0
          pid 1155
          pointer_size 64
          reclaimed 0
          reserved_fds 20
          rusage_system 11.289283
          rusage_user 18.261223
          threads 4
          time 1488772610
          time_in_listen_disabled_us 0
          total_connections 12
          total_items 0
          touch_hits 0
          touch_misses 0
          uptime 72038
          version 1.4.35
          [root@vultr home]#

  15. Nhi Hà 4 comment

    Em cài cái memcache rồi thấy anh bảo cài wp super cache rồi thì thôi nên em xóa nó đi chạy 2 lệnh
    service php-fpm restart
    service nginx restart
    sau đó em die cả website 🙁

      1. Nhi Hà 4 comment

        hình như nó restart không được bình thường 🙁 mình đã thử backup về bản cũ hơn mấy ngày và cũng không được (mặc dù mọi lần mình backup lại là chạy được). và thử tạo droplet từ backup đó vẫn bị vậy. giờ không biết phải làm sao :(((

        1. Việt Phương Moderator

          Bạn restart nginx thông báo gì? Mà restore về bản backup trước đó thì sao lại không được nhỉ

          1. Nhi Hà 4 comment

            mình cũng không biết nữa. hôm nay phải nhờ anh Luân sửa giúp cho. anh ấy bảo không hiểu sao nginx lại bị sai cấu hình. cả bản gốc hay backup đều bị sai

  16. ABdotG 1 comment

    Cám ơn Luân, bài viết rất chi tiết và rất hữu ích, nhưng VPS mình chỉ có 512 ram, ko biết Luân có hướng dẫn nào tối ưu cho VPS 512 ram chạy wordpress ko?

    1. Việt Phương Moderator

      Ram 512 là mức thấp nhất rồi. Bạn có thể chạy 1 web, cài đặt tối ưu thì chỉ cần sử dụng WP SuperCache, k cần Memcached + W3 Total Cache. Mình vẫn thấy mọi người dùng VPS 512 chạy site vệ tinh

Comment của bạn

Your email address will not be published. Required fields are marked *