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 *

297 Comments

  1. 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

  2. Huy 3 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 3 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 3 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

  3. 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!!!

  4. 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ì