Chống 500 anh em cùng bộ đôi Memcached & Redis Cache

DirectAdmin lại là DirectAdmin dạo gần đây mình nhận khá nhiều vụ tối ưu cho em nó. Khách hàng lần này có lượng user online kha khá đại khái rơi vào khoảng 400 ~ 600 user. Với VPS RAM 2GB mình đã kiến nghị dùng EasyEngine vì thấy họ dùng WordPress nhưng họ không đồng ý. Thế cũng được chiến thôi, anh em có cùng nhu cầu thì chúc anh em vui với bài chia sẻ này nhé!

Bước 1: Cài đặt Swap

Mình kích hoạt Swap cho VPS vì những server không có swap, khi hết RAM hệ thống thường tự động stop service MySQL, do đó hay xuất hiện thông báo lỗi Establishing a Database Connection.

Để biết hệ thống đã có Swap hay chưa bạn chạy lệnh:

swapon -s

nếu thấy hình sau thì hệ thống chưa có Swap

kiem-tra-swap

Chạy lệnh sau để tạo Swap, ở đây mình tạo 1GB bạn nào muốn tạo 2GB thì đổi thông số count=2048k.

Khuyên anh em nên tạo gấp đôi dung lượng RAM đang có thôi nhé!

sudo dd if=/dev/zero of=/swapfile bs=1024 count=1024k

tao-swap

Tiếp theo, tạo phân vùng, bảo mật Swap với lệnh sau:

mkswap /swapfile
chown root:root /swapfile 
chmod 0600 /swapfile

Kích hoạt Swap:

swapon /swapfile

Kiểm tra lại xem Swap có hoạt động chưa?

swapon -s

kiem-tra-swap-da-hoat-dong

Cấu hình Swappiness cho Swap. Swappiness là mức độ ưu tiên sử dụng Swap thường thì mình chỉnh là 10 tức là khi ram thật còn 10% thì bắt đầu chuyển sang sử dụng Swap. Có nhiều mức độ sử dụng từ 0 đến 100. Để biết mình đang ở mức độ nào gõ lệnh sau:

cat /proc/sys/vm/swappiness

nếu kết quả trả về không vừa ý thì chỉnh lại bằng lệnh sau:

sysctl vm.swappiness=10

Để thiết lập không thay đổi mỗi khi khởi động lại VPS bạn thêm vm.swappiness = 10 vào cuối file /etc/sysctl.conf như hình.

thiet-lap-swappiness

Thiết lập swap tự động được kích hoạt mỗi khi reboot

echo /swapfile none swap defaults 0 0 >> /etc/fstab

Bước 2: Cài đặt Memcached

Memcached sẽ mang dữ liệu bạn thường truy cập lên bộ nhớ RAM. RAM thì luôn có tốc độ cao hơn ổ cứng nên đó là lý do mình đã kích hoạt Swap ở bước trên.

Với CentOS 6 & 7 bạn gõ lệnh sau là cài đặt được luôn Memcached

yum install memcached

Cần cấu hình lại Memcached một chút ở bước này, bạn cấu hình y như bên dưới

nano /etc/sysconfig/memcached

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

Rồi bây giờ bạn hởi động lại Memcached và xem nó có hoạt động hay không

chkconfig memcached on
service memcached start

kiểm tra lại bằng lệnh

memcached-tool 127.0.0.1:11211 stats

Nếu số uptime ở cuối hoạt động thì bạn đã làm đúng các thao tác trên.

Để 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

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

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

Bước 3: Cài đặt Redis Cache

Về cơ bản thì Redis giống Memcached nhưng hỗ trợ rất nhiều loại cấu trúc như String. hash, list,sets,… lúc đầu thì mình cái Redis để thay thế Memcached nhưng không hiểu sao khi cài Redis không thì VPS có dấu hiệu đuối sức nên mình đã thử cài một mình Memcached nhưng tình trạng không khả quan mấy và mình đã quyết định cài cả 2 thử xem nhưng thế nào. Kết quả là VPS đã mượt mà và chống nổi 500 anh em. Tức nhiên đây là cách xử lý chủ quan của mình bro nào có cách giải quyết tốt hơn xin chia sẻ bên dưới comment để anh em cùng học hỏi nhé!

Để cài Redis Cache anh em kiểm tra xem VPS mình là 64bit hay 32bit trước nhé! Bằng lệnh

uname -r

nếu kế quả trả về không phải i386 thì các bạn đang dùng 64bit

32bit:

wget http://dl.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm

64bit:

wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

chạy tiếp các lệnh sau để cài đặt

rpm -Uvh epel-release-6*.rpm
rpm --import http://dl.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL-6

Bây giờ bắt đầu cài đặt Redis và PhpRedis extension để kết nối PHP với Redis, cấu hình Redis tự chạy khi khởi động và khửi chạy Redis bằng các lệnh sau:

yum install redis php-pecl-redis
chkconfig redis on

Kiểm tra xem Redis đã chạy chưa

redis-cli ping

Nếu bạn nhận được từ PONG có nghĩa là Redis đã cài đặt thành công và đang chạy
Kiếm tra xem PHP đã kết nối với Redis chưa

php -m | grep redis

Nếu bạn nhận được kết quả là redis thì PHP đã kết nối với Redis.

Để xem Redis có đang hoạt động không

redis-cli monitor

Nếu nhảy thông số liên tục là Redis đang hoạt động. Bây giờ anh em có thể reboot lại VPS để tận hưởng tốc độ.

Một số lệnh thao tác với Redis

redis-cli flushdb
redis-cli flushall
redis-cli info

Và không ngoại trừ một số lý do bạn muốn xóa một trong các thứ này thì dùng các lệnh sau nhé!

Xóa Memcached

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

Xóa Redis Cache

yum remove redislabs

Xóa Swap

swapoff /swapfile
rm -f /swapfile

Chúc anh em thành công, bài viết này dựa trên quá trình thực tế mình làm và kinh nghiệm chủ quan của mình nên có gì sai sót mong anh em chém nhẹ tay thôi nghen 😀

7 Comments

Leave a Comment

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

This site uses Akismet to reduce spam. Learn how your comment data is processed.