Cài đặt gói Pacemaker và Corosync trên các Node
1. Cài đặt các gói hệ thống cần thiết
Trên tất cả các node (Node1, Node2), bạn cần cài đặt gói Pacemaker để quản lý tài nguyên và Corosync để tạo kênh giao tiếp giữa các node trong cluster.
Thao tác này đảm bảo hệ điều hành có sẵn các thư viện và binary cần thiết để xây dựng WSFC (Windows Server Failover Cluster) trên nền tảng Linux.
Kết quả mong đợi: Các gói được cài đặt thành công, không có lỗi conflict, và dịch vụ hệ thống sẵn sàng để cấu hình.
sudo apt update
sudo apt install -y pacemaker corosync pcs
2. Kích hoạt và cấu hình dịch vụ PCS
Pacemaker Control Suite (PCS) là công cụ quản lý cluster từ dòng lệnh. Bạn cần khởi động dịch vụ này và đặt mật khẩu cho người dùng hacluster để có quyền quản trị.
Thao tác này thiết lập cơ chế xác thực an toàn cho các lệnh quản lý cluster sau này. Nếu không làm bước này, các lệnh pcs sẽ không thể kết nối được với các node.
Kết quả mong đợi: Dịch vụ pcsd chạy ở trạng thái active và bạn đã đặt được mật khẩu cho user hacluster.
sudo systemctl enable pcsd
sudo systemctl start pcsd
sudo pcs host auth node1 node2 --enable --password='YOUR_STRONG_PASSWORD'
3. Kiểm tra trạng thái cài đặt
Sau khi cài đặt xong, hãy xác nhận xem các node đã nhận diện được nhau chưa và dịch vụ Corosync đã sẵn sàng chưa.
Bước này giúp bạn phát hiện sớm các lỗi kết nối mạng hoặc cấu hình trước khi đi sâu vào file cấu hình chi tiết.
Kết quả mong đợi: Lệnh pcs status hiển thị cluster đang ở trạng thái online hoặc sẵn sàng cấu hình, không có lỗi offline hay unreachable.
pcs status
systemctl status corosync
Cấu hình file /etc/corosync/corosync.conf để kết nối các Node
1. Tạo cấu hình Corosync cơ bản
File /etc/corosync/corosync.conf là trái tim của cluster, nơi định nghĩa các giao diện mạng, địa chỉ IP và giao thức truyền thông giữa các node.
Bạn cần cấu hình đúng ring (vòng truyền tin) và transport (giao thức) để đảm bảo độ trễ thấp và độ tin cậy cao cho Always On.
Kết quả mong đợi: File cấu hình được ghi chính xác, Corosync có thể đọc và khởi động để thiết lập liên kết với các node khác.
Thay thế 192.168.1.10 và 192.168.1.11 bằng IP thực tế của Node1 và Node2. Thay thế eth0 bằng interface mạng thực tế của bạn.
sudo nano /etc/corosync/corosync.conf
Dưới đây là nội dung hoàn chỉnh của file cấu hình cho 2 node:
totem {
version: 2
secauth: off
cluster_name: SQLCluster
transport: udpu
interface: eth0
}
nodelist {
node {
nodeid: 1
name: node1
ip: 192.168.1.10
}
node {
nodeid: 2
name: node2
ip: 192.168.1.11
}
}
logging {
to_stderr: yes
to_syslog: yes
to_file: yes
file_prefix: corosync
debug: off
}
cmap {
compatibility: 1
}
quorum {
provider: corosync_votequorum
expected_votes: 2
two_node: 1
}
2. Khởi động lại dịch vụ Corosync
Sau khi lưu file cấu hình, bạn cần khởi động lại dịch vụ corosync trên tất cả các node để áp dụng thay đổi.
Thao tác này buộc Corosync đọc lại file cấu hình và thiết lập lại các kết nối mạng theo thông số mới đã định nghĩa.
Kết quả mong đợi: Dịch vụ Corosync chạy ổn định, không có lỗi trong log, và các node bắt đầu trao đổi gói tin quorum.
sudo systemctl restart corosync
sudo systemctl status corosync
3. Kiểm tra kết nối giữa các Node
Để xác minh Corosync đã kết nối thành công giữa các node, hãy sử dụng lệnh corosync-cmapctl hoặc pcs cluster status.
Bước này giúp bạn đảm bảo rằng vòng totem đã đóng kín và không có node nào bị cô lập (split-brain).
Kết quả mong đợi: Bạn thấy danh sách các node (node1, node2) đều hiển thị trạng thái Member hoặc Online.
corosync-cmapctl
pcs cluster status
Tạo và cấu hình Cluster Resource Agent cho SQL Server
1. Khởi tạo Cluster với Pacemaker
Trước khi thêm tài nguyên SQL Server, bạn phải khởi tạo cluster chính thức bằng lệnh pcs cluster setup để đồng bộ trạng thái giữa các node.
Thao tác này tạo ra cấu trúc dữ liệu cluster trong hệ thống, thiết lập cơ chế bỏ phiếu (quorum) và kích hoạt các dịch vụ Pacemaker trên tất cả node.
Kết quả mong đợi: Cluster được khởi tạo thành công, hiển thị thông báo Cluster created và các node đều tham gia vào cluster.
pcs cluster setup --name SQLCluster node1 node2
2. Cấu hình chính sách Quorum cho 2 Node
Với môi trường 2 node, bạn cần cấu hình two_node: 1 trong Corosync (đã làm ở phần trước) và tắt yêu cầu quorum mặc định của Pacemaker để tránh sự cố split-brain gây dừng toàn bộ cluster khi mất kết nối mạng tạm thời.
Bước này rất quan trọng để đảm bảo tính sẵn sàng cao (High Availability) trong kiến trúc 2 node mà không cần Node Witness thứ 3.
Kết quả mong đợi: Cluster không yêu cầu quorum đa số tuyệt đối, cho phép 1 node vẫn hoạt động nếu node kia mất liên lạc.
pcs property set no-quorum-policy ignore
3. Tạo tài nguyên SQL Server (Virtual IP và Dịch vụ)
Bây giờ, bạn sẽ định nghĩa tài nguyên IP ảo (Virtual IP) để Always On sử dụng làm Listener và tài nguyên dịch vụ mssql-server để chạy trên cluster.
Thao tác này gắn kết IP Listener vào cluster và chỉ định Pacemaker quản lý vòng đời của dịch vụ SQL Server (start/stop/monitor).
Kết quả mong đợi: IP ảo được cấp phát cho 1 node, dịch vụ SQL Server chạy trên node đó, và cả hai đều hiển thị trong trạng thái Started của cluster.
Thay thế 192.168.1.200 bằng IP Listener mong muốn cho Always On.
pcs resource create sql-vip ocf:heartbeat:IPaddr2 ip=192.168.1.200 cidr_netmask=24 op monitor interval=30s
pcs resource create sql-server ocf:microsoft:mssql-server op monitor interval=30s
4. Tạo nhóm tài nguyên (Resource Group) và ràng buộc vị trí
Để đảm bảo IP Listener và dịch vụ SQL Server luôn chạy trên cùng một node, bạn cần tạo một resource group và ràng buộc chúng chạy cùng nhau.
Thao tác này đảm bảo khi failover xảy ra, cả IP và dịch vụ sẽ di chuyển đồng bộ, tránh tình trạng IP trôi nhưng dịch vụ chưa chạy (hoặc ngược lại).
Kết quả mong đợi: Hai tài nguyên được nhóm lại thành sql-group và chỉ chạy trên một node duy nhất tại một thời điểm.
pcs resource group add sql-group sql-vip sql-server
pcs constraint location sql-group prefers node1
5. Cấu hình tham số đặc thù cho SQL Server trong Cluster
Bạn cần thiết lập các tham số khởi động đặc thù cho SQL Server để nó nhận diện đúng instance và chạy trong môi trường cluster.
Thao tác này đảm bảo dịch vụ SQL Server khởi động với các flag đúng chuẩn cho Always On, bao gồm việc chỉ định tên instance và quyền chạy.
Kết quả mong đợi: Dịch vụ SQL Server trong cluster có thể khởi động thành công và lắng nghe trên đúng cổng đã cấu hình.
pcs resource update sql-server mssql-instance=MSSQLSERVER mssql-cluster=true
6. Kiểm tra trạng thái tài nguyên trong Cluster
Sau khi cấu hình xong, hãy kiểm tra toàn bộ cây tài nguyên (resource tree) để xác nhận SQL Server và IP Listener đang hoạt động đúng như thiết kế.
Bước này là bước kiểm tra cuối cùng trước khi bước vào phần tạo Availability Group, đảm bảo nền tảng cluster đã vững chắc.
Kết quả mong đợi: Lệnh hiển thị sql-group đang chạy trên node1 (hoặc node được ưu tiên), trạng thái là Started và OCF:0.
pcs resource show
pcs status
Kiểm tra trạng thái Cluster và đảm bảo tính đồng bộ giữa các Node
1. Kiểm tra đồng bộ hóa trạng thái (Cmap)
Để đảm bảo các node trong cluster luôn có cùng một trạng thái về tài nguyên, hãy kiểm tra bảng cmap của Corosync.
Bước này xác nhận rằng cơ chế đồng bộ hóa dữ liệu giữa các node đang hoạt động tốt, không có hiện tượng lệch trạng thái (state drift).
Kết quả mong đợi: Các giá trị nodeid và state của cả node1 và node2 đều hiển thị là Member và đồng bộ.
corosync-cmapctl
2. Kiểm tra nhật ký lỗi (Log) của Pacemaker
Hãy xem nhật ký của Pacemaker để tìm kiếm các cảnh báo hoặc lỗi liên quan đến việc quản lý tài nguyên SQL Server.
Việc kiểm tra log giúp bạn phát hiện sớm các vấn đề về quyền truy cập, lỗi khởi động dịch vụ, hoặc xung đột tài nguyên mà trạng thái tổng quan có thể chưa hiển thị rõ.
Kết quả mong đợi: Không xuất hiện các dòng log màu đỏ (Error) hoặc cảnh báo (Warning) liên quan đến sql-server hoặc sql-vip.
sudo journalctl -u pacemaker -f | grep -i "sql"
sudo journalctl -u corosync -f
3. Thực hiện kiểm tra Failover thủ công (Manual Failover)
Để xác minh tính sẵn sàng cao, hãy thực hiện lệnh pcs resource move để di chuyển tài nguyên SQL Server từ Node1 sang Node2 một cách thủ công.
Thao tác này mô phỏng tình huống sự cố hoặc bảo trì, giúp bạn kiểm tra xem IP Listener và dịch vụ SQL Server có di chuyển mượt mà và khởi động lại nhanh chóng trên node đích hay không.
Kết quả mong đợi: Sau khi chạy lệnh, sql-group chuyển từ node1 sang node2, IP Listener đổi sang node2, và dịch vụ SQL Server trên node2 chuyển sang trạng thái Started trong vài giây.
pcs resource move sql-group node2
pcs status
4. Xác nhận kết nối từ ứng dụng
Sau khi failover, hãy thử kết nối đến SQL Server thông qua IP Listener từ một máy khách (client) bất kỳ.
Bước này là bằng chứng thực tế cuối cùng cho thấy cluster hoạt động đúng chức năng, đảm bảo ứng dụng không bị ngắt kết nối quá lâu trong quá trình chuyển đổi node.
Kết quả mong đợi: Kết nối thành công, bạn có thể truy cập cơ sở dữ liệu và thực thi các câu lệnh SQL cơ bản (ví dụ: SELECT @@SERVERNAME).
sqlcmd -S 192.168.1.200 -U sa -P YOUR_PASSWORD -Q "SELECT @@SERVERNAME"
Điều hướng series:
Mục lục: Series: Triển khai Database SQL Server Always On với Ubuntu 24.04
« Phần 2: Cài đặt SQL Server 2022 và Active Directory trên Ubuntu
Phần 4: Tạo và cấu hình Always On Availability Group »