Yêu cầu phần cứng và tài nguyên hệ thống
Google Spanner Local (Emulator) chạy trên một tiến trình đơn lẻ nhưng yêu cầu tài nguyên đáng kể để mô phỏng kiến trúc phân tán thực tế.
CPU cần tối thiểu 4 nhân vật lý (vCPU) để xử lý các giao thức đồng bộ hóa và lock trong môi trường giả lập. RAM tối thiểu 8GB, khuyến nghị 16GB để tránh OOM (Out Of Memory) khi chạy nhiều transaction song song. Disk cần tối thiểu 50GB dung lượng trống với tốc độ I/O cao (SSD/NVMe), vì Spanner lưu trữ dữ liệu theo mô hình log-structured merge-tree (LSM) đòi hỏi nhiều phép đọc/ghi ngẫu nhiên.
Ubuntu 24.04 LTS đã tích hợp sẵn Kernel 6.8, đáp ứng yêu cầu về các hệ thống file mới và quản lý mạng cần thiết cho Spanner.
Để verify yêu cầu, chạy lệnh kiểm tra CPU, RAM và Disk:
lscpu | grep "CPU(s)" && free -h && df -h /
Kết quả mong đợi: CPU(s) >= 4, Mem total >= 8G, Available disk >= 50G.
Cài đặt Ubuntu 24.04 LTS
Khởi tạo hệ điều hành
Trên máy chủ vật lý hoặc VM, boot từ ISO Ubuntu 24.04 LTS. Chọn ngôn ngữ, bàn phím và phân vùng disk mặc định (LVM hoặc LUKS nếu cần bảo mật, nhưng để đơn giản cho bước này dùng mặc định).
Khi đến bước cài đặt, tạo user mới với quyền sudo, đặt tên là "spanneradmin" để tách biệt với user root, đảm bảo bảo mật khi triển khai ứng dụng sau này.
Sau khi cài đặt xong, reboot máy chủ và đăng nhập bằng user mới.
Khởi động lại hệ thống để đảm bảo các dịch vụ nền chạy ổn định:
sudo reboot
Kết quả mong đợi: Hệ thống khởi động lại và yêu cầu đăng nhập bằng user "spanneradmin".
Cập nhật hệ thống và kernel
Trước khi cấu hình, cần cập nhật tất cả các gói phần mềm lên phiên bản mới nhất để đảm bảo tính tương thích với các công cụ sẽ cài đặt sau.
sudo apt update && sudo apt upgrade -y
Kiểm tra phiên bản kernel đang chạy để xác nhận là Ubuntu 24.04 (thường là 6.8.x):
uname -r
Kết quả mong đợi: Trả về phiên bản kernel bắt đầu bằng 6.8, không có cảnh báo lỗi nâng cấp.
Cấu hình mạng và bảo mật cơ bản
Đặt Static IP cho Network Interface
Trên Ubuntu 24.04, quản lý mạng được thực hiện qua Netplan (YAML). Cần cấu hình IP tĩnh để Spanner Local có thể lắng nghe kết nối từ ứng dụng qua địa chỉ cố định.
Xác định tên interface mạng (ví dụ: eth0 hoặc enp0s3) bằng lệnh ip link, sau đó chỉnh sửa file cấu hình Netplan nằm trong thư mục /etc/netplan/.
File cấu hình đầy đủ tại /etc/netplan/00-installer-config.yaml:
network:
version: 2
renderer: networkd
ethernets:
enp0s3:
addresses:
- 192.168.1.100/24
gateway4: 192.168.1.1
nameservers:
addresses:
- 8.8.8.8
- 8.8.4.4
Áp dụng cấu hình mạng mới:
sudo netplan apply
Kiểm tra kết quả bằng lệnh ip addr show, đảm bảo IP 192.168.1.100 đã được gán cho interface enp0s3.
Cấu hình SSH Server
Cài đặt và kích hoạt OpenSSH Server để quản trị viên có thể truy cập từ xa vào máy chủ.
sudo apt install -y openssh-server && sudo systemctl enable --now ssh
Cấu hình file /etc/ssh/sshd_config để chỉ cho phép đăng nhập bằng key (tắt password) và thay đổi port nếu cần, tuy nhiên giữ mặc định port 22 cho bước này.
Chỉnh sửa các dòng quan trọng trong file /etc/ssh/sshd_config:
PasswordAuthentication no
PermitRootLogin no
PubkeyAuthentication yes
Port 22
Khởi động lại dịch vụ SSH để áp dụng thay đổi:
sudo systemctl restart ssh
Verify bằng lệnh systemctl status ssh, trạng thái phải là "active (running)".
Cài đặt các công cụ phát triển cần thiết
Git và Make
Cần Git để clone source code của Spanner Emulator và Make để compile các binary nếu cần thiết từ nguồn.
sudo apt install -y git make
Verify phiên bản:
git --version && make --version
Kết quả mong đợi: Hiển thị phiên bản Git 2.x và GNU Make 4.x.
Go (Golang)
Google Spanner SDK và Emulator được viết chủ yếu bằng Go. Ubuntu 24.04 chưa có Go mới nhất trong repo mặc định, nên cần tải bản binary trực tiếp từ Google.
Tải Go version 1.22.x (phiên bản ổn định hỗ trợ tốt nhất cho các thư viện Spanner mới):
cd /usr/local
sudo wget https://go.dev/dl/go1.22.4.linux-amd64.tar.gz
sudo tar -C /usr/local -xzf go1.22.4.linux-amd64.tar.gz
Thêm biến môi trường PATH vào file ~/.bashrc để Go có thể chạy từ mọi thư mục:
echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.bashrc
source ~/.bashrc
Verify phiên bản Go:
go version
Kết quả mong đợi: Trả về "go version go1.22.4 linux/amd64".
Docker Engine
Mặc dù Spanner Local chạy standalone, việc có Docker giúp dễ dàng quản lý container cho các dịch vụ phụ trợ hoặc triển khai trong môi trường production sau này.
Cài đặt Docker Engine và các plugin cần thiết trên Ubuntu 24.04:
sudo apt install -y ca-certificates curl gnupg lsb-release
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
Thêm user hiện tại vào group docker để không cần sudo khi chạy lệnh docker:
sudo usermod -aG docker $USER
Để group docker có hiệu lực ngay lập tức mà không cần logout/login lại, chạy lệnh:
newgrp docker
Verify Docker bằng cách chạy container hello-world:
docker run hello-world
Kết quả mong đợi: Docker tải image và in ra thông điệp chào mừng từ Docker.
Kiểm tra điều kiện tiên quyết và kết thúc
Chạy script kiểm tra tổng hợp
Trước khi bước sang phần 2, cần đảm bảo tất cả các thành phần đã sẵn sàng. Tạo một script đơn giản để kiểm tra lại toàn bộ stack.
Chạy lệnh kiểm tra tổng hợp:
echo "=== System Check ===" && \
uname -a && \
echo "=== Hardware ===" && \
lscpu | grep "CPU(s)" && \
free -h && \
df -h / && \
echo "=== Tools ===" && \
git --version && \
go version && \
docker --version && \
echo "=== Network ===" && \
ip addr show | grep "inet " && \
systemctl status ssh --no-pager --no-legend
Kết quả mong đợi: Tất cả các lệnh trên thực thi thành công, không có lỗi, hiển thị thông số phần cứng và phiên bản phần mềm đúng như yêu cầu đã đề ra.
Điều hướng series:
Mục lục: Series: Triển khai Database NewSQL với Google Spanner và Ubuntu 24.04
Phần 2: Triển khai Google Spanner Local (Dev/Emulator) trên Ubuntu »