Máy tính cấu hình Host Phần mềm Server trên 2 Máy tính
Tính toán yêu cầu kỹ thuật và chi phí để triển khai hệ thống server phân tán trên 2 máy tính
Hướng dẫn toàn diện: Cách host phần mềm server trên 2 máy tính
Triển khai hệ thống server phân tán trên nhiều máy tính không chỉ tăng cường hiệu suất mà còn cải thiện đáng kể độ sẵn sàng của dịch vụ. Bài viết này sẽ hướng dẫn bạn từng bước cách thiết lập hệ thống server trên 2 máy tính, từ chuẩn bị phần cứng đến cấu hình phần mềm và tối ưu hóa hiệu suất.
1. Chuẩn bị phần cứng và mạng
Trước khi bắt đầu cấu hình phần mềm, bạn cần đảm bảo có đủ phần cứng và kết nối mạng phù hợp:
- Máy tính 1 (Primary Server): Nên có CPU ít nhất 4 nhân (recommended: Intel Core i5/i7 hoặc AMD Ryzen 5/7), RAM 8GB trở lên (16GB cho database server), ổ SSD 256GB cho hệ điều hành và ổ HDD 1TB+ cho dữ liệu.
- Máy tính 2 (Secondary Server): Cấu hình tương đương hoặc cao hơn máy chính nếu sử dụng làm failover. Ít nhất nên có cùng dung lượng lưu trữ.
- Kết nối mạng: Cả hai máy cần kết nối qua mạng LAN gigabit (1Gbps) hoặc tốt hơn. Đối với truy cập từ xa, cần băng thông upload tối thiểu 50Mbps cho mỗi máy.
- Bộ định tuyến: Sử dụng router hỗ trợ QoS (Quality of Service) để ưu tiên lưu lượng server. Các model như TP-Link Archer AX6000 hoặc Asus RT-AX88U là lựa chọn tốt.
- UPS (Nguồn dự phòng): Để đảm bảo hoạt động liên tục khi mất điện, nên sử dụng UPS với thời gian dự phòng ít nhất 15-30 phút.
| Loại Server | CPU | RAM | Lưu trữ | Băng thông mạng |
|---|---|---|---|---|
| Web Server (Apache/Nginx) | 4 nhân / 8 luồng | 8-16GB | SSD 256GB + HDD 1TB | 100Mbps+ |
| Database Server (MySQL) | 6 nhân / 12 luồng | 16-32GB | SSD 512GB (NVMe) + HDD 2TB | 1Gbps LAN |
| Game Server (Minecraft) | 4 nhân / 8 luồng | 8-16GB | SSD 256GB | 100Mbps+ (upload) |
| File Server (FTP) | 2 nhân / 4 luồng | 4-8GB | HDD 4TB+ (RAID 1) | 1Gbps LAN |
2. Cài đặt và cấu hình hệ điều hành
Lựa chọn hệ điều hành phù hợp là bước quan trọng tiếp theo. Các hệ điều hành phổ biến cho server bao gồm:
- Ubuntu Server LTS: Phiên bản 22.04 hoặc 20.04 LTS là lựa chọn ổn định với cộng đồng hỗ trợ lớn. Phù hợp cho hầu hết các loại server.
- CentOS Stream: Dành cho những ai quen với hệ sinh thái Red Hat. Ổn định và bảo mật cao.
- Windows Server: Cần thiết nếu phần mềm của bạn chỉ chạy trên Windows. Phiên bản 2022 là lựa chọn tốt nhất hiện nay.
- Debian: Nhẹ và ổn định, phù hợp cho các server có yêu cầu bảo mật cao như database server.
Hướng dẫn cài đặt Ubuntu Server 22.04 LTS:
- Tải ISO từ trang chính thức: ubuntu.com/download/server
- Tạo USB boot bằng Rufus hoặc Balena Etcher
- Boot từ USB và chọn “Install Ubuntu Server”
- Chọn ngôn ngữ, bố cục bàn phím (nên chọn US để tránh lỗi)
- Cấu hình mạng: Chọn DHCP hoặc thiết lập IP tĩnh (recommended cho server)
- Phân vùng đĩa: Sử dụng LVM để dễ dàng mở rộng sau này
- Thiết lập tài khoản người dùng và mật khẩu (nên sử dụng mật khẩu mạnh)
- Cài đặt OpenSSH để quản lý từ xa
- Hoàn tất cài đặt và khởi động lại
Sau khi cài đặt xong trên cả hai máy, cập nhật hệ thống:
sudo apt update && sudo apt upgrade -y
sudo apt install net-tools htop iotop iftop -y
3. Thiết lập kết nối mạng giữa hai máy
Để hai máy có thể giao tiếp hiệu quả, bạn cần cấu hình mạng nội bộ:
- Thiết lập IP tĩnh: Sửa file
/etc/netplan/00-installer-config.yamltrên Ubuntu:
network:
version: 2
renderer: networkd
ethernets:
enp3s0: # Thay bằng tên interface của bạn
dhcp4: no
addresses: [192.168.1.10/24] # Máy 1
gateway4: 192.168.1.1
nameservers:
addresses: [8.8.8.8, 8.8.4.4]
Trên máy thứ hai, sử dụng IP 192.168.1.11/24.
- Kiểm tra kết nối: Sử dụng lệnh ping từ máy này sang máy kia:
ping 192.168.1.11
- Cấu hình hostnames: Sửa file
/etc/hoststrên cả hai máy:
192.168.1.10 server1.example.com server1
192.168.1.11 server2.example.com server2
- Cấu hình SSH key authentication: Tạo và trao đổi khóa SSH để quản lý an toàn:
# Trên máy 1
ssh-keygen -t ed25519
ssh-copy-id user@server2
4. Cài đặt và cấu hình phần mềm server
Tùy thuộc vào loại server bạn chọn, quá trình cài đặt sẽ khác nhau. Dưới đây là hướng dẫn cho một số loại server phổ biến:
4.1 Web Server (Nginx)
# Cài đặt Nginx
sudo apt install nginx -y
# Cấu hình firewall
sudo ufw allow 'Nginx Full'
sudo ufw enable
# Kiểm tra trạng thái
systemctl status nginx
Cấu hình load balancing giữa hai máy:
# Trên máy 1 (sửa file /etc/nginx/nginx.conf)
http {
upstream backend {
server 192.168.1.10:80;
server 192.168.1.11:80 backup;
}
server {
listen 80;
location / {
proxy_pass http://backend;
}
}
}
4.2 Database Server (MySQL)
# Cài đặt MySQL
sudo apt install mysql-server -y
sudo mysql_secure_installation
# Cấu hình replication
# Trên máy chính (master):
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
# Thêm vào section [mysqld]:
server-id = 1
log_bin = /var/log/mysql/mysql-bin.log
binlog_do_db = your_database
# Trên máy phụ (slave):
server-id = 2
relay_log = /var/log/mysql/mysql-relay-bin.log
log_bin = /var/log/mysql/mysql-bin.log
binlog_do_db = your_database
Thiết lập replication:
# Trên máy chính:
CREATE USER 'repl'@'192.168.1.%' IDENTIFIED BY 'strong_password';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.1.%';
FLUSH PRIVILEGES;
FLUSH TABLES WITH READ LOCK;
SHOW MASTER STATUS; # Ghi nhớ File và Position
# Trên máy phụ:
CHANGE MASTER TO
MASTER_HOST='192.168.1.10',
MASTER_USER='repl',
MASTER_PASSWORD='strong_password',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=1234;
START SLAVE;
4.3 File Server (Samba)
# Cài đặt Samba
sudo apt install samba -y
# Cấu hình chia sẻ
sudo nano /etc/samba/smb.conf
# Thêm vào cuối file:
[shared]
path = /srv/samba/shared
browsable = yes
read only = no
valid users = your_user
# Tạo thư mục và thiết lập quyền
sudo mkdir -p /srv/samba/shared
sudo chown your_user:your_user /srv/samba/shared
sudo smbpasswd -a your_user
# Khởi động lại dịch vụ
sudo systemctl restart smbd
Để đồng bộ hóa giữa hai máy, sử dụng rsync:
# Trên máy chính, tạo script đồng bộ
sudo nano /usr/local/bin/sync_files.sh
#!/bin/bash
rsync -avz --delete /srv/samba/shared/ your_user@192.168.1.11:/srv/samba/shared/
# Thiết lập cron job chạy mỗi 5 phút
crontab -e
*/5 * * * * /usr/local/bin/sync_files.sh
5. Cấu hình cân bằng tải và failover
Để đảm bảo hệ thống luôn sẵn sàng và phân phối tải đều, bạn cần thiết lập:
5.1 Cân bằng tải với HAProxy
sudo apt install haproxy -y
sudo nano /etc/haproxy/haproxy.cfg
# Cấu hình cơ bản
frontend http_front
bind *:80
default_backend http_back
backend http_back
balance roundrobin
server server1 192.168.1.10:80 check
server server2 192.168.1.11:80 check backup
# Khởi động dịch vụ
sudo systemctl start haproxy
sudo systemctl enable haproxy
5.2 Failover tự động với Keepalived
sudo apt install keepalived -y
sudo nano /etc/keepalived/keepalived.conf
# Trên máy chính
vrrp_instance VI_1 {
state MASTER
interface enp3s0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass your_password
}
virtual_ipaddress {
192.168.1.100/24
}
}
# Trên máy phụ (thay state MASTER bằng BACKUP, priority 90)
# Khởi động dịch vụ
sudo systemctl start keepalived
sudo systemctl enable keepalived
6. Giám sát và bảo trì hệ thống
Để đảm bảo hệ thống hoạt động ổn định, bạn cần thiết lập giám sát:
6.1 Cài đặt Netdata
bash <(curl -Ss https://my-netdata.io/kickstart.sh)
Truy cập dashboard tại http://server_ip:19999
6.2 Thiết lập cảnh báo
Sử dụng cron và mailutils để gửi cảnh báo khi có sự cố:
sudo apt install mailutils -y
# Tạo script kiểm tra
sudo nano /usr/local/bin/check_services.sh
#!/bin/bash
if ! systemctl is-active --quiet nginx; then
echo "Nginx service is down on $(hostname)" | mail -s "Service Alert" admin@example.com
fi
# Thiết lập cron job
crontab -e
*/5 * * * * /usr/local/bin/check_services.sh
6.3 Sao lưu tự động
# Cài đặt công cụ sao lưu
sudo apt install duplicity -y
# Tạo script sao lưu
sudo nano /usr/local/bin/backup.sh
#!/bin/bash
duplicity /var/www/html file:///backup/website
duplicity /var/lib/mysql file:///backup/mysql
# Thiết lập cron job chạy hàng ngày lúc 2h sáng
crontab -e
0 2 * * * /usr/local/bin/backup.sh
7. Tối ưu hóa hiệu suất
Một số kỹ thuật tối ưu hóa hiệu suất cho hệ thống server phân tán:
- Tối ưu hóa MySQL: Sửa file
/etc/mysql/my.cnf:innodb_buffer_pool_size = 4G # 50-70% của RAM innodb_log_file_size = 1G max_connections = 200 query_cache_size = 64M query_cache_type = 1 - Tối ưu hóa Nginx: Sửa file
/etc/nginx/nginx.conf:worker_processes auto; worker_connections 1024; keepalive_timeout 65; gzip on; gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript; - Sử dụng bộ nhớ đệm: Cài đặt Redis cho caching:
sudo apt install redis-server -y sudo systemctl enable redis-server - Tối ưu hóa mạng: Sửa file
/etc/sysctl.conf:
Sau đó chạynet.core.rmem_max = 16777216 net.core.wmem_max = 16777216 net.ipv4.tcp_rmem = 4096 87380 16777216 net.ipv4.tcp_wmem = 4096 87380 16777216 net.ipv4.tcp_max_syn_backlog = 8192 net.core.netdev_max_backlog = 5000 net.core.somaxconn = 32768 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_fin_timeout = 30sudo sysctl -pđể áp dụng.
8. Bảo mật hệ thống
Bảo mật là yếu tố quan trọng nhất khi vận hành server. Dưới đây là các biện pháp bảo mật cần thiết:
- Cập nhật hệ thống thường xuyên:
sudo apt update && sudo apt upgrade -y sudo apt autoremove -y - Cấu hình firewall:
sudo ufw default deny incoming sudo ufw default allow outgoing sudo ufw allow ssh sudo ufw allow http sudo ufw allow https sudo ufw enable - Vô hiệu hóa đăng nhập root qua SSH:
Sau đó restart SSH:sudo nano /etc/ssh/sshd_config # Thay đổi các dòng sau: PermitRootLogin no PasswordAuthentication no AllowUsers your_usernamesudo systemctl restart sshd - Cài đặt Fail2Ban:
sudo apt install fail2ban -y sudo systemctl enable fail2ban sudo systemctl start fail2ban - Mã hóa dữ liệu nhạy cảm: Sử dụng LUKS để mã hóa ổ đĩa:
sudo apt install cryptsetup -y # Mã hóa ổ đĩa mới (ví dụ /dev/sdb1) sudo cryptsetup luksFormat /dev/sdb1 sudo cryptsetup open /dev/sdb1 secure_drive sudo mkfs.ext4 /dev/mapper/secure_drive sudo mount /dev/mapper/secure_drive /mnt/secure - Cài đặt chứng chỉ SSL: Sử dụng Let's Encrypt:
sudo apt install certbot python3-certbot-nginx -y sudo certbot --nginx -d yourdomain.com
9. Khắc phục sự cố phổ biến
Khi vận hành hệ thống server phân tán, bạn có thể gặp một số sự cố phổ biến và cách khắc phục:
| Sự cố | Nguyên nhân có thể | Cách khắc phục |
|---|---|---|
| Kết nối giữa hai máy bị gián đoạn | Lỗi cáp mạng, cấu hình firewall sai, IP conflict |
|
| Đồng bộ dữ liệu chậm | Băng thông mạng không đủ, tải CPU cao, cấu hình rsync không tối ưu |
|
| Failover không hoạt động | Cấu hình Keepalived sai, dịch vụ không chạy, xung đột IP ảo |
|
| Tải CPU cao bất thường | Tấn công DDoS, truy vấn database không tối ưu, quá nhiều kết nối |
|
10. Mở rộng hệ thống
Khi hệ thống của bạn phát triển, bạn có thể cần mở rộng bằng các phương pháp sau:
10.1 Thêm máy chủ thứ 3
Để tăng cường khả năng chịu tải và dự phòng, bạn có thể thêm máy chủ thứ 3:
- Cài đặt hệ điều hành và phần mềm tương tự như hai máy hiện tại
- Cập nhật cấu hình HAProxy để bao gồm máy mới:
backend http_back balance roundrobin server server1 192.168.1.10:80 check server server2 192.168.1.11:80 check server server3 192.168.1.12:80 check backup - Cập nhật cấu hình Keepalived trên cả ba máy với priority khác nhau (100, 90, 80)
- Thiết lập đồng bộ dữ liệu từ máy chính sang máy thứ 3
10.2 Sử dụng containerization
Để quản lý dễ dàng hơn, bạn có thể chuyển sang sử dụng container với Docker:
# Cài đặt Docker
sudo apt install docker.io -y
sudo systemctl enable docker
sudo systemctl start docker
# Cài đặt Docker Compose
sudo apt install docker-compose -y
# Ví dụ file docker-compose.yml cho web server
version: '3'
services:
web:
image: nginx:latest
ports:
- "80:80"
volumes:
- ./html:/usr/share/nginx/html
deploy:
replicas: 2
restart_policy:
condition: on-failure
Sử dụng Docker Swarm để quản lý cluster:
# Khởi tạo swarm trên máy chính
docker swarm init --advertise-addr 192.168.1.10
# Trên máy phụ, join vào swarm
docker swarm join --token SWMTKN-1-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX-YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY 192.168.1.10:2377
# Triển khai service
docker service create --name web --replicas 2 -p 80:80 nginx
10.3 Sử dụng Kubernetes
Đối với hệ thống lớn hơn, Kubernetes là giải pháp tối ưu:
# Cài đặt kubeadm, kubelet và kubectl
sudo apt install -y apt-transport-https ca-certificates curl
curl -fsSL https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-archive-keyring.gpg
echo "deb [signed-by=/etc/apt/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo apt update
sudo apt install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl
# Khởi tạo cluster trên máy chính
sudo kubeadm init --pod-network-cidr=10.244.0.0/16
# Trên máy phụ, join cluster
sudo kubeadm join 192.168.1.10:6443 --token XXXXXX.XXXXXXXXXXXXXXXX --discovery-token-ca-cert-hash sha256:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
# Cài đặt mạng (ví dụ với Flannel)
kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml
11. Case Study: Triển khai hệ thống cho doanh nghiệp vừa
Dưới đây là ví dụ thực tế về cách một doanh nghiệp vừa (50 nhân viên) triển khai hệ thống server phân tán trên 2 máy tính:
Yêu cầu:
- Host website công ty (WordPress)
- Database cho hệ thống quản lý khách hàng (CRM)
- File server nội bộ cho nhân viên
- Email server (Postfix + Dovecot)
- Yêu cầu uptime 99.95%
Giải pháp:
| Thành phần | Máy 1 (Primary) | Máy 2 (Secondary) | Ghi chú |
|---|---|---|---|
| Phần cứng |
|
|
Sử dụng NIC bonding để tăng băng thông và dự phòng |
| Hệ điều hành | Ubuntu Server 22.04 LTS | Cập nhật bảo mật tự động | |
| Web Server | Nginx + PHP-FPM | Nginx (standby) | Sử dụng HAProxy làm load balancer |
| Database | MySQL 8.0 (Master) | MySQL 8.0 (Slave) | Replication thời gian thực |
| File Server | Samba + GlusterFS | Đồng bộ hóa hai chiều | |
| Email Server | Postfix + Dovecot (Primary MX) | Postfix + Dovecot (Secondary MX) | Sử dụng DNS round-robin |
| Monitoring | Netdata + Prometheus + Grafana | Cảnh báo qua Telegram | |
| Backup |
|
Lịch backup hàng ngày và hàng tuần | |
Kết quả:
- Thời gian uptime đạt 99.98% trong 6 tháng đầu tiên
- Giảm 40% thời gian tải trang so với hệ thống cũ (single server)
- Tiết kiệm 30% chi phí so với giải pháp thuê hosting đám mây tương đương
- Dễ dàng mở rộng bằng cách thêm máy chủ thứ 3 khi cần
12. So sánh chi phí: Self-hosted vs Cloud Hosting
Dưới đây là so sánh chi phí giữa giải pháp self-hosted trên 2 máy tính và thuê cloud hosting tương đương (dựa trên cấu hình trung bình cho doanh nghiệp vừa):
| Hạng mục | Self-hosted (2 máy) | AWS (tương đương) | Azure (tương đương) | Google Cloud (tương đương) |
|---|---|---|---|---|
| Chi phí phần cứng ban đầu | 45,000,000 | 0 | 0 | 0 |
| Chi phí điện/năng lượng (3 năm) | 12,000,000 | 0 | 0 | 0 |
| Chi phí băng thông (3 năm) | 15,000,000 | 42,000,000 | 45,000,000 | 40,000,000 |
| Chi phí máy ảo (3 năm) | 0 | 210,000,000 | 225,000,000 | 210,000,000 |
| Chi phí lưu trữ (3 năm) | 0 (đã tính trong phần cứng) | 30,000,000 | 33,000,000 | 28,000,000 |
| Chi phí sao lưu (3 năm) | 5,000,000 (Backblaze B2) | 18,000,000 | 21,000,000 | 16,000,000 |
| Chi phí quản trị (3 năm) | 30,000,000 | 15,000,000 | 12,000,000 | 14,000,000 |
| Tổng cộng | 107,000,000 | 315,000,000 | 336,000,000 | 308,000,000 |
| Tiết kiệm so với cloud | 60-68% | |||
Lưu ý: Chi phí self-hosted không bao gồm thời gian setup ban đầu (khoảng 2-3 ngày) và chi phí thay thế phần cứng sau 3-5 năm. Tuy nhiên, với quy mô doanh nghiệp vừa, self-hosted vẫn tiết kiệm đáng kể so với cloud hosting trong dài hạn.
13. Kết luận và khuyến nghị
Triển khai hệ thống server phân tán trên 2 máy tính mang lại nhiều lợi ích:
- Tăng cường độ sẵn sàng: Với cơ chế failover, thời gian downtime được giảm thiểu đáng kể.
- Cải thiện hiệu năng: Phân tán tải giúp hệ thống xử lý được nhiều yêu cầu đồng thời hơn.
- Tiết kiệm chi phí: So với giải pháp cloud hosting tương đương, self-hosted có thể tiết kiệm 50-70% chi phí trong dài hạn.
- Kiểm soát hoàn toàn: Bạn có toàn quyền kiểm soát phần cứng, phần mềm và dữ liệu.
- Dễ dàng mở rộng: Có thể thêm máy chủ mới khi nhu cầu tăng mà không gặp gián đoạn.
Khuyến nghị:
- Bắt đầu với cấu hình khiêm tốn và mở rộng dần khi cần thiết.
- Đầu tư vào phần cứng chất lượng, đặc biệt là ổ SSD cho hiệu năng I/O.
- Thiết lập giám sát toàn diện từ sớm để phát hiện sự cố kịp thời.
- Thực hiện sao lưu định kỳ và kiểm tra khả năng phục hồi.
- Cập nhật hệ thống và phần mềm thường xuyên để vá lỗi bảo mật.
- Xem xét chuyển sang giải pháp containerization (Docker, Kubernetes) khi hệ thống phát triển.
- Đào tạo nhân viên IT nội bộ để quản lý hệ thống hiệu quả.
Với hướng dẫn chi tiết này, bạn đã có đủ kiến thức để triển khai thành công hệ thống server phân tán trên 2 máy tính. Hệ thống này không chỉ đáp ứng nhu cầu hiện tại mà còn dễ dàng mở rộng trong tương lai khi doanh nghiệp của bạn phát triển.