2.7.4.1. K-Safety và phân vùng mạng
Khi chạy VoltDB mà không có K-safety thì sự nguy hiểm của phân mảnh mạng là đơn giản : mất dữ liệu. Tuy nhiên, nếu chạy với K-safety, có thể xuất hiện phân mảnh mạng, hai mạng tách rời và các phân mảnh rời rạc đó của cluster vẫn đủ số phân vùng để tiếp tục hoạt động.
Ví dụ, nếu chúng ta có 3 node với 2 phân vùng trên mỗi node và K-safety = 2. Nếu phân mảnh mạng chia rẽ node A và B khởi node C, mỗi phân mảnh vẫn đủ phân vùng để chống chọi. Nodes A và B nghĩ C lỗi và C nghĩa node A và B lỗi.
Hình 2.6 Phân mảnh mạng
2.7.4.2. Sử dụng bảo vệ lỗi mạng
VoltDB cung cấp cơ chế đảm bảo phân vùng mạng không tạo ra 2 vùng copies của cơ sở dữ liệu. Đặc tính này được gọi là bảo vệ lỗi mạng.
Kích hoạt chế độ bảo vệ lỗi mạng trong deployment file, bằng cách thêm thẻ <partition-detection>. Thẻ <partition-detection> là thẻ con của <deployment> và ngang hàng thẻ <cluster>. Ví dụ :
<deployment>
<cluster hostcount="4" sitesperhost="2" leader="myvoltdbserver1" kfactor="1" />
<partition-detection enabled="true"> <snapshot prefix="netfaultsave"/> </partition-detection>
</deployment>
Chú ý, phải chỉ ra thẻ <snapshot> và thuộc tính của nó như là phần tử con <partition-detection>. Nếu phân mảnh được phát hiện, các node bị ảnh hưởng tự động snapshot và shutdown.
Khi kích hoạt bảo bệ lỗi mạng, và lỗi được phát hiện, thì bất cứ phân mảnh khả thi của cluster sẽ thực hiện các bước sau:
1. Xác định nodes nào thiếu
2. Xác định liệu nodes thiếu có là cụm cluster khả thi. Nếu đúng …
• Nếu phân mảnh hiện hành lớn hơn thì nó tiếp tục hoạt động và coi như các nodes trong phân mảnh bé hơn là bị lỗi.
• Nếu phân mảnh khác to hơn, nó thực hiện snapshot và shutdown.
Ví dụ : Phân mảnh của A và B sẽ tiếp tục chạy và C sẽ snaphost và shutdown.
Hình 2.7 Hoạt động bảo vệ lỗi mạng
Nếu 2 phân mảnh cùng kích thước, dựa trên chỉ số nội tại của các nodes để chọn ra một phân mảnh duy nhất tiếp tục hoạt động.