Published on

Unix socket phần 2: Hướng dẫn cài đặt trên VPSSIM / HocVPS

Authors

Bài viết hướng dẫn tăng tốc website bằng Unix socket 🔗 của mình được hưởng ứng nhiều hơn là mong đợi. Cũng từ đó có rất nhiều bạn 🔗 đã yêu cầu có bài viết hướng dẫn cho VPSSIM HocVPS, một trong những script quản lý VPS được rất nhiều người Việt và cả ngoài nước sử dụng hiện nay. Sở dĩ mình gom chung cả 2 script vào làm hướng dẫn vì cả hai script đều chạy trên CentOS 7 và chắc chắn có nhiều stack giống nhau (MySQL, PHP, Nginx...), vì vậy việc gom chung vào một bài viết là khá hợp lý.

Nếu bạn đang sử dụng EasyEngine và Ubuntu, hãy đọc Phần một: Unix socket, “ma tốc độ” thường bị lãng quên 🔗 để dễ thực hiện theo nhé.

Bài này là phần hai mình viết về Unix socket, có thể sẽ có phần 3 phần 4, dù mình chưa biết sẽ viết về gì, có thể là Centminmod là các script quản lý VPS khác. Bài này mình lại chia làm hai phần, một là cho HocVPS, một là cho VPSSIM.

Có downtime! Những thay đổi này sẽ khiến website bạn ngưng hoạt động trong khoảng 30s – 1 phút. Vì vậy, nếu website quan trọng, hãy đọc hết bài viết thật kĩ rồi mới tiến hành thay đổi.

Nên thực hiện theo thứ tự này để đảm bảo downtime ít nhất có thể bạn nhé.


Cách sử dụng Unix socket trên HocVPS

Với HocVPS 🔗 thì mình thấy khá đơn giản, cài đặt xong bạn sẽ có những phần mềm quen thuộc như MariaDB, PHP, Nginx,... Vậy là cũng tương tự với bài hướng dẫn dành cho EasyEngine thôi nên mình sẽ đi nhanh qua.

MySQL

Luôn bắt đầu với MySQL trước. Không cần tìm tập tin cấu hình để kiểm tra MySQL có chạy ở socket đâu, chỉ cần gõ command như bài trước của mình là được rồi:

[root@hocvps ~]# netstat -ln | grep "unix.*mysql"  
unix  2    [ ACC ]   STREAM   LISTENING   25363 /var/lib/mysql/mysql.sock

Nếu gặp thông báo lỗi netstat: command not found, hãy cài đặt công cụ net-tools bạn nhé.

yum install net-tools

Tuyệt vời! MySQL đã chạy sẵn ở chế độ socket rồi, do đó mình cài đặt một trang WordPress mới để kiểm tra thử và hoạt động trơn tru. Với WordPress, hãy mở tập tin wp-config.php và thay đổi dòng:

define('DB_HOST', 'localhost');

thành đường dẫn socket của MySQL vừa tìm được ở trên:

define('DB_HOST', 'localhost:/var/lib/mysql/mysql.sock');

Vậy là xong. Bạn thử truy cập vào website WordPress của bạn xem có hoạt động không nhé. Để chắc chắn WordPress đang kết nối MySQL bằng socket, hãy cài plugin Server Info 🔗 và xem ở Settings > Server Info.

PHP

Mặc định HocVPS chỉ sử dụng 1 phiên bản PHP duy nhất, mình cài đặt bản PHP 7.1 mới nhất và chạy rất tốt. Để chuyển php-fpm sang sử dụng socket, hãy mở tập tin /etc/php-fpm.d/**www.conf** tìm dòng listen = 127.0.0.1:9000 và sửa lại thành:

;listen = 127.0.0.1:9000  
listen = /var/run/php71-fpm.sock

Ở đây các bạn có thể khởi động lại service php-fpm ngay để nhận setting mới. Tuy nhiên trang sẽ bị lỗi 502 Bad gateway, điều này là tất nhiên khi Nginx không thể kết nối tới php-fpm ở cổng 9000 (TCP/IP) nữa do bạn đã tắt đi rồi.

Vì vậy, các bạn hãy chuyển luôn sang bước tiếp theo là cấu hình Nginx mà chưa cần khởi động php-fpm ngay, hạn chế downtime nha.

Nginx

Việc thay đổi cấu hình Nginx là bắt buộc để có thể nhận cấu hình php-fpm mới. Điều rất tiếc là HocVPS không sử dụng upstream để cấu hình, mà cấu hình riêng trên từ virtual host, điều đó dẫn tới 2 nhược điểm nếu bạn quyết định sử dụng socket:

  • Các website tạo sau này, khi vừa tạo xong sẽ bị lỗi 502 Bad Gateway vì vẫn giữ cấu hình cũ, gọi php-fpm ở TCP/IP.
  • Nếu có nhiều domain thì việc cấu hình sẽ rất cực do phải chỉnh sửa từng file.

Nhưng đừng nản, mình có cách để replace nhanh toàn bộ dòng 127.0.0.1:9000 thành unix:/var/run/php71-fpm.sock, hãy sử dụng lệnh sau đây để thực hiện nhé.

$ sed -i -e 's/127.0.0.1:9000/unix:\/var\/run\/php71-fpm.sock/g' /etc/nginx/conf.d/*.conf

Nhấn enter để chạy command sẽ không có kết quả trả về gì đâu, nhưng tất cả tập tin cấu hình virtual host đã được thay đổi rồi, mở ra một file domain.conf nào đó kiểm tra lại là được.

Bạn cần chạy lệnh này mỗi khi tạo domain mới, sau đó restart Nginx nhé. Không cần nữa, bạn chỉ việc thay toàn bộ dòng 127.0.0.1:9000 thành unix:/var/run/php71-fpm.sock trong tập tin /etc/hocvps/menu/them-domain là xong, toàn bộ tên miền mới sẽ nhận được cấu hình này.

Sau bài viết này, mình cũng sẽ comment lại với bên HocVPS để có thể có phiên bản mới hỗ trợ upstream, để anh em ta cấu hình một lần là đủ.

Khi đã thực hiện xong hết tất cả các bước, chỉ việc khởi động lại php-fpm và Nginx để nhận cấu hình mới thôi:

$ systemctl restart php-fpm && systemctl restart nginx

Tất cả các bước trên mình chỉ tốn 10 phút để cấu hình thôi vì rất nhanh và đơn giản. Đây cũng là lần đầu tiên sử dụng HocVPS của mình, dù cần rất nhiều cải tiến nhưng cơ bản như vậy là quá ổn rồi.

true


Cách sử dụng Unix socket trên VPSSIM

Đã có kinh nghiệm sử dụng HocVPS và CentOS trong... 30 phút, mình tiếp tục tạo thêm một VPS nữa cài đặt VPSSIM để hướng dẫn luôn và ngay cho mọi người.

Cũng tương tự như HocVPS, VPSSIM 🔗 chỉ có 3 phần mềm chính bao gồm MySQL, PHP và Nginx, tuy nhiên còn có tùy chọn cho bạn sử dụng memcache và redis cache. Vì vậy các bước cấu hình sẽ dài hơn nhưng cũng ngon hơn.

MySQL

Trước tiên hãy kiểm tra xem VPSSIM có thay đổi cấu hình mặc định của MySQL và có bật chế độ socket hay không bằng câu lệnh quen thuộc:

[root@vpssim ~]# netstat -ln | grep "unix.*mysql"  
unix  2   [ ACC ]   STREAM   LISTENING  24294  /var/lib/mysql/mysql.sock

Tuyệt vời! Bạn có thể kết nối tới MySQL ở chế độ Unix socket luôn mà không cần cấu hình gì nữa. Đa số các script quản lý VPS thường không tùy chỉnh nhiều ở MySQL, tính ra đó lại là điều hay.

Với WordPress, hãy mở tập tin wp-config.php và thay đổi dòng:

define('DB_HOST', 'localhost');

thành đường dẫn socket của MySQL vừa tìm được ở trên:

define('DB_HOST', 'localhost:/var/lib/mysql/mysql.sock');

Vậy là xong. Bạn thử truy cập vào website WordPress của bạn xem có hoạt động không nhé. Để chắc chắn WordPress đang kết nối MySQL bằng socket, hãy cài plugin Server Info 🔗 và xem ở Settings > Server Info.

Redis

Trước khi sử dụng được Redis, bạn phải cài đặt bằng menu vpssim > 8 và chọn cài đặt Redis nhé. Tiếp tục mở tập tin cấu hình ở đường dẫn /etc/redis.conf, tìm dòng unixsocket ở hàng 109-110 và sửa thành:

unixsocket /var/run/redis/redis.sock
unixsocketperm 777

Sau đó khởi động lại Redis bằng lệnh service redis restart và chèn 2 dòng bên dưới vào tập tin wp-config.php của website để sử dụng Redis ở chế độ socket:

define('WP_REDIS_SCHEME', 'unix');  
define('WP_REDIS_PATH', '/var/run/redis/redis.sock');

true

Memcached

Cấu hình cho Memcached hoạt động trên VPSSIM có vẻ khá khó khăn, tuy nhiên đã viết thì phải viết cho đầy đủ.

Tuy nhiên sau rất nhiều lần thử thì mình không thể cho WordPress kết nối tới memcached bằng plugin Memcached is Your Friend 🔗 được. Kể cả W3 Total Cache cũng chỉ hỗ trợ kết nối tới memcached thông qua TCP/IP thôi.

Vì vậy mình khuyên các bạn chuyển qua Redis cache để có thể tận dụng tốc độ của unix socket nếu muốn.

PHP

Tương tự như HocVPS, VPSSIM cũng chỉ sử dụng duy nhất một phiên bản PHP 7.1 và tập tin cấu hình cũng nằm ở /etc/php-fpm.d/www.conf, quá tiện lợi. Hãy mở tập tin này lên và chỉnh sửa thành như thế này để chạy ở socket, save lại là được.

;listen = 127.0.0.1:9000  
listen = /var/run/php71-fpm.sock

Cũng tương tự HocVPS script, bạn có thể khởi động lại php-fpm ngay hoặc đợi sang bước cấu hình Nginx xong và khởi động lại luôn cho tiện.

Nginx

Thật đáng tiếc khi VPSSIM tiếp tục không sử dụng upstream như EasyEngine, bắt buộc bạn phải làm một bước replace để chuyển toàn bộ domain đang chạy sang unix socket. Tuy nhiên đã có đoạn script của mình nên mọi việc trở nên rất dễ dàng.

$ sed -i -e 's/127.0.0.1:9000/unix:\\/var\\/run\\/php71-fpm.sock/g' /etc/nginx/conf.d/\*.conf

Sau đó khởi động lại php-fpm và Nginx bằng lệnh bên dưới là xong.

$ systemctl restart php-fpm && systemctl restart nginx

Kết

Đây là hai script quản lý mà mình mới vừa sử dụng để viết bài này, vì vậy không thể tránh khỏi sai sót. Nếu các bạn có thắc mắc, chỉnh sửa, cần giải thích gì, cứ thoải mái comment để mình biết và hỗ trợ nhé.