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 *

355 Comments

  1. Chung Gi 1 comment

    Anh ơi cho em hỏi chút ạ
    Em có 1 cái vps, em chạy 2 cái site trên đó và có dùng chung memcache port 11211, nếu 2 site đó gọi chung 1 key memcache liệu nó có lấy chung giá trị của nhau ko ạ, giờ muốn tách ra mỗi site lấy 1 memcache riêng thì mình phải làm thế nào ạ

  2. Tung Lam 1 comment

    Nó thông báo thế này
    “The following memcached servers are not responding or not running:

    Database Cache: 127.0.0.1:11211.
    Page Cache: 127.0.0.1:11211.
    This message will automatically disappear once the issue is resolved.”

    Thì mình phải xử lý như thế nào vậy ad?

      1. thang 20 comment

        1. đúng mình dùng hocvps, vậy là số nào?tks
        2. trong plugin w3 total cache phần Page Cache, Database Cache và Object Cache mình chọn là Memcached và test passed ( màu xanh) là memcached đã hoạt động chưa? tks

        1. Việt Phương Moderator

          1. Bạn cài đặt hocvps chọn số nào thì nó là số đó nhé. Có thể kiểm tra lại qua /root/hocvps-script.txt
          2. Bạn đọc bài viết đó

  3. Binh Nguyen 60 comment

    Không hiểu mình cài Memcached + W3 cache xong giờ viết comment nó đều báo lỗi tới đường dẫn : abc.com/wp-comments-post.php
    “405 Not Allowed nginx” cả tháng nay k đụng tới code chỉ cài 2 thằng trên thui 🙁

      1. Binh Nguyen 60 comment

        Hic mình tìm ra nguyên nhân rồi bạn mình đã thêm block request spam comment và kết quả là không comment được j hết :((
        #Block Spam comment
        location ~* /wp-comments-post\.php$ {
        if ($http_user_agent ~* “x11; linux i686; rv:17” ) {
        return 403;
        }
        }

        1. Việt Phương Moderator

          Okie bạn. Noted. Nếu vậy đâu liên quan gì đến Memcached và W3 Total Cache