Đây là một phiên bản cũ của tài liệu!
Mục lục
Cài đặt Server chịu tải cao chạy NukeViet 4
project này làm cho NukeViet 4 theo hướng tối ưu NukeViet cho các site có lượng truy cập lớn và rất lớn, không làm cho các site nhỏ, hay trên các hosting được. Khi xây dựng cần có nhiểu server riêng để cấu hình mới (Hoặc sử dụng trên các VPS mua tại các Cloud có thể thiết lập được Private Network)
1) Mô hình áp dụng:
Mô hình này được bạn Việt bên 123host đưa ra
Mô hình này đáp ứng được vấn đề gì? Đáp ứng được chia tải PHP và MySQL cho những website traffic cực lớn. Có đáp ứng được dự phòng không? Có nhưng chưa đủ, mới chỉ dự phòng cho các server webapp, database slave.
2) Các lưu ý
Mô hình này là mô hình này mình cố tình làm đơn giản nhất để phù hợp với cộng đồng. Ngoài các chú thích đã có trên hình, có một số lưu ý như sau:
Server lb1.nukeivet.vn:
Hiện chỉ chạy 1 mình, chưa có server dự phòng cho nó (HA - high availability). Nếu cần, mình sẽ lên một mô hình HA đầy đủ, tuy nhiên sẽ sử dụng thêm một số công nghệ phức tạp nên ban đầu mình sẽ không đưa vào. Khi có 1 trong 3 server web app gặp sự cố, Load balancer sẽ tự động tách nó ra, đảm bảo hệ thống hoạt động xuyên suốt. Như vậy các server webapp này không những chia tải mà còn dự phòng lẫn nhau. Thuật toán load balancing: Tùy chọn Caching phía server? Tất nhiên là được, nếu cache sẽ cache tại đây. Nhưng lại là vấn đề nâng cao và mình không đề cập tại mô hình này
Source code (bao gồm các file php và các file static) sẽ được lưu tập trung tại server lb1.nukeviet.vn. Các server webapp sẽ mount đến server lb1 qua network sử dụng NFS (network file system).
Lưu ý về perfomance: Nếu source website thường xuyên thay đổi (ví dụ xóa / tạo file liên tục xuống ổ cứng) thì NFS không phải là sự lựa chọn tối ưu. Lúc này có thể lưu file phân tán tại chính server webapp hoặc dùng công nghệ khác.
Lưu static file tại CDN?:
Nếu có CDN riêng thì sẽ để static file tại CDN hoặc CDN pass traffic static và LB1 và cache tại CDN. Phần này không ảnh hưởng đến mô hình.
MySQL Source code nukeviet cần hỗ trợ master/slave MySQL để điều hướng truy vấn mang tính chất thay đổi (insert, update, delete.v.v.) sang server Master, Các truy vấn chỉ đọc sẽ điều hướng đều sang các server slave còn lại. Tại đây server Master database cũng chưa có server dự phòng cho nó. Và cũng như mình đã trình bày, dự phòng này sẽ được đưa vào một mô hình nâng cao khác, không phải mô hình này.
Session Nukeviet sử dụng default session của server thì có thể dùng Memcache để lưu session tập trung tại server lb1.nukeviet.vn (cấu hình session.handler và session.save_path tại php.ini)
3) Cấu hình server lb1.nukeivet.vn
Sử dụng hệ điều hành CentOS 7.1, server này có 2 cạc mạng
Public Network 192.168.100.101 để nối thẳng ra internet Private Network 192.168.200.100 để kết nối với các server nội bộ.
Bước 1: Cập nhật HDH
yum update -y
Bước 2: Nạp package
Do NGINX không có sẵn trong gói Yum mặc định của CentOS nên chúng ta phải nạp một package từ bên ngoài vào.
Sau đó tạo 1 file tên là nginx.repo trong thư mục /etc/yum.repos.d/ rồi copy đoạn dưới đây vào:
[nginx] name=nginx repo baseurl=http://nginx.org/packages/centos/$releasever/$basearch/ gpgcheck=0 enabled=1
Nếu bạn muốn dùng NGINX bản mới nhất thì dùng đoạn dưới: (Tôi chọn bản này)
[nginx] name=nginx repo baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/ gpgcheck=0 enabled=1
Bước 3: Cài đặt NGINX
sudo yum install nginx -y sudo systemctl start nginx sudo systemctl enable nginx sudo firewall-cmd --permanent --zone=public --add-service=http sudo firewall-cmd --permanent --zone=public --add-service=https sudo firewall-cmd --reload
Bước 4: Cấu hình NGINX
## Main configuration file ## /etc/nginx/nginx.conf ## Virtualhost configuration files on ## /etc/nginx/sites-available/ /etc/nginx/sites-enabled/ ## Other config files on (if needed) ## /etc/nginx/conf.d/
Mở file /etc/nginx/nginx.conf
Cấu hình worker_processes
bằng số CPU của máy (Tìm số CPU bằng lệnh cat /proc/cpuinfo |grep processor
)
Cấu hình các thông số trong thẻ http {
server_tokens off;
Khởi động lại nginx: sudo systemctl restart nginx sau đó truy cập vào địa chỉ IP để kiểm tra
Bước 5: Cài đặt PHP
Cài CentOS 7.1 epel repository
sudo yum install epel-release rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
Cài PHP các module cần thiết:
yum --enablerepo=remi,remi-php56 install php-fpm php-mysql php-common php-mbstring php-mcrypt php-gd -y
Kích hoạt NGINX, PHP và thêm 2 ứng dụng này vào danh sách ứng dụng tự khởi động nếu reboot server (gõ lần lượt các lệnh):
sudo systemctl start php-fpm sudo systemctl enable php-fpm
Kiểm tra phiên bản NGINX và PHP-FPM:
nginx -v php-fpm -v
Thiết lập lại user và group chạy PHP
Mặc định PHP-FPM sẽ chỉ định user tên là apache và group tên apache để chạy nó, nhưng ở đây chúng ta không sử dụng Apache mà là NGINX nên bạn cần mở file /etc/php-fpm.d/www.conf lên và tìm:
user = apache ; RPM: Keep a group allowed to write in log dir. group = apache
Thay thành
user = nginx ; RPM: Keep a group allowed to write in log dir. group = nginx
Bây giờ bạn hãy mở file default.conf trong thư mục /etc/nginx/conf.d/ Tìm đoạn
location / { root /usr/share/nginx/html; index index.html index.htm; }
Sửa thành
location / { root /usr/share/nginx/html; index index.html index.php index.htm; }
Tìm đoạn
#location ~ \.php$ { # root html; # fastcgi_pass 127.0.0.1:9000; # fastcgi_index index.php; # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; # include fastcgi_params; #}
Sửa thành
location ~ \.php$ { root /usr/share/nginx/html; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; }
Khởi động lại PHP-FPM
sudo systemctl restart php-fpm sudo systemctl restart nginx