Hướng dẫn cách cài đặt Memcached trên Ubuntu | Việt Nét
Có rất nhiều nền tảng và ứng dụng giúp lưu trữ dữ liệu và đối tượng hay truy xuất lăp đi lặp lại nhiều lần. Một trong những nền tảng được nhiều nhà phát triển web sử dụng nhất là Memcached. Vậy các cài đặt và cấu hình nền tảng này như thế nào? Việt Nét sẽ giúp bạn thao tác chi tiết trong bài viết này.
Memcached là gì?
Memcached : Hệ thống giúp lưu trữ bản sao các dữ liệu và đối tượng được truy cập nhiều lần nhằm tối ưu tốc độ truy xuất. Các nhà phát triển và quản website sử dụng memcached để tối ưu hóa việc tải dữ liệu từ cơ sở dữ liệu cho các ứng dụng trên nền tảng web.

Hệ thống lưu trữ bản sao các đối tượng như Memcached có thể tối ưu hóa hiệu suất backend database bằng cách tạm thời lưu trữ thông tin trong bộ nhớ, lưu lại các bản ghi được truy cập nhiều lần hoặc được yêu cầu gần đây. Qua đó, nó giúp làm giảm số lượng yêu cầu trực tiếp đến cơ sở dữ liệu.
Bài viết này sẽ hướng dẫn chi tiết cách cài đặt và cấu hình Memcached server trên Ubuntu cũng như tìm hiểu thêm cách xác thực để bảo mật Memcached bằng Simple Authentication and Security Layer (SASL). Cuối cùng là cách liên kết Memcached với giao diện local hoặc private network để đảm bảo người dùng đã xác thực chỉ có thể truy cập trên các mạng đáng tin cậy.
Trước khi bắt đầu làm theo hướng dẫn bên dưới, bạn sẽ cần chuẩn bị:
- Một server Ubuntu 20.04 với user non-root sudo và đã bật tường lửa.
- Với những điều kiện này, bạn sẽ sẵn sàng cài đặt và bảo mật server Memcached của mình.
Cài đặt Memcached

Nếu bạn chưa cài đặt Memcached trên server của mình, bạn có thể cài đặt nó từ kho lưu trữ chính thức của Ubuntu. Trước tiên, hãy đảm bảo rằng index gói local của bạn được cập nhật bằng lệnh sau:
sudo apt update
Tiếp theo, để cài đặt gói chính thức nhập lệnh sau:
sudo apt install memcached
Bạn cũng có thể cài đặt libmemcached-tools, nó là một gói chứa các công cụ khác nhau mà bạn có thể sử dụng để kiểm tra, thử nghiệm và quản lý server Memcached của mình. Thêm vào server của bạn bằng lệnh sau:
sudo apt install libmemcached-tools
Memcached bây giờ sẽ được cài đặt như một dịch vụ trên server của bạn, cùng với các công cụ cho phép bạn kiểm tra khả năng kết nối của nó. Bây giờ bạn có thể chuyển sang bảo mật các cấu hình cài đặt của nó.
Cấu hình Memcached Network Settings
Nếu server Memcached của bạn chỉ cần hỗ trợ kết nối local IPv4 bằng TCP thì bạn có thể bỏ qua phần này và chuyển sang bước tiếp theo trong hướng dẫn này. Mặt khác, nếu bạn muốn cấu hình Memcached để sử dụng UDP sockets, Unix Domain Sockets hoặc thêm hỗ trợ cho kết nối IPv6, thì hãy tiến hành các bước trong phần này.

Đầu tiên, hãy đảm bảo rằng phiên bản Memcached đang lắng nghe trên giao diện local IPv4 loopback 127.0.0.1. Phiên bản Memcached hiện tại đi kèm với Ubuntu và Debian có tham số cấu hình -l được đặt cho giao diện local, có nghĩa là nó được cấu hình để chỉ chấp nhận các kết nối từ nơi server Memcached đang chạy.
Kiểm tra Memcached được liên kết với giao diện IPv4 127.0.0.1 local và chỉ lắng nghe các kết nối TCP bằng cách sử dụng lệnh ss:
sudo ss -plunt
Các flag khác nhau sẽ thay đổi output ss theo những cách sau:
- -p thêm tên của quá trình đang sử dụng socket
- -l giới hạn output chỉ cho các socket nghe, trái ngược với việc bao gồm các socket được kết nối với các hệ thống khác
- -u bao gồm các socket dựa trên UDP
- -n hiển thị giá trị số thay vì tên và giá trị có thể đọc được
- -t bao gồm các socket dựa trên TCP
Bạn sẽ nhận được kết quả như sau:
Output
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
. . .
tcp LISTEN 0 1024 127.0.0.1:11211 0.0.0.0:* users:(("memcached",pid=8889,fd=26))
. . .
Điều này có nghĩa là memcached được liên kết với địa chỉ IPv4 loopback 127.0.0.1 chỉ sử dụng giao thức TCP.
Bây giờ bạn đã kiểm tra và biết rằng Memcached được định cấu hình để chỉ hỗ trợ IPv4 với các kết nối TCP, bạn có thể chỉnh sửa file /etc/memcached.conf để thêm hỗ trợ cho các kết nối UDP, Unix Domain Sockets hoặc IPv6.
Cấu hình IPv6
Để bật kết nối IPv6 với Memcached, đầu tiên hãy mở file /etc/memcached.conf bằng nano hoặc text editor tùy thích của bạn:
sudo nano /etc/memcached.conf
Sau đó, hãy tìm dòng sau trong file:
/etc/memcached.conf
. . .
-l 127.0.0.1
Dòng này là nơi Memcached được cấu hình để nghe trên giao diện IPv4 local. Để thêm hỗ trợ IPv6, hãy thêm một dòng chứa địa chỉ local loopback IPv6 (:: 1) như sau:
/etc/memcached.conf
. . .
-l 127.0.0.1
-l ::1
Lưu và đóng file bằng cách nhấn CTRL + O rồi ENTER để lưu, tiếp theo CTRL + X để thoát nano. Sau đó khởi động lại Memcached bằng lệnh systemctl:
sudo systemctl restart memcached
Bây giờ bạn có thể kiểm tra xem Memcached cũng đang lắng nghe các kết nối IPv6 bằng cách lặp lại lệnh ss giống như phần trước:
sudo ss -plunt
Bạn sẽ nhận được kết quả như sau:
Output
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
. . .
tcp LISTEN 0 1024 127.0.0.1:11211 0.0.0.0:* users:(("memcached",pid=8889,fd=26))
. . .
tcp LISTEN 0 1024 [::1]:11211 [::]:* users:(("memcached",pid=8889,fd=27))
Các phần được đánh dấu của kết quả cho biết Memcached hiện đang lắng nghe các kết nối TCP trên giao diện IPv6 local.
Lưu ý rằng nếu bạn muốn tắt hỗ trợ IPv4 và chỉ lắng nghe các kết nối IPv6, bạn có thể xóa dòng -l 127.0.0.1 khỏi file /etc/memcached.conf và khởi động lại dịch vụ bằng lệnh systemctl.
Cấu hình UDP
Nếu bạn muốn sử dụng Memcached với UDP socket, bạn có thể bật hỗ trợ UDP bằng cách chỉnh sửa file cấu hình /etc/memcached.conf.
Đầu tiên mở file /etc/memcached.conf bằng nano hoặc text editor tùy thích của bạn, sau đó thêm dòng sau vào cuối file:
/etc/memcached.conf
. . .
-U 11211
Nếu bạn không cần hỗ trợ TCP, hãy tìm dòng -p 11211 và sửa nó thành -p 0 để tắt kết nối TCP.
Khi đã hoàn tất việc chỉnh sửa file, hãy lưu và đóng file bằng cách nhập tổ hợp CTRL + O để lưu, sau đó CTRL + X để thoát.
Tiếp theo, khởi động lại dịch vụ Memcached của bạn bằng lệnh systemctl để các thay đổi được áp dụng:
sudo systemctl restart memcached
Kiểm tra xem Memcached đang lắng nghe các kết nối UDP bằng cách sử dụng lại lệnh ss -plunt:
sudo ss -plunt
Nếu bạn đã tắt hỗ trợ TCP và đã bật kết nối IPv6, thì bạn sẽ nhận được kết quả như sau:
Output
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
. . .
udp UNCONN 0 0 127.0.0.1:11211 0.0.0.0:* users:(("memcached",pid=8889,fd=28))
udp UNCONN 0 0 [::1]:11211 [::]:* users:(("memcached",pid=8889,fd=29))
. . .
Lưu ý rằng kết quả của bạn có thể khác bên trên nếu bạn chỉ bật kết nối IPv4 và hoặc bật kết nối TCP.
Cấu hình Unix Domain Sockets
Nếu bạn muốn sử dụng Memcached với Unix Domain Sockets, bạn có thể bật hỗ trợ bằng cách chỉnh sửa file cấu hình /etc/memcached.conf. Lưu ý rằng nếu bạn định cấu hình Memcached để sử dụng Unix Domain Socket, Memcached sẽ vô hiệu hóa hỗ trợ TCP và UDP, vì vậy hãy chắc rằng các ứng dụng của bạn không cần kết nối bằng các giao thức trên trước khi bật hỗ trợ socket.
Đầu tiên mở file /etc/memcached.conf bằng nano hoặc text editor tùy thích của bạn, sau đó thêm dòng sau vào cuối file:
/etc/memcached.conf
. . .
-s /var/run/memcached/memcached.sock
-a 660
-a xác định quyền đối với file của socket. Và chỉ cho người dùng cần kết nối với Memcached là một phần của group memcache trên server của bạn, nếu không sẽ nhận được thông báo bị từ chối cấp quyền khi cố gắng truy cập socket.
Tiếp theo, khởi động lại dịch vụ Memcached bằng lệnh systemctl để các thay đổi của bạn được áp dụng:
sudo systemctl restart memcached
Kiểm tra Memcached đang lắng nghe các kết nối Unix Domain Socket chưa bằng cách sử dụng lệnh ss -lnx:
sudo ss -lnx | grep memcached
-x giới hạn output của ss để hiển thị các file socket. Bạn sẽ nhận được kết quả như sau:
Output
u_str LISTEN 0 1024 /var/run/memcached/memcached.sock 20234658 * 0
Sau khi đã cấu hình cài đặt mạng của Memcached, bạn có thể chuyển sáng ước kết tiếp là thêm SASL để xác thực khi người dùng vào Memcached.
Thêm người dùng được ủy quyền
Để thêm người dùng đã xác thực vào dịch vụ Memcached, bạn có thể sử dụng Simple Authentication and Security Layer (SASL), SASL là một khuôn khổ giúp loại bỏ các thủ tục xác thực khỏi các giao thức ứng dụng.
Trước tiên, bạn sẽ thêm hỗ trợ cho SASL vào server của mình, sau đó cấu hình để người dùng có thông tin xác thực. Khi chuẩn bị xong, bạn có thể bật SASL trong file cấu hình của Memcached và xác nhận mọi thứ đang hoạt động bình thường.
Thêm người dùng đã xác thực
Để thêm hỗ trợ SASL, bạn sẽ cần cài đặt gói sasl2-bin, gói này chứa các chương trình quản trị cho SASL database của người dùng. Công cụ này sẽ cho phép bạn tạo một người dùng hoặc những người dùng đã được xác thực. Chạy lệnh dưới đây để cài đặt nó:
sudo apt install sasl2-bin
Tiếp theo, tạo thư mục và file mà Memcached sẽ kiểm tra cài đặt cấu hình SASL, thực hiện bằng lệnh mkdir:
sudo mkdir -p /etc/sasl2
Bây giờ, hãy tạo file cấu hình SASL bằng nano hoặc text editor tùy thích của bạn:
sudo nano /etc/sasl2/memcached.conf
Thêm các dòng sau vào file cấu hình:
/etc/sasl2/memcached.conf
log_level: 5
mech_list: plain
sasldb_path: /etc/sasl2/memcached-sasldb2
Ngoài việc chỉ định cấp độ ghi log, ta sẽ đặt mech_list thành plain, điều này cho Memcached biết rằng nó nên sử dụng file mật khẩu của riêng mình và xác minh mật khẩu plaintext. Dòng cuối cùng mà bạn đã thêm chỉ định đường dẫn đến file database user mà bạn sẽ tạo tiếp theo. Lưu và đóng file khi bạn hoàn tất.
Bây giờ bạn sẽ tạo một SASL database với thông tin đăng nhập người dùng. Hãy sử dụng lệnh saslpasswd2 với tùy chọn -c để tạo mục nhập người dùng mới trong SASL database. Người dùng sẽ là sammy ở dưới đây, nhưng bạn có thể thay thế tên này bằng người dùng của riêng mình. Tùy chọn -f chỉ định đường dẫn đến database của bạn, đó sẽ là đường dẫn bạn đặt trong /etc/sasl2/memcached.conf:
sudo saslpasswd2 -a memcached -c -f /etc/sasl2/memcached-sasldb2 sammy
Cuối cùng, cấp cho người dùng memcache và quyền sở hữu nhóm đối với SASL database bằng lệnh chown như sau:
sudo chown memcache:memcache /etc/sasl2/memcached-sasldb2
Bây giờ bạn đã cấu hình SASL mà Memcached có thể dùng để xác thực. Trong bước tiếp theo, trước tiên bạn sẽ kiểm tra rằng Memcached đang chạy với cài đặt mặc định, sau đó cấu hình lại và kiểm tra rằng nó đang hoạt động với xác thực SASL.
Định cấu hình hỗ trợ SASL
Đầu tiên, bạn có thể kiểm tra khả năng kết nối của phiên bản Memcached bằng lệnh memcstat. Việc kiểm tra này sẽ giúp bạn xác định rằng Memcached đang chạy và được định cấu hình chính xác trước khi bật SASL và xác thực người dùng. Sau khi thực hiện các thay đổi đối với file cấu hình, bạn hãy chạy lại lệnh để kiểm tra kết quả output khác nhau. Để kiểm tra xem Memcached có đang hoạt động hay không bằng cách sử dụng lệnh memcstat, hãy nhập như sau:
memcstat --servers="127.0.0.1"
Nếu bạn đang sử dụng IPv6, hãy thay thế phần địa chỉ IPv4 127.0.0.1 thành :: 1. Nếu bạn đang sử dụng Unix Domain Socket, hãy sử dụng đường dẫn đến socket thay cho địa chỉ IP, ví dụ –servers=/var/run/memcached/memached.sock.
Khi bạn chạy lệnh memcstat và kết nối với Memcached thành công, bạn sẽ nhận được kết quả output như sau:
Output
Server: 127.0.0.1 (11211)
pid: 2299875
uptime: 2020
time: 1632404590
version: 1.5.22
. . .
Lưu ý: Nếu bạn đang sử dụng Memcached có hỗ trợ UDP, lệnh memcstat sẽ không thể kết nối với cổng UDP. Bạn có thể sử dụng lệnh netcat sau để kiểm tra kết nối UDP:
nc -u 127.0.0.1 11211 -vz
Nếu Memcached đang phản hồi, bạn sẽ nhận được kết quả output như sau:
Output
Connection to 127.0.0.1 11211 port [udp/*] succeeded!
Nếu bạn đang sử dụng Memcached với IPv6 và UDP, lệnh sẽ như sau:
nc -6 -u ::1 11211 -vz
Bây giờ bạn có thể chuyển sang bật SASL. Để làm như vậy, hãy thêm tham số -S vào file /etc/memcached.conf. Mở lại file bằng nano hoặc text editor tùy thích của bạn:
sudo nano /etc/memcached.conf
Ở cuối file, thêm những thông tin sau:
/etc/memcached.conf
. . .
-S
Tiếp theo, tìm và uncomment tùy chọn -vv, tùy chọn này sẽ cung cấp verbose output cho / var / log / memcached. Dòng uncomment sẽ trông như thế này:
/etc/memcached.conf
. . .
-vv
Lưu và đóng file. Sau đó khởi động lại dịch vụ Memcached bằng lệnh systemctl sau:
sudo systemctl restart memcached
Tiếp theo, kiểm tra journalctl logs cho Memcached để đảm bảo rằng hỗ trợ SASL đã được bật:
sudo journalctl -u memcached |grep SASL
Bạn sẽ nhận được một dòng kết quả như sau, cho biết rằng hỗ trợ SASL đã được khởi tạo:
Output
Sep 23 17:00:55 memcached systemd-memcached-wrapper[2303930]: Initialized SASL.
Bây giờ bạn có thể kiểm tra lại kết nối với Memcached. Với hỗ trợ SASL tại chỗ và được khởi tạo, lệnh memcstat sau sẽ không thành công nếu không có thông tin xác thực hợp lệ:
memcstat --servers="127.0.0.1"
Lệnh không được tạo ra kết quả đầu ra. Gõ lệnh shell sau để kiểm tra trạng thái của nó:
echo $?
$? sẽ luôn trả về exit code của lệnh cuối cùng đã thoát. Thông thường, bất kỳ thứ gì bên ngoài số 0 sẽ cho biết quá trình bị lỗi. Trong trường hợp này, bạn sẽ nhận được exit status là 1, cho biết rằng lệnh memcstat không thành công.
Chạy lại memcstat, lần này với tên người dùng và mật khẩu sẽ xác nhận quá trình xác thực có hoạt động hay không. Chạy lệnh sau và thay thế thông tin đăng nhập của bạn cho các giá trị sammy và your_password nếu bạn sử dụng các thông tin đăng nhập khác nhau:
memcstat --servers="127.0.0.1" --username=sammy --password=your_password
Bạn sẽ nhận được kết quả output như sau:
Output
Server: 127.0.0.1 (11211)
pid: 3831
uptime: 9
time: 1520028517
version: 1.4.25
. . .
Dịch vụ Memcached của bạn hiện đã được định cấu hình và đang chạy với hỗ trợ SASL và xác thực người dùng.
Cho phép truy cập qua mạng riêng (Tùy chọn)
Theo mặc định, Memcached chỉ được cấu hình để lắng nghe trên giao diện loopback local (127.0.0.1), giao diện này bảo vệ giao diện Memcached khỏi bị các bên bên ngoài tiếp xúc. Tuy nhiên, có thể có những trường hợp bạn cần cho phép truy cập từ các máy chủ khác. Trong trường hợp này, bạn có thể điều chỉnh cài đặt cấu hình của mình để liên kết Memcached với giao diện mạng riêng.
Giới hạn quyền truy cập IP với tường lửa
Trước khi bạn điều chỉnh cài đặt cấu hình, bạn nên thiết lập các firewall rule để giới hạn các máy có thể kết nối với server Memcached của bạn. Trước tiên, bạn sẽ cần ghi lại địa chỉ IP riêng của bất kỳ máy nào mà bạn muốn sử dụng để kết nối với Memcached. Khi bạn có địa chỉ IP riêng, bạn sẽ thêm firewall rule rõ ràng để cho phép máy truy cập Memcached.
Nếu bạn đang sử dụng UFW firewall, bạn có thể giới hạn quyền truy cập vào Memcached của mình bằng cách nhập thông tin sau trên server Memcached:
sudo ufw allow from client_system_private_IP/32 to any port 11211
Nếu nhiều hệ thống đang truy cập Memcached qua mạng riêng, hãy đảm bảo thêm các UFW rule bổ sung cho từng máy bằng cách sử dụng quy tắc trên làm mẫu. Với những thay đổi này, bạn có thể điều chỉnh dịch vụ Memcached để liên kết với giao diện mạng riêng của server.
Liên kết Memcached với giao diện mạng riêng
Bây giờ tường lửa của bạn đã sẵn sàng, bạn có thể điều chỉnh cấu hình Memcached để liên kết với giao diện mạng riêng của server thay vì 127.0.0.1.
Trước tiên, hãy tìm giao diện mạng riêng cho server Memcached của bạn bằng lệnh ip sau:
ip -brief address show
Tùy thuộc vào cấu hình mạng của server của bạn, output có thể khác với ví dụ sau:
Output
lo UNKNOWN 127.0.0.1/8 ::1/128
eth0 UP 203.0.113.1/20 10.10.0.5/16 2001:DB8::1/64 fe80::7ced:9ff:fe52:4695/64
eth1 UP 10.136.32.212/16 fe80::2cee:92ff:fe21:8bc4/64
Trong ví dụ này, các giao diện mạng được xác định bằng tên eth0 và eth1. Địa chỉ IPv4 được đánh dấu trên dòng eth0 là địa chỉ IP public cho server.
Địa chỉ 10.136.32.212 được đánh dấu trên dòng eth1 là địa chỉ IPv4 riêng cho server và địa chỉ fe80 :: 2cee: 92ff: fe21: 8bc4 là địa chỉ IPv6 riêng. Địa chỉ IP của bạn sẽ khác nhau nhưng sẽ luôn nằm trong các phạm vi sau dựa trên đặc điểm kỹ thuật RFC 1918):
- 10.0.0.0 to 10.255.255.255 (10/8 prefix)
- 172.16.0.0 to 172.31.255.255 (172.16/12 prefix)
- 192.168.0.0 to 192.168.255.255 (192.168/16 prefix)
Khi bạn đã tìm thấy địa chỉ hoặc địa chỉ IP riêng của server, hãy mở lại file /etc/memcached.conf bằng nano hoặc text editor tùy thích của bạn:
sudo nano /etc/memcached.conf
Tìm dòng -l 127.0.0.1 và thay đổi địa chỉ để phù hợp với giao diện mạng riêng của server:
/etc/memcached.conf
. . .
-l memcached_servers_private_IP
. . .
Nếu bạn muốn Memcached lắng nghe trên nhiều địa chỉ, hãy thêm một dòng tương tự khác cho mỗi địa chỉ, IPv4 hoặc IPv6 bằng cách sử dụng định dạng -l memcached_servers_private_IP.
Lưu và đóng file khi bạn hoàn tất.
Tiếp theo, khởi động lại dịch vụ Memcached:
sudo systemctl restart memcached
Kiểm tra cài đặt mới với ss để kiểm tra thay đổi:
sudo ss -plunt
Output
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
. . .
tcp LISTEN 0 1024 10.137.0.2:11211 0.0.0.0:* users:(("memcached",pid=8991,fd=27))
. . .
Kiểm tra kết nối từ ứng dụng bên ngoài để đảm bảo rằng bạn vẫn có thể truy cập dịch vụ. Bạn cũng nên kiểm tra quyền truy cập từ máy khách non-authorized (thử kết nối mà không có người dùng và mật khẩu) để đảm bảo rằng xác thực SASL của bạn đang hoạt động. Bạn cũng nên thử kết nối với Memcached từ một server khác không được phép kết nối để xác minh rằng các firewall rule bạn tạo có hiệu lực hay không.
Lời kết
Qua bài viết này ngoài việc đã hướng dẫn cài đặt Memcached trên Ubuntu, Việt Nét đã chia sẻ cách cấu hình Memcached với IPv4, IPv6, TCP, UDP và Unix Domain Sockets. Bảo mật Memcached server của mình, liên kết Memcached với giao diện mạng cục bộ hoặc mạng riêng và cách cấu hình các quy tắc tường lửa để giới hạn quyền truy cập vào hệ thống. Hy vọng bài viết này cung cấp cho bạn nhiều kiến thức bổ ích, chúc bạn thành công!
Ngoài ra, khi sử dụng dịch vụ VPS và Hosting, quý khách sẽ được tặng bộ Theme & Plugin WordPress bản quyền trị giá đến 800$/năm. Đăng ký dùng thử ngay và Việt Nét sẽ hoàn tiền 100% nếu quý khách không hài lòng với chất lượng sản phẩm, dịch vụ! Nếu bạn có thắc mắc hay có vấn đề cần hỗ trợ, bạn có thể liên hệ trực tiếp với Việt Nét thông qua các kênh sau: