Làm thế nào để chia sẻ Memcached giữa nhiều trang web WordPress trên cùng một máy chủ? Hướng dẫn cấu hình tối ưu, đảm bảo không xảy ra lỗi.

Liệu việc một máy chủ duy nhất chạy nhiều trang web WordPress cùng chia sẻ Memcached có gây ra hiện tượng ghi đè dữ liệu hoặc sự cố kết nối chéo không?

Bài viết này cung cấp hướng dẫn từng bước về cách tách biệt hoàn hảo dữ liệu bộ nhớ đệm tạm thời và bộ nhớ đệm đối tượng trên các trang web khác nhau bằng cách cấu hình tiền tố bộ nhớ đệm riêng biệt (WP_CACHE_KEY_SALT) và các tập lệnh bộ nhớ đệm đối tượng.

Loại bỏ hoàn toàn xung đột dữ liệu, cho phép nhiều trang web cùng lúc tận hưởng trải nghiệm tăng tốc bộ nhớ tối ưu, đồng thời bao gồm các mẹo an toàn để ngăn ngừa sự cố trong môi trường sản xuất!

Vài ngày trước, một người bạn hỏi tôi về ba trang web WordPress đang chạy trên máy chủ của anh ấy. Anh ấy muốn cấu hình Memcached để tăng tốc độ, nhưng lại lo lắng dữ liệu sẽ bị lỗi.

Tôi bật cười lúc đó vì chính mình cũng từng mắc phải cái bẫy này.

Làm thế nào để chia sẻ Memcached giữa nhiều trang web WordPress trên cùng một máy chủ? Hướng dẫn cấu hình tối ưu, đảm bảo không xảy ra lỗi.

Thành thật mà nói, Memcached cực kỳ dễ thiết lập cho một trang web duy nhất, nhưng nó trở nên thú vị hơn khi nhiều trang web cùng tồn tại. Tại sao?

Theo mặc định, Memcached đặt tất cả bộ nhớ cache tạm thời và bộ nhớ cache đối tượng của các trang web vào cùng một nhóm. Hãy tưởng tượng nếu trang web A và B sử dụng cùng một khóa bộ nhớ cache—điều đó sẽ gây ra hỗn loạn. Dữ liệu của A sẽ ghi đè trực tiếp lên dữ liệu của B, và hai trang web sẽ bắt đầu "can thiệp" vào dữ liệu của nhau.

Điều tôi bắt gặp còn nực cười hơn nữa: trang chi tiết sản phẩm trên một trang web thương mại điện tử lại hiển thị nội dung của một bài viết từ một trang blog khác. Tôi hoàn toàn sững sờ, tự hỏi: "Chuyện quái gì thế này?!"

Tôi mất cả đêm để tìm ra vấn đề; hóa ra đó là xung đột khóa bộ nhớ cache.

Hôm nay tôi chia sẻ phương pháp cấu hình của mình với hy vọng nó có thể giúp ích cho những người bạn có cùng nhu cầu. Tôi vẫn đang tự mình tìm hiểu và một số ý tưởng của tôi có thể chưa hoàn thiện, nhưng phương pháp này đã hoạt động tốt với tôi.

Chuẩn bị môi trường máy chủ

Trước khi bắt đầu cấu hình WordPress, bạn phải đảm bảo rằng máy chủ đã cài đặt dịch vụ Memcached và tiện ích mở rộng PHP Memcached.

Tôi có thể cài đặt Memcached bằng HestiaCP như thế nào?

Lấy Ubuntu làm ví dụ, thao tác này chỉ cần ba dòng lệnh.

sudo apt update
sudo apt install memcached php-memcached
sudo systemctl restart php8.x-fpm  # 根据你的 PHP 版本改

Sau khi cài đặt, hãy nhớ kiểm tra xem dịch vụ Memcached có đang chạy hay không.

sudo systemctl status memcached

Nếu bạn thấy "đang hoạt động (đang chạy)", điều đó có nghĩa là không có vấn đề gì.

Lưu ý rằng tên gói có thể khác nhau giữa các hệ thống. Đối với các hệ thống dựa trên Debian, lệnh này thường được sử dụng; tuy nhiên, đối với CentOS hoặc các bản phân phối khác, bạn có thể cần sử dụng yum hoặc dnf để cài đặt.

Lúc đó tôi đang dùng Ubuntu 20.04, và toàn bộ quá trình diễn ra khá suôn sẻ.

Thao tác chính: Cấu hình tiền tố bộ nhớ đệm

Bước này là cốt lõi của toàn bộ quá trình cấu hình và là chìa khóa để ngăn ngừa sự nhầm lẫn dữ liệu.

Bạn cần thêm một tiền tố bộ nhớ cache duy nhất vào tệp wp-config.php trong thư mục gốc của mỗi trang web WordPress.

Mở tệp wp-config.php của trang web đầu tiên và tìm dòng chú thích này.

/* That's all, stop editing! Happy blogging. */

Thêm vào phía trên dòng này

// 网站 A 的配置
define( 'WP_CACHE_KEY_SALT', 'site1_unique_string_' );

Sau đó, mở tệp wp-config.php trên trang web thứ hai và thêm cấu hình tương tự.

// 网站 B 的配置
define( 'WP_CACHE_KEY_SALT', 'site2_unique_string_' );

Tôi nói với bạn rằng, chuỗi ký tự theo sau WP_CACHE_KEY_SALT phải hoàn toàn độc nhất . Tôi khuyên bạn nên sử dụng tên miền hoặc tên viết tắt của trang web của mình, chẳng hạn như site1_com_ hoặc site2_net_.

Tôi lười biếng nên đã dùng số, nhưng ba tháng sau tôi hoàn toàn quên mất số nào tương ứng với trang web nào, và tôi phải tra cứu từng cái một, điều này thực sự rất đau đầu.

Hãy suy nghĩ về điều này: Memcached hoạt động bằng cách lưu trữ và truy xuất dữ liệu dựa trên các khóa bộ nhớ đệm. Nếu bạn đặt một tiền tố duy nhất cho mỗi trang web, dữ liệu của chúng sẽ được tách biệt một cách tự nhiên và sẽ không gây nhiễu lẫn nhau.

Điều này giống như việc mỗi trang web có một ngăn tủ riêng. Mặc dù tất cả đều ở trong cùng một phòng, nhưng chìa khóa lại khác nhau, vì vậy dữ liệu sẽ không bị lẫn lộn.

Bật tính năng lưu trữ đối tượng vào bộ nhớ đệm.

Sau khi cấu hình tiền tố, bước tiếp theo là cho phép WordPress thực sự sử dụng Memcached.

Ở đây có hai lựa chọn, và tôi đã thử cả hai. Mỗi lựa chọn đều có những ưu điểm riêng.

Phương án 1: Sử dụng plugin (phương pháp đơn giản nhất)

Đăng nhập vào trang quản trị WordPress và cài đặt plugin bộ nhớ đệm hỗ trợ Memcached.

Tôi khuyên bạn nên sử dụng W3 Total Cache ; nó khá ổn định. Sau khi cài đặt, trong phần cài đặt plugin, hãy chọn Memcached làm loại bộ nhớ cache, nhập 127.0.0.1 cho máy chủ và cổng mặc định 11211, sau đó lưu lại.

Nếu bạn muốn một giải pháp thuần túy hơn, bạn có thể cài đặt trực tiếp plugin Memcached Object Cache , plugin này được thiết kế riêng cho nhiệm vụ này và không có bất kỳ chức năng phụ nào khác.

Thành thật mà nói, ban đầu tôi nghĩ cách tiếp cận bằng plugin khá tốt vì nó tiện lợi. Nhưng sau đó tôi phát hiện ra rằng một số plugin đi kèm với rất nhiều tính năng mà tôi không cần, và tôi luôn lo lắng về các bản cập nhật, sợ rằng chúng sẽ đột nhiên thêm một tính năng nào đó làm hỏng cấu hình của tôi.

Phương án 2: Triển khai thủ công object-cache.php (dễ kiểm soát hơn)

Nếu bạn là người cầu toàn giống tôi và không muốn cài đặt quá nhiều plugin, bạn có thể sử dụng giải pháp này.

Tải xuống plugin Memcached Object Cache từ kho plugin chính thức của WordPress, hoặc tìm tệp object-cache.php mới nhất trên GitHub. Sau đó, tải tệp object-cache.php đã giải nén lên thư mục wp-content của mỗi trang web thông qua FTP hoặc SSH.

Lưu ý rằng đây là thư mục gốc của wp-content, chứ không phải thư mục con plugins.

Sau khi thêm vào, WordPress sẽ tự động nhận diện và kích hoạt bộ nhớ đệm. Bạn không cần cấu hình gì thêm, vì nó sẽ đọc biến môi trường WP_CACHE_KEY_SALT mà bạn đã thiết lập trước đó trong tệp wp-config.php.

Tôi muốn tiết kiệm thời gian, vì vậy tôi đã sử dụng giải pháp này chủ yếu vì tính kiểm soát của nó. Nếu có vấn đề phát sinh, tôi biết phải tìm giải pháp ở đâu và sẽ không bị bất ngờ bởi các bản cập nhật plugin tự động.

Hãy kiểm tra xem cấu hình có hiệu lực hay không.

Sau khi chuẩn bị xong mẫu, chắc chắn bạn sẽ muốn biết liệu nó có thành công hay không, đúng không?

Cách đơn giản nhất là kiểm tra trạng thái của Memcached. Kết nối bằng telnet hoặc công cụ nc.

echo "stats" | nc 127.0.0.1 11211

Sau đó, bạn sẽ thấy một loạt các số liệu thống kê. Hãy đặc biệt chú ý đến các giá trị của `cmd_set` và `get_hits`, và làm mới trang một vài lần để xem chúng có tăng lên hay không. Nếu có, điều đó có nghĩa là bộ nhớ đệm đang hoạt động chính xác.

Một cách trực quan hơn để kiểm tra điều này là mở cả hai trang web cùng lúc và xem chúng có gây xung đột với nhau hay không. Nếu trang web A không hiển thị nội dung từ trang web B, thì về cơ bản điều đó có nghĩa là tiền tố đang hoạt động.

Tôi đã thực hiện một bài kiểm tra thậm chí còn nghiêm ngặt hơn vào thời điểm đó. Tôi đã thiết lập các giá trị tạm thời khác nhau trên hai trang web khác nhau và sau đó sử dụng công cụ nc để truy vấn trực tiếp dữ liệu trong Memcached. Tôi thực sự có thể thấy hai cặp khóa-giá trị với các tiền tố khác nhau, hoàn toàn không có sự nhầm lẫn nào.

Lúc đó, tôi thực sự cảm thấy mình đã hoàn thành được một việc gì đó tuyệt vời, và chỉ cần nghĩ đến thôi cũng khiến tôi cảm thấy thật tuyệt.

Đừng xem nhẹ các vấn đề an toàn

Vì tất cả các trang web đều dùng chung một phiên bản Memcached duy nhất, nên có một rủi ro bảo mật mà bạn cần lưu ý.

Về lý thuyết, nếu có người dùng khác truy cập máy chủ, họ có thể đọc dữ liệu được lưu trong bộ nhớ cache của bạn thông qua một cổng cục bộ. Mặc dù điều này đòi hỏi một mức độ chuyên môn kỹ thuật nhất định, nhưng thận trọng vẫn là điều nên làm.

Do đó, bạn phải đảm bảo rằng dịch vụ Memcached của bạn tuyệt đối không lắng nghe các địa chỉ IP công cộng . Hãy chắc chắn rằng dòng này có trong tệp cấu hình `/etc/memcached.conf`.

-l 127.0.0.1

Bằng cách này, Memcached sẽ chỉ lắng nghe địa chỉ loopback cục bộ và sẽ không thể truy cập được từ bên ngoài.

Nếu bạn có yêu cầu bảo mật cực kỳ cao, hoặc nếu máy chủ của bạn lưu trữ các trang web mà người dùng khác cảm thấy không an tâm, tôi khuyên bạn nên xem xét sử dụng Redis thay vì Memcached. Redis hỗ trợ cách ly đa cơ sở dữ liệu và xác thực mật khẩu, giúp nó an toàn hơn nhiều.

Tuy nhiên, việc cấu hình Redis phức tạp hơn một chút so với Memcached. Nếu bạn chỉ sử dụng cho mục đích cá nhân hoặc nhóm nhỏ, Memcached với giới hạn lắng nghe 127.0.0.1 về cơ bản là đủ.

Một số cạm bẫy gặp phải

Cuối cùng, tôi muốn chia sẻ một vài khó khăn mà tôi đã gặp phải, hy vọng sẽ giúp bạn tránh được một số rắc rối.

Hãy đảm bảo phiên bản tiện ích mở rộng PHP của bạn tương thích . Trước đây tôi từng gặp trường hợp cài đặt tiện ích mở rộng php-memcached nhưng WordPress không nhận ra nó. Sau đó tôi phát hiện ra nguyên nhân là do phiên bản PHP không tương thích. Hãy kiểm tra kỹ phiên bản PHP của bạn khi cài đặt các tiện ích mở rộng để tránh cài đặt nhầm.

Hãy chắc chắn rằng bạn đã thiết lập đúng đường dẫn đến tệp object-cache.php . Tệp này phải được đặt trong thư mục gốc của wp-content, chứ không phải thư mục plugins. Một người bạn của tôi đã đặt nó sai vị trí và mất rất nhiều thời gian để sửa mà không thành công.

Đừng sử dụng các chuỗi ngắn cho tiền tố bộ nhớ cache của bạn . Ban đầu tôi đã sử dụng các chuỗi như a_ và b_, nhưng tôi thấy chúng quá ngắn và dễ xung đột với các khóa bộ nhớ cache do WordPress tự tạo. Hãy sử dụng ít nhất một chuỗi ngẫu nhiên gồm bảy hoặc tám ký tự hoặc một từ viết tắt của tên miền.

Khi xóa bộ nhớ cache, hãy nhớ xóa bộ nhớ cache cho cả hai trang web . Có lần, tôi chỉ xóa bộ nhớ cache cho một trang web, nhưng trang web kia vẫn giữ dữ liệu cũ, gây ra sự không nhất quán giữa hai trang web. Tôi mất rất nhiều thời gian để tìm ra vấn đề.

Thành thật mà nói, tôi không biết liệu những kinh nghiệm này có hữu ích với tất cả mọi người hay không, nhưng tôi đã chia sẻ chúng mà không hề do dự.

Viết ở cuối

Về mặt kỹ thuật, việc cấu hình Memcached cho nhiều trang web không quá phức tạp; vấn đề cốt lõi là cấu hình tiền tố bộ nhớ cache. Tuy nhiên, chi tiết mới là điều quan trọng. Các vấn đề về khớp phiên bản, đường dẫn tệp và cấu hình bảo mật có thể gây ra cho bạn rất nhiều rắc rối.

Tôi đã sử dụng phương pháp này gần một năm nay, quản lý ba trang web WordPress, và cho đến nay tôi chưa gặp phải vấn đề lớn nào. Nếu bạn cũng đang làm việc tương tự, bạn có thể thử phương pháp này.

Nhân tiện, nếu bạn có giải pháp nào tốt hơn hoặc gặp phải bất kỳ khó khăn thú vị nào, hãy thoải mái để lại bình luận và chia sẻ nhé. Tôi rất muốn học hỏi từ bạn.

Tóm lại, càng nhiều người biết về điều này thì càng ít người rơi vào bẫy, đúng không?

Vì bạn đã đọc đến đây, nếu thấy hữu ích, hãy nhấn thích và chia sẻ nhé. Nếu muốn nhận thông tin cập nhật sớm nhất, bạn cũng có thể theo dõi tôi!

Cảm ơn bạn đã đọc bài viết của tôi. Hẹn gặp lại lần sau.

Hy vọng bài viết "Cách chia sẻ Memcached với nhiều trang web WordPress trên cùng một máy chủ? Hướng dẫn cấu hình tối ưu để tránh 100% lỗi" được chia sẻ trên blog của Chen Weiliang ( https://www.chenweiliang.com/ ) sẽ hữu ích cho bạn.

Bạn có thể thoải mái chia sẻ liên kết bài viết này: https://www.chenweiliang.com/cwl-34368.html

Để khám phá thêm nhiều mẹo ẩn🔑, vui lòng tham gia kênh Telegram của chúng tôi!

Chia sẻ và thích nếu bạn thích nó! Những chia sẻ và lượt thích của bạn là động lực tiếp tục của chúng tôi!

 

发表 评论

您的邮箱地址不会被公开。必填项已用*标注

Di chuyển về đầu trang