SSD Nodes Learn Hosting plans →
Hướng dẫn Matt ConnorBởi Matt Connor

VPS là gì? Giải thích dễ hiểu về server ảo

VPS là server riêng ảo trên phần cứng dùng chung. Bạn có quyền root để cài phần mềm, nhưng CPU, disk và network vẫn có giới hạn theo plan.

VPS là gì?

VPS (virtual private server) là một phần của một máy tính vật lý trong data centre, được cho bạn thuê như thể đó là một máy riêng hoàn chỉnh. Phần mềm trên máy tính đó chia máy thành nhiều server độc lập, và bạn nhận một server trong số đó: dung lượng memory riêng, dung lượng disk riêng, một địa chỉ IP và quyền administrator để cài đặt phần mềm trong giới hạn của plan. VPS chạy liên tục, và các plan public-facing phản hồi tại một địa chỉ trên Internet.

Tách ba từ này ra thì bạn có thể hiểu ngay sản phẩm là gì. Server là máy tính luôn bật và nhận request qua network. Virtual nghĩa là server được tạo bằng phần mềm. Server của bạn là một phân vùng trên một máy vật lý lớn hơn. Private nghĩa là chỉ bạn sở hữu phân vùng đó. File và chương trình đang chạy của bạn không hiển thị với người thuê phần VPS bên cạnh.

Nếu bạn chưa từng có quyền root trên bất kỳ hệ thống nào, phần cuối là điều quan trọng nhất. VPS cho bạn quyền administrator trên môi trường server của mình. Những gì đã được thiết lập sẵn và những gì bạn có thể thay đổi phụ thuộc vào image, công nghệ virtualisation và plan.

Hypervisor chia tài nguyên như thế nào và chia sẻ những gì

Trên VPS máy ảo, chương trình thực hiện việc chia tài nguyên được gọi là hypervisor. Nó chạy trên máy vật lý, được gọi là host. Với mỗi khách hàng, nó cung cấp một bộ phần cứng mô phỏng gồm CPU, một phần bộ nhớ, một disk và một network card. Hệ điều hành được cài trên phần cứng mô phỏng đó và khởi động như thể nó sở hữu một máy tính thật. Hệ thống guest đó chính là VPS của bạn. KVM (kernel-based virtual machine), Xen, VMware ESXi và Microsoft Hyper-V thực hiện công việc này. Container VPS như OpenVZ thay vào đó sử dụng một lớp ảo hóa trong kernel hệ điều hành của host, không có kernel guest riêng.

Memory và disk được chia theo không gian. CPU được chia theo thời gian. Khác biệt này giải thích phần lớn những điều khiến người dùng bất ngờ về sau. Memory được cấp không tự động có nghĩa là RAM vật lý đã được dành riêng: KVM hỗ trợ memory overcommit và host có thể swap memory của guest. Disk của bạn là một file hoặc logical volume trên storage của host và vẫn thuộc về bạn cho đến khi bạn xóa nó. Các core ảo của bạn là những hàng đợi chờ các core thật của host, còn hypervisor quyết định guest nào được chạy tiếp theo.

Một lệnh cho biết loại ảo hóa mà hệ thống phát hiện được.

systemd-detect-virt
uname -r

systemd-detect-virt in kvm trên VPS KVM. Điều này có nghĩa là một hypervisor đầy đủ đã khởi động kernel chỉ thuộc về bạn. Nó in lxc hoặc openvz với các công nghệ container đó. Khi đó, server của bạn là một khu vực được cô lập bên trong hệ điều hành riêng của host, còn kernel được chia sẻ với các container khác trên cùng máy; container-other có nghĩa là lệnh đã phát hiện một môi trường container khác. Nó in none khi không phát hiện ảo hóa. Khác biệt này có ảnh hưởng thực tế, vì kernel dùng chung là kernel mà bạn không thể thay đổi. Trong container dùng chung kernel, host kiểm soát việc load module, nên một tính năng trong kernel như module WireGuard VPN cần host hỗ trợ. Trong container dùng chung kernel, uname -r thường hiển thị kernel release của host, nhưng các container runtime có thể khác nhau: gVisor chạy container mà không chia sẻ kernel của host, và ví dụ chính thức của nó hiển thị 5.15.0-gvisor. Trên server KVM, cùng lệnh đó hiển thị kernel được cài bên trong guest của riêng bạn, và bạn có thể upgrade hoặc thay thế kernel như trên bất kỳ máy nào khác.

Ý “virtual” ở đây là gì?

Vì server được tạo bằng software, việc provisioning không yêu cầu nhà cung cấp phải lắp cho bạn một máy vật lý mới. Không ai phải lắp hardware riêng cho bạn. Server được tạo từ một template image, nên thao tác rebuild sẽ cài lại Ubuntu sạch, nhưng cũng xóa toàn bộ dữ liệu hiện có trên disk. Hầu hết panel của nhà cung cấp cũng cho phép snapshot disk trước khi bạn thử một thay đổi rủi ro, resize gói dịch vụ rồi reboot, và chuyển guest của bạn sang hardware khác khi host bên dưới cần bảo trì.

Giá dịch vụ cũng xuất phát từ cùng một thực tế: một máy vật lý được nhiều khách hàng cùng trả tiền và sử dụng, nên chi phí của VPS là như vậy khi so với việc thuê cả một server.

Chi phí đi kèm trực tiếp với lợi ích này. Hardware bên dưới được dùng chung, nên một hàng xóm bận rộn cũng trở thành vấn đề của bạn. Phần về các giới hạn bên dưới có command để đo mức ảnh hưởng đó.

Private ở đây có nghĩa là gì?

Private có nghĩa là được cô lập. Cần nói rõ mức độ cô lập này. Bạn có filesystem root riêng, user account riêng và danh sách process riêng. VPS chạy trên virtual machine cũng có kernel riêng, còn container OpenVZ dùng chung kernel của host. Khách hàng khác trên cùng host không thể liệt kê process hoặc đọc file của bạn, vì guest của họ không có đường truy cập vào memory hoặc virtual disk của bạn. Virtual machine chạy các operating system riêng biệt, còn container dùng chung kernel cô lập user và program bên trong một operating system. Tuy nhiên, quyền riêng tư dừng ở chính host: người vận hành hypervisor có thể đọc memory của guest bất cứ lúc nào. Để loại bỏ khoảng hở cuối cùng này, cần phần cứng mã hóa memory được mô tả trong điện toán bảo mật trên VPS.

Shared hosting hoạt động theo cách ngược lại. Bạn được cấp một directory trên máy phục vụ hàng trăm website khác, một control panel và các software do provider lựa chọn cài đặt. Ở đó không có apt install, vì cài package sẽ thay đổi toàn bộ máy, trong khi bạn không có quyền thay đổi toàn bộ máy đó. Shared hosting và VPS phân tích chi tiết sự đánh đổi này. Tóm lại: shared hosting cho bạn thuê một account, còn VPS cho bạn thuê một computer.

Bảng thông số VPS, từng dòng một

Mỗi VPS được bán kèm một danh sách ngắn các con số. Dưới đây là một gói tầm trung mang tính minh họa, được dùng làm ví dụ xuyên suốt phần này. Các con số này chỉ là ví dụ, không phải báo giá hay khảo sát thị trường tại một thời điểm cụ thể.

Biểu đồAn illustrative mid-range VPS plan
Dữ liệu đằng sau biểu đồ này
[
  {
    "plan": "Example mid-range VPS",
    "vcpu_cores": 4,
    "ram_gb": 16,
    "nvme_gb": 160,
    "bandwidth_tb": 8,
    "ipv4_addresses": 1
  }
]

Dòng duy nhất đó chứa toàn bộ thông tin về sản phẩm. Hãy đọc từ trái sang phải.

4 vCPU. vCPU (virtual central processing unit) là một bộ xử lý ảo được hypervisor lập lịch trên các bộ xử lý của host. Nếu gói không ghi dedicated, đây là phần dùng chung của thread đó chứ không phải tài nguyên được dành riêng. Bên trong server, nproc thường in ra 4. Nó đếm số bộ xử lý khả dụng cho process hiện tại; CPU affinity và các giới hạn CPU của cgroup được hỗ trợ có thể làm giảm giá trị này, còn OMP_NUM_THREADS và OMP_THREAD_LIMIT lần lượt đặt giá trị tối thiểu và tối đa được trả về, trong khi nproc --all đếm tất cả bộ xử lý đã cài đặt. lscpu hiển thị tên model, có thể là CPU thật của host hoặc model QEMU chung, tùy cách host được cấu hình.

16 GB RAM. Gói chỉ định mức cấp phát hoặc giới hạn bộ nhớ, nhưng điều đó không đảm bảo host đã dành riêng RAM vật lý cho bạn. free -h báo cáo lượng bộ nhớ có thể sử dụng theo đơn vị nhị phân, không tính kernel và các vùng bộ nhớ được reserve, vì vậy hãy kiểm tra đơn vị GB hoặc GiB mà provider sử dụng trước khi đánh giá chênh lệch. Lượng bộ nhớ bổ sung ngoài mức được cấp còn tùy thuộc vào gói và cấu hình virtualisation.

160 GB NVMe. NVMe (non-volatile memory express) là cách ổ đĩa kết nối bên trong host và nhanh hơn nhiều so với các ổ SSD SATA được dùng trong những gói cũ. Phần dung lượng của bạn xuất hiện dưới dạng một virtual disk, thường là /dev/vda trên KVM. df -h / báo cáo filesystem root theo đơn vị nhị phân, nên dung lượng hiển thị khác với ổ đĩa được quảng cáo theo GB thập phân và cũng không tính phần dung lượng mà các partition khác cùng metadata của filesystem sử dụng; dung lượng khả dụng còn thấp hơn nữa vì ext4 mặc định giữ lại 5 phần trăm filesystem cho root. SSD trong một VPS SSD thực sự có nghĩa là gì và cách kiểm tra ổ đĩa bạn đã mua giải thích sâu hơn.

8 TB lưu lượng truyền. Đây là lượng dữ liệu được truyền mỗi tháng, thường chỉ tính chiều outbound. Đây là một hạn mức dung lượng; tốc độ port là một thông số riêng do gói quy định. Vượt hạn mức có thể phát sinh phí hoặc bị throttle, tùy provider, nên hãy đọc kỹ dòng này trước khi host video. sudo apt install vnstat cung cấp số liệu riêng của bạn bằng vnstat -m, bắt đầu từ ngày bạn cài đặt nó.

1 địa chỉ IPv4. Địa chỉ này thuộc về bạn trong thời gian bạn thuê server. Bạn có thể trỏ domain vào đó và nhận traffic trên các port được firewall cùng chính sách mạng của provider cho phép; cài đặt reverse DNS cũng tùy thuộc vào provider. Một số gói rất rẻ đặt nhiều khách hàng phía sau một địa chỉ dùng chung, được gọi là NAT VPS. Khi đó ip -4 addr show báo cáo một địa chỉ private như 10.0.0.5 và các port inbound bị giới hạn.

Bốn lệnh xác nhận những gì bạn được cấp.

nproc
free -h
df -h /
ip -4 addr show

Nếu bất kỳ thông tin nào trong số đó khác với bảng thông số nhiều hơn mức làm tròn đã nêu ở trên, bạn nên gửi ticket cho bộ phận hỗ trợ trước khi triển khai bất kỳ thứ gì trên máy.

Quyền truy cập root trong thực tế

Root là tài khoản quản trị trên Linux và có user ID là 0. Chạy id -u sẽ trả về 0 khi bạn đang dùng root. Root có thể cài package cho toàn hệ thống, mở các cổng nhỏ hơn 1024 (theo mặc định, kernel dành các cổng này cho root hoặc tiến trình có CAP_NET_BIND_SERVICE, nên tiến trình không phải root nhưng có capability đó vẫn có thể bind vào port 80 mà không cần hạ net.ipv4.ip_unprivileged_port_start), đọc và chỉnh sửa file hệ thống, đồng thời phá hỏng cả hệ thống chỉ bằng một lệnh bất cẩn; việc load module và thay kernel cần quyền kiểm soát kernel, nhưng container dùng chung kernel không cung cấp quyền đó. Không ai khôi phục hệ thống thay cho bạn.

Khác biệt thực tế rất ngắn gọn. Trên shared hosting, bạn mở ticket hỗ trợ để yêu cầu cài một phần mềm. Trên VPS, bạn chạy lệnh này.

sudo apt update
sudo apt install -y nginx
systemctl status nginx

Trên image Ubuntu dùng systemd, systemctl status nginx sẽ in ra active (running) sau khi cài đặt. Địa chỉ IP của server khi mở trong trình duyệt sẽ hiển thị trang nginx mặc định nếu port 80 có thể truy cập được. Nếu status in ra failed, hãy chạy journalctl -u nginx -n 50 và đọc các dòng cuối, vì service ghi lại lý do nó từ chối khởi động. Các nguyên nhân thường gặp là lỗi gõ trong file cấu hình hoặc một chương trình khác đã listening trên port 80.

Root cũng là toàn bộ ranh giới bảo mật của bạn. Quyền truy cập đi qua phương thức login đã cấu hình cho server, chẳng hạn SSH key hoặc password. Phiên đầu tiên trên server mới không phải lúc để cài ứng dụng. Hãy tạo một user thông thường, chuyển phương thức login sang SSH key và đặt firewall trước các port. Mười phút đầu tiên trên VPS mới là checklist theo đúng thứ tự. Kiến thức cơ bản về SSH key trình bày phần login. Kiến thức cơ bản về firewall ufw trình bày phần port. User theo nguyên tắc đặc quyền tối thiểu trình bày user mà các service nên chạy dưới đó về sau. Theo dõi log của SSH service bằng journalctl -u ssh -f để phát hiện các lần thử login.

Giới hạn của một VPS là gì?

CPU được chia sẻ và bạn có thể đo mức độ chia sẻ đó. Steal time là khoảng thời gian CPU ảo của bạn đã sẵn sàng chạy nhưng không được cấp CPU, vì hypervisor đã giao lõi vật lý cho guest khác.

vmstat 1 5

Cột st là steal time. Steal time tăng đột biến trong thời gian ngắn là bình thường trên host dùng chung. Nếu giá trị này liên tục ở mức hai chữ số trong khi các process của bạn đang idle, host thường đã bị oversubscribe. Bạn không thể khắc phục bằng cách tuning bên trong server, vì thời gian chờ xảy ra bên ngoài server. Hostinger phân biệt CPU steal với hệ thống CPU credit. Chính sách CPU credit của họ khôi phục đầy đủ capacity sau khi mức sử dụng giảm và credit tích lũy lại đến ngưỡng khôi phục. Hãy đọc chính sách CPU của gói trước khi quy trách nhiệm cho các guest khác. Benchmark VPS đúng cách giải thích cách chứng minh điều này trước khi bạn gửi vấn đề cho nhà cung cấp. KVM và Xen guest báo cáo steal time. Trong container, giá trị được báo cáo phụ thuộc vào cách hệ thống expose thống kê CPU và không phải là thước đo đáng tin cậy cho việc container bị throttle CPU.

Dung lượng memory là cố định và giới hạn tối đa đến đột ngột. Khi memory cạn và cơ chế reclaim không thể giải phóng đủ dung lượng, OOM (out of memory) killer của kernel sẽ chọn một process rồi kết thúc nó bằng SIGKILL.

sudo dmesg -T | grep -i "out of memory"

Một dòng log có thể giải thích một sự cố vốn trông như không có nguyên nhân:

Out of memory: Killed process 2412 (mysqld) total-vm:2183104kB, anon-rss:1897224kB, file-rss:0kB

Log của chính ứng dụng thường không ghi gì, vì SIGKILL không cho process cơ hội ghi log. Hãy xem kernel log để tìm nguyên nhân; container có được đọc log đó hay không phụ thuộc vào cấu hình của host. Kiểm tra swap đã được cấu hình chưa trước khi thêm swap file, đồng thời kiểm tra các quy định của host khi dùng container VPS.

Disk nhanh nhưng được chia sẻ. NVMe của host có tốc độ cao, nhưng phần tài nguyên của bạn phải cạnh tranh với mọi guest khác cho các thao tác input và output. Kết quả benchmark vào giờ ít tải không phải là cam kết về hiệu năng của cùng máy đó khi tải cao nhất.

Bạn không được trực tiếp can thiệp vào hardware. Bạn không thể cắm thêm thiết bị. Không có USB device, capture card hoặc graphics card, trừ khi gói dịch vụ cố ý passthrough thiết bị đó. Trường hợp này là một sản phẩm riêng: VPS có GPU.

Mỗi loại tài nguyên chỉ có đúng một bản. VPS là một máy đơn lẻ. Lỗi trên host có thể làm server của bạn ngừng hoạt động. Nhà cung cấp có migrate hoặc restart server ở nơi khác hay không còn tùy dịch vụ, và application failover vẫn phải được chuẩn bị riêng. Bạn phải tự quản lý backup, vì vậy backup bằng restic từ VPS nên có trong danh sách setup. Snapshot do nhà cung cấp tạo thì tiện, nhưng mức độ bảo vệ phụ thuộc vào nơi lưu trữ và thời gian retention. Bạn vẫn nên duy trì một bản backup độc lập.

Hỗ trợ chỉ dừng ở hypervisor. Với gói unmanaged, nhà cung cấp duy trì hardware, network và lớp virtualisation hoạt động ổn định. Mọi thứ từ operating system trở lên đều thuộc trách nhiệm của bạn, bao gồm security update. Hosting managed và unmanaged giải thích ranh giới này, còn bật unattended upgrades trên Ubuntu là việc tối thiểu nhưng hữu ích nên thực hiện.

VPS khác gì so với những khái niệm thường bị nhầm lẫn

Máy ảo là một guest có phần cứng ảo và kernel hệ điều hành riêng. VPS là một sản phẩm máy chủ cho thuê, được xây dựng dưới dạng máy ảo hoặc container, thường có địa chỉ public và network đã được gắn sẵn. VPC (virtual private cloud) là một network riêng bên trong một cloud lớn hơn, còn các server nằm bên trong network đó, nên đây là một khái niệm trả lời cho câu hỏi hoàn toàn khác. VPS so với VM và VPC phân biệt đúng ba thuật ngữ này.

Dedicated server là toàn bộ máy vật lý được dành riêng cho bạn, không có guest của khách hàng khác cùng chia sẻ. Bạn có thể tự cài hypervisor. Đây là lựa chọn phù hợp khi steal time hoặc tranh chấp disk thực sự là bottleneck của bạn. VPS so với dedicated server liệt kê các điểm cần cân nhắc.

VPN (virtual private network) chỉ giống VPS ở hai chữ cái và không có điểm chung nào khác. VPN là một tunnel được mã hóa giữa các máy. VPS là một máy, và một cách sử dụng phổ biến của VPS là chạy VPN của riêng bạn. Đây là nguyên nhân gây nhầm lẫn. VPS so với VPN phân biệt rõ hai thuật ngữ này.

Phần cứng do bạn sở hữu, hoặc một hypervisor như Proxmox chạy trên máy tại nhà, cho bạn quyền kiểm soát phần cứng và một kết nối residential mà nhiều dịch vụ thường xem là đáng ngờ. Bạn cũng có chính host đó, nên guest có thể chạy hypervisor riêng sau khi bạn bật nested virtualization trong Proxmox, nhưng VPS thuê cũng phải hỗ trợ tính năng này một cách rõ ràng. Proxmox so với VPS cân nhắc giữa công suất, tiếng ồn và uptime với chi phí hàng tháng.

Mọi người thường chạy gì trên VPS?

Câu trả lời thực tế là các phần mềm phù hợp với hệ điều hành, kiến trúc, tài nguyên của VPS và quy định của nhà cung cấp. Các lựa chọn phổ biến gồm website kèm database, VPN riêng, game server, trình giám sát trạng thái, mail server, thư viện media hoặc coding agent tiếp tục hoạt động khi bạn đóng laptop. Với mail, trước tiên cần kiểm tra chính sách: chẳng hạn, DigitalOcean mặc định chặn các cổng SMTP 25, 465 và 587 trên Droplet. Các network service lắng nghe trên các cổng, vì vậy cổng trên Linux là gì là khái niệm tiếp theo đáng học, còn VPS có thể làm được gì có danh sách đầy đủ hơn cùng chi phí tài nguyên của từng lựa chọn.

FAQ

VPS có phải là máy ảo không?

VPS là một máy chủ do công ty cho bạn thuê, có hệ điều hành, thường có địa chỉ IP public và có giá thuê. VPS có thể là máy ảo với kernel riêng, hoặc là một container như OpenVZ VPS dùng chung kernel của host. Hai thuật ngữ này có phạm vi khác nhau: “máy ảo” mô tả mọi guest chạy trên hypervisor, kể cả máy ảo chạy trên laptop của bạn, còn “VPS” mô tả sản phẩm bạn mua. VPC lại là một khái niệm khác: một mạng riêng bên trong cloud provider, không phải một máy chủ.

Tôi có cần biết Linux để dùng VPS không?

Bạn cần biết một ít, rồi có thể học thêm trong quá trình sử dụng. Bộ kiến thức ban đầu gồm kết nối bằng ssh, di chuyển giữa các thư mục bằng cd và ls, chỉnh sửa file bằng nano, cài phần mềm bằng apt và đọc log bằng journalctl. VPS không được managed mặc định rằng bạn sẽ tự xử lý việc update và firewall. Nếu bạn không muốn tự làm nhiều như vậy, hãy so sánh chi phí và trách nhiệm của gói managed hoặc control panel.

Vì sao VPS của tôi hiển thị ít RAM hơn mức gói dịch vụ cam kết?

Linux báo dung lượng bộ nhớ có thể sử dụng, còn gói dịch vụ quảng cáo dung lượng bộ nhớ được cấp. Kernel image và một số vùng bộ nhớ reserved bị trừ trước khi tổng dung lượng trong free -h được tính; đơn vị nhị phân của công cụ này cũng khác GB thập phân, nên hãy kiểm tra provider đang dùng đơn vị nào. Hãy đối chiếu dung lượng được cấp, đơn vị đo và bộ nhớ reserved trước khi đánh giá chênh lệch. Nếu thiếu dung lượng mà không có lý do rõ ràng, bạn nên mở support ticket.

Steal time là gì và tôi có cần lo không?

Steal time là tỷ lệ thời gian CPU ảo của bạn đã sẵn sàng chạy nhưng phải chờ vì hypervisor cấp core vật lý cho guest khác. Cột st của vmstat 1 hiển thị giá trị này. Steal time tăng đột biến trong thời gian ngắn là bình thường trên phần cứng dùng chung. Nếu giá trị này liên tục ở mức hai chữ số trong khi tải của chính bạn thấp, host vật lý thường đã bị cấp phát quá mức. Cách xử lý là chuyển sang host khác hoặc đổi gói dịch vụ, vì không có thành phần nào bên trong server của bạn kiểm soát scheduler của host. Giới hạn CPU usage cũng làm giảm hiệu năng, và việc khôi phục phụ thuộc vào policy của provider, bao gồm việc rebuild CPU credits nếu cần.

Tôi có thể chạy nhiều hơn một service trên cùng VPS không?

Có. Đó là lý do bạn có root: máy có mục đích sử dụng chung, và các service có thể chạy cùng nhau miễn là đủ bộ nhớ và mỗi service lắng nghe trên một port riêng. Bộ nhớ thường là giới hạn đầu tiên bạn gặp, còn tốc độ disk là giới hạn thứ hai. Mail là ngoại lệ phức tạp, vì việc gửi mail phụ thuộc vào reputation của địa chỉ IP, policy SMTP của provider và bản thân mail server.

Bài viết này có hữu ích không?