Memcached là một hệ thống cache hoạt động bằng cách lưu tạm thông tin những dữ liệu bạn hay sử dụng vào bộ nhớ RAM. Do tốc độ đọc ghi của bộ nhớ bao giờ cũng cao hơn so với lưu trữ file nên việc sử dụng memcached giúp cho hệ thống của bạn tăng tốc lên một cách đáng kể.

Mô hình hoạt động của Memcached:

memcached-architecture

Trong bài viết này, mình sẽ hướng dẫn các bạn cách cài đặt Memcached trên CentOS 7/6/5.

Cài đặt Memcached

– Cài đặt Remi repository với CentOS 5 (CentOS 7 và 6 không cần bước này)

## Remi Dependency on CentOS 5
rpm -Uvh http://dl.fedoraproject.org/pub/epel/5/i386/epel-release-5-4.noarch.rpm
rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-5.rpm

– Cài đặt Memcached package

## CentOS 7 and 6
yum install memcached

## CentOS 5
yum --enablerepo=remi install memcached

Bạn cần lưu ý là có 2 memcache package tồn tại là memcache và memcached (có thêm chữ d ở cuối) cũng như có 2 phiên bản PHP Extention Module tương ứng là php-pecl-memcache và php-pecl-memcached. Chúng ta sẽ sử dụng phiên bản thứ 2 (có chữ d) vì nó ổn định và hỗ trợ nhiều chức năng hơn.

Cấu hình Memcached

Thông số quan trọng nhất bạn cần lưu ý đó là CACHESIZE, đơn vị tính là MB và MAXCONN. Ví dụ như bên dưới mình sử dụng 128MB để cache (mặc định 64MB). OPTIONS cấu hình bảo mật chỉ cho local connect được tới port 11211 mà thôi.

# nano /etc/sysconfig/memcached
PORT="11211"
USER="memcached"
MAXCONN="10240"
CACHESIZE="128"
OPTIONS="-l 127.0.0.1 -U 0"

Khởi động Memcached

chkconfig memcached on
service memcached start

Để theo dõi tình trạng memcached, các bạn có thể có thể sử dụng phpMemcachedAdmin để xem ngay trên trình duyệt. PHPMemcachedAdmin chỉ cần tải về là có thể sử dụng, nên cài đặt trong thư mục quản lý của HocVPS Script để bảo mật. Cụ thể, mình sẽ cài đặt trong thư mục /home/hocvps.com/private_html/:

cd /home/hocvps.com/private_html/
wget https://github.com/elijaa/phpmemcachedadmin/archive/1.3.0.tar.gz
tar -xvzf 1.3.0.tar.gz
mv phpmemcachedadmin-1.3.0 memcached && chmod -R 777 memcached && chown -R nginx:nginx memcached
rm -f 1.3.0.tar.gz

Giờ bạn có thể truy cập PHPMemcachedAdmin qua domain:port/memcached/

Lưu ý: ở lần truy cập đầu tiên bạn sẽ thấy thông báo “Error : Configuration file or folder is missing, please fix this error and try again“. Bạn vào Editing Configuration rồi Save Live Configuration là xong.

Cài đặt Memcache và Memcached PHP Module

Để Memcached có thể hoạt động được với PHP, chúng ta cần cài đặt thêm PHP module.

PHP 5.5

yum --enablerepo=remi,remi-php55 install php-pecl-memcached php-pecl-memcache

PHP 5.6

yum --enablerepo=remi,remi-php56 install php-pecl-memcached php-pecl-memcache

PHP 7.0

yum --enablerepo=remi,remi-php70 install php-pecl-memcached php-pecl-memcache

PHP 7.1

yum --enablerepo=remi,remi-php71 install php-pecl-memcached php-pecl-memcache

Cuối cùng khởi động PHP và web server

service php-fpm restart
service nginx restart

Mở cổng Memcached (11211) trên Iptables Firewall

Trong trường hợp bạn sử dụng riêng một server để chạy Memcached thì cần phải mở port 11211 trên server cache.

Sử dụng lệnh sau

iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 11211 -j ACCEPT

Khởi động lại Iptables Firewall

service iptables restart

Cài đặt Memcached làm Session Handler

Bạn có thể cấu hình PHP sử dụng Memcached làm session handler, thay vì dùng files, để tăng hiệu năng xử lý của hệ thống. Tất nhiên thao tác này chỉ nên thực hiện với các mã nguồn sử dụng nhiều session, WordPress thì không cần.

Mở file cấu hình php.ini

nano /etc/php.ini

Tìm dòng [Session], thay thế session.save_handler = files bằng:

[Session]
session.save_handler = memcached
session.save_path = "127.0.0.1:11211"

Nhấn Ctrl+O để save file, Ctrl+X để đóng editor.

Nếu dùng phpMyAdmin, bạn cần tùy chỉnh cơ chế lưu trữ session của ứng dụng. Chỉnh sửa file session.inc.php của phpMyAdmin:

nano /home/domain.com/private_html/phpmyadmin/libraries/session.inc.php

_Uncomment (bỏ //) dòng: //ini_set('session.save_handler', 'files');
_Thêm dòng : ini_set('session.save_path', '/tmp');

Cuối cùng restart lại PHP

service php-fpm restart

Cài đặt Memcached làm việc với WordPress

Để Memcached có thể hoạt động với WordPress bạn cần sử dụng plugin cache W3 Total Cache.

W3 Total Cache

Trong phần cài đặt plugin, hãy chọn page cache method là Memcached cho các module Page Cache, Database Cache và Object Cache là xong.

Giờ thì hãy tận hưởng tốc độ vù vù mà Memcache đem lại nhé.

Xóa Memcached

Nếu không dùng nữa và muốn xóa hoàn toàn Memcached khỏi server, bạn hãy chạy lệnh bên dưới:

yum remove memcached php-pecl-memcached php-pecl-memcache
service php-fpm restart
service nginx restart

Chúc các bạn thành công!

Comment của bạn

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

340 Comments

  1. Binh Nguyen 50 comment

    Cho mình hỏi nếu đã cài Memcached và W3 Total Cache rồi thì có nên sử dụng WP Rocket nữa không? Hoặc nếu không cài memcached thì xài WP Rocket đucợ không?

    1. Việt Phương Moderator

      1. Memcached vs W3 Total Cache okie. Khi đó thì không dùng với WP-Rocket
      2. Okie

  2. Thoại 1 comment

    Dear admin,
    Cho mình hỏi nhờ. Mình đã từng cài đặt cache cho Centos 6 nhưng không nhớ cài đặt cái nào làm cache. Admin có thể chia sẻ giúp mình lệnh nào để kiểm tra xem mình đang dùng cái gì cho cache của Centos không ?

    Cảm ơn admin rất nhiều

  3. hong vi 44 comment

    Chào admin.. mình muốn cache đường dẫn ngoài. cụ thể link hình dưới thì làm sao ạ. (Mình dùng W3 total cache)
    “Tận dụng tính năng lưu vào bộ nhớ đệm của trình duyệt cho các tài nguyên có thể lưu trong bộ nhớ đệm sau:
    https://secure.gravatar.com/avatar/?s=160&d=mm&r=g (5 phút)”

    https://scontent.fdad3-2.fna.fbcdn.net/v/t1.0-9/41295348_2152898304997906_8306167863689871360_o.jpg?_nc_cat=0&oh=868df7f59f6df86b96720500fcb54e77&oe=5C3B37F2

  4. Tony 2 comment

    Mình vào file này nano /home/domain.com/private_html/phpmyadmin/libraries/session.inc.php
    nó không có gì trong đó hết, đã thay tên miền trong đường dẫn. vậy bước này phải làm sao hả bạn, mình không dùng wordprss.

    1. Việt Phương Moderator

      Vậy bạn không cần thực hiện bước sửa ý trong PHPMyAdmin nhé

  5. Nam 5 comment

    Bạn ơi mình dùng lệnh
    iptables -A INPUT -m state –state NEW -m tcp -p tcp –dport 11211 -j ACCEPT
    Khởi động lại Iptables Firewall
    service iptables restart
    xong đến bước này này web ko vào được, vào directadmin cũng ko được luôn
    Bạn có biết làm sao ko?

    1. Việt Phương Moderator

      Bạn kiểm tra có dùng csf không. Có thể bạn chặn hết port của mình rồi. Nếu không rõ thì disable iptables xem được không

        1. Nam 5 comment

          Mình kiểm tra có dùng csf bạn ạ, mình disable firewall đi thì chạy bình thường, giờ chỗ ở trên xử lý thế nào hả bạn?

          1. Nam 5 comment

            Cảm ơn bạn, mình làm được rồi. vps mình đang đang bị tình trạng vào https thì được, còn đánh tên không thì tự vào http và báo lỗi
            Apache is functioning normally
            Bạn có biết nguyên nhân ko?

          2. Nam 5 comment

            giờ trong wp total cache mình bị lỗi này:
            The following memcached servers are not responding or not running:

            Database Cache: 127.0.0.1:11211.
            Object Cache: 127.0.0.1:11211.
            Page Cache: 127.0.0.1:11211.
            hix

          3. Việt Phương Moderator

            1. Lỗi đánh tên không thì bạn kiểm tra lại webserver. Bạn dùng gì để redirect HTTP sang HTTPS thì kiểm tra phần đó
            2. Memcached lỗi hoặc server không thể kết nối được. Bạn kiểm tra lại port đã mở chưa.
            http://ping.eu/port-chk/
            Đã cài Memcached PHP Module chưa? Đã restart PHP chưa

  6. Vikwi 11 comment

    Làm thế nào để xóa được cache anh nhỉ? Em đã dùng chức năng xóa cache trong W3 total cache mà không thấy tác dụng, thử xóa dữ liệu trình duyệt cũng không được.

    1. Việt Phương Moderator

      Bạn tìm hiểu thêm về thông số thống kê của PHPMemcachedAdmin để hiểu Wasted mục đích gì nhé

  7. Minh 2 comment

    Mình cài PHPMemcachedAdmin 1.3.0 xong thì vào xem nó luôn báo ” An error has occured when retreiving or calculating stats”. Liệu như thế này thì có bị lỗi gì k mod nhỉ? Thanks mod!

    1. Việt Phương Moderator

      Memcached có thể vẫn bình thường. Chỉ là bên báo cáo nó không lấy được số liệu để thống kê

  8. Huy Tung 10 comment

    Cho mình hỏi là mình không có thư mục /home/hocvps.com/private_html/. Mình cũng đang dùng HOCVPS mà cd hoặc ls đều ko ra thư mục này

    1. Việt Phương Moderator

      Bạn thay đổi cho phù hợp với domain chính của mình nhé, nó không phải là /home/hocvps.com của hệ thống bạn

  9. Nguyet Hy 5 comment

    Anh Phương ơi, em cài Memcached hết rồi, nhưng tới bước cài plugin cache W3 Total Cache lên wp thì nó báo là bị xung đột pulgin với wp Rocket của em ?
    Vậy thì nên giải quyết sao đây anh ?

      1. Nguyet Hy 5 comment

        e cài xong hết rồi, nhưng khi vào Trong phần cài đặt plugin, chọn page cache method là Memcached thì lại không được !

        chổ Memcached ẩn đi chứ không click chọn được ! Vậy thì sao anh ?

        1. Việt Phương Moderator

          Bạn cài module PHP dành cho Memcached chưa? Và restart lại php-fpm chưa?

  10. Việt Hùng 13 comment

    Mình đã cài theo hướng dẫn nhưng khi vào ip:port/memcached thì chỉ ra trang ip:port. Còn vào bằng domain:port/memcached thì không load được luôn. Báo lỗi là mất quá nhiều thời gian để phản hồi.

    1. Việt Phương Moderator

      Cho mình kết quả của, và domain:port của bạn là gì
      ls -al /home/domain_chính_của_bạn/private_html
      ls -al /home/domain_chính_của_bạn/private_html/memcached

    1. Việt Phương Moderator

      1. Cho mình kết quả của ls -al /home/domain_chính_của_bạn/private_html/memcached
      2. Có thể ở phiên bản mới bạn không cần chỉnh sửa PHPMyAdmin nữa rồi

        1. Việt Phương Moderator

          Bạn kiểm tra tình trạng memcached đã bật chưa? Và các module PHP Memcached đã cài chưa?

          1. Quang 25 comment

            Web minh ko phai wordpress thi lam sao de kich hoat memcache vay ad?

  11. Dương 6 comment

    Sao mình đã cài xong memcached mà sao trong W3TC làm báo là chưa cài đặt memcached nhỉ?

      1. Dương 6 comment

        Giờ thì chạy đc rồi, nãy thử hoài mà ko bật đc, tự nhiên giờ thử restart nginx lại thì đc @@

  12. Hùng Phạm Ngọc 10 comment

    em chạy lệnh
    yum –enablerepo=remi,remi-php56 install php-pecl-memcached php-pecl-memcache

    thì gặp lỗi

    Error: php56w-common conflicts with php-common-5.4.16-43.el7_4.1.x86_64
    You could try using –skip-broken to work around the problem
    You could try running: rpm -Va –nofiles –nodigest

    ai biết fix k ạ, e dung centos 7 , php 5.6

    1. Việt Phương Moderator

      Hệ thống bạn hiện đang tồn tại php5.4. Bạn kiểm tra lại hệ thống đi nhé

        1. Việt Phương Moderator

          Bạn gỡ hoàn toàn PHP5.4 của bạn đi. Sao bạn có PHP5.4 trong hệ thống?

          1. Việt Phương Moderator

            Mục đích của bạn thì mình không rõ. Còn nếu bạn để thì cài Memcached sẽ lỗi

  13. Huy 6 comment

    Chào hocvps,

    Mình có cài memcached theo hướng dẫn, xài cả năm nay đều vẫn ổn, tự nhiên Digital Ocean họ disable/khóa cái VPS của mình lại vì họ kêu là do lỗi udp/11211 (memcached) dẫn tới VPS của mình bị tấn công DDoS.
    Nguyên văn: “Your Droplet was being used in an amplification attack that was using a service running on your Droplet. You can restrict access to udp/11211 (memcached) using a firewall rule. Once this is done, let us know and we can restore access to your Droplet. If you create a new Droplet from this one, you’ll want to be sure that you secure that service to prevent this type of issue in the future.”

    Bây giờ mình phải sửa lỗi này như thế nào ạ? VPS bị down mấy bữa nay rồi:(.

    1. Việt Phương Moderator

      Với option OPTIONS="-l 127.0.0.1" thì memcached chỉ truy cập được từ localhost thôi mà. Bạn có thể kiểm tra từ bên ngoài bằng http://ping.eu/port-chk/
      Còn trước tiên, bạn cứ áp dụng rule và contact họ mở VPS. Sau đó, bạn có thể thiết lập thêm rule firewall bên trong (iptables hoặc firewalld) để 11211 chỉ truy cập từ localhost

      1. Huy 6 comment

        Hi Phương, vậy các bước tiếp theo là: (1) yêu cầu D.O mở lại VPS, (2) thiết lập lại rule firewall bên trong (iptables hoặc firewall) phải ko? Thiết lập lại firewall này cụ thể như thế nào nhỉ?

      2. Huy 6 comment

        Mình thấy trong dashboard của Digital Ocean cũng có mục Firewalls. Mình có thể chỉnh sửa qua mục Firewalls này không?

          1. Kiên Nguyen 1 comment

            Bên Thachpham có khuyên nên chỉnh thông số trong phần cấu hình memcached là OPTIONS”-U 0″

            Thay vì OPTIONS”-1 127.0.0.1″

            Như vậy thì memcached có còn hoạt động không vậy mod ?

          2. Việt Phương Moderator

            Vấn đề ý thì mình không rõ rồi. Options 127.0.0.1 là để localhost truy cập được

  14. Huynh Ngoc Duy 10 comment

    Mình xài CentOS 6 x64 bị fail ngay bước cài đặt luôn là do sao vậy bạn?

    Downloading Packages:
    memcached-1.5.4-1.el6.remi.x86_64.rpm | 132 kB 00:00
    Running rpm_check_debug
    Running Transaction Test
    Transaction Test Succeeded
    Running Transaction
    error: Couldn’t fork %pre(memcached-0:1.5.4-1.el6.remi.x86_64): Cannot allocatememory
    Error in PREIN scriptlet in rpm package memcached-1.5.4-1.el6.remi.x86_64
    error: install: %pre scriptlet failed (2), skipping memcached-0:1.5.4-1.el6.remi
    Verifying : memcached-1.5.4-1.el6.remi.x86_64 1/1

    Failed:
    memcached.x86_64 0:1.5.4-1.el6.remi

    Mình cảm ơn!!!

  15. Bình 12 comment

    Mình cài Memcached bt, khi mở lên thì báo lỗi:
    Error message
    Connection refused

    Please check above error message, your configuration or your server status and retry
    Lúc trước mình làm ok h lại bị ?
    Mong Ad xem qua giúp.

    1. Việt Phương Moderator

      Khi mở lên là sao bạn. Lỗi này bạn gặp ở đâu? Và trạng thái memcached, nginx, php-fpm của bạn ntn?

        1. Việt Phương Moderator

          Tool đang không kết nối được với memcached để lấy thông số.
          1. Trạng thái service memcached của bạn như thế nào?
          2. Bạn click vào configuration trên thông báo ý ra kết quả gì