Regon.
Trong OpenStack Swift, --region
được sử dụng để chỉ định khu vực mà thiết bị lưu trữ đang hoạt động. Mỗi khu vực là một nhóm các thiết bị lưu trữ mà bạn muốn Swift coi là cách ly về mặt lỗi với nhau ở mức độ cao hơn so với --zone
.
Trong môi trường thực tế, --region
thường được sử dụng để phân biệt các trung tâm dữ liệu hoặc các vị trí lưu trữ vật lý khác nhau. Ví dụ, bạn có thể có một trung tâm dữ liệu ở Hồ Chí Minh và một trung tâm dữ liệu ở Hà Tĩnh và bạn muốn Swift coi chúng là cách ly về mặt lỗi với nhau. Trong trường hợp này, bạn có thể chỉ định --region 1
cho tất cả các thiết bị lưu trữ ở Hồ Chí Minh và --region 2
cho tất cả các thiết bị lưu trữ ở Hà Tĩnh.
Khi bạn chỉ định --region
cho một thiết bị lưu trữ, Swift sẽ cố gắng không lưu trữ các bản sao của cùng một object trong cùng một khu vực. Điều này giúp tăng cường độ bền và khả năng chịu lỗi của hệ thống.
Trong một cấu hình như vậy, mỗi site sẽ chứa một hoặc nhiều vùng (--zone
) và mỗi vùng sẽ chứa một hoặc nhiều node lưu trữ. Mỗi site sẽ được gán cho một khu vực (--region
) riêng biệt.
Các site sẽ được kết nối với nhau thông qua network và Swift sẽ tự động xử lý việc sao chép dữ liệu giữa các site. Swift sẽ cố gắng đảm bảo rằng mỗi bản sao của một object được lưu trữ ở một site khác nhau, để nếu một site gặp sự cố, dữ liệu vẫn có thể được truy cập từ các site khác.
- Cấu hình cụ thể sẽ phụ thuộc vào yêu cầu và hạ tầng cụ thể của bạn, nhưng một ví dụ cơ bản có thể là:
- Site 1:
--region 1
, chứa--zone 1
và--zone 2
- Site 2:
--region 2
, chứa--zone 3
và--zone 4
- Site 1:
Trong cấu hình này, Swift sẽ cố gắng đảm bảo rằng mỗi bản sao của một object được lưu trữ ở một site khác nhau. OpenStack Swift sẽ cố gắng phân tán dữ liệu đều trên tất cả các --region
và --zone
có sẵn.
Tuy nhiên, cần lưu ý rằng việc phân tán dữ liệu cụ thể sẽ phụ thuộc vào nhiều yếu tố, bao gồm cả trọng số (--weight
) của các thiết bị lưu trữ. Trọng số này xác định tỷ lệ dữ liệu mà một thiết bị cụ thể nên giữ so với các thiết bị khác.
Nếu tất cả các thiết bị có cùng trọng số, thì Swift sẽ cố gắng phân tán dữ liệu đều trên tất cả các thiết bị. Nếu một thiết bị có trọng số cao hơn, thì nó sẽ giữ một tỷ lệ dữ liệu cao hơn.
OpenStack Swift được thiết kế để chịu được sự cố ở mức --region
(Datacenter). Điều này được thực hiện bằng cách sao chép dữ liệu trên nhiều --region
khác nhau.
Trong cấu hình của bạn, tất cả các thiết bị lưu trữ đều thuộc cùng một --region
(1
), do đó, nếu --region
này gặp sự cố, có thể dẫn đến mất dữ liệu.
Để đảm bảo rằng dữ liệu không bị mất khi một --region
gặp sự cố, bạn cần phải có ít nhất hai --region
và mỗi --region
phải chứa ít nhất một bản sao của mỗi object. Điều này có nghĩa là bạn cần phải có ít nhất ba bản sao của mỗi object nếu bạn muốn chịu được sự cố ở mức --region
.
Ví dụ, bạn có thể thêm một thiết bị lưu trữ với --region 2
và --zone 87
vào ring. Swift sẽ tự động sao chép dữ liệu giữa các --region
để đảm bảo rằng mỗi object có ít nhất một bản sao ở mỗi --region
.
Để đồng bộ dữ liệu giữa hai --region
trong OpenStack Swift, bạn sẽ cần một kết nối mạng nhanh và ổn định giữa hai --region
đó. Swift sẽ tự động sao chép dữ liệu giữa các --region
thông qua mạng này. Tốc độ sao chép dữ liệu sẽ phụ thuộc vào tốc độ và độ ổn định của kết nối mạng.
Nếu kết nối mạng giữa hai --region
không đủ nhanh hoặc không ổn định, việc sao chép dữ liệu có thể mất thời gian lâu hơn và có thể gây ra sự cố trong việc đồng bộ dữ liệu.
Zone.
Trong OpenStack Swift, --zone
được sử dụng để chỉ định vùng mà thiết bị lưu trữ đang hoạt động. Mỗi vùng là một nhóm các thiết bị lưu trữ mà bạn muốn Swift coi là cách ly về mặt lỗi với nhau. Điều này có nghĩa là Swift sẽ cố gắng không lưu trữ các bản sao của cùng một object trong cùng một vùng.
Ví dụ chúng ta chỉ định --zone 84
cho hai thiết bị lưu trữ (sdb
và sdc
) trên cùng một node (10.237.7.84
). Điều này có nghĩa là Swift sẽ coi hai thiết bị này như là thuộc cùng một vùng và sẽ cố gắng không lưu trữ các bản sao của cùng một object trên cả hai thiết bị này.
Tuy nhiên, --zone
không có nghĩa là các thông tin account chỉ được lưu trữ trên các node có cùng --zone
. Swift sẽ cố gắng phân phối dữ liệu trên tất cả các thiết bị lưu trữ trong tất cả các vùng để tối đa hóa độ bền và hiệu suất. Thông tin account có thể được lưu trữ trên bất kỳ thiết bị lưu trữ nào trong ring, không phụ thuộc vào --zone
.
Ví dụ thông tin account của một node có thể được lưu trữ trên các node khác, không phụ thuộc vào giá trị --zone
. Swift sẽ cố gắng phân phối dữ liệu trên tất cả các thiết bị lưu trữ trong tất cả các vùng để tối đa hóa độ bền và hiệu suất.
Vì vậy, thông tin account của node 10.237.7.84
có thể được lưu trữ trên các node có --zone
là 85
hoặc 86
, hoặc bất kỳ node nào khác trong ring.
Như vậy mỗi “zone” trong Swift đại diện cho một khu vực lưu trữ riêng biệt, có thể là một rack, một dãy rack, một tầng trong trung tâm dữ liệu, hoặc thậm chí là một trung tâm dữ liệu hoàn toàn riêng biệt. Mục đích của việc phân chia zone là để cung cấp cách ly lỗi: Swift sẽ cố gắng đảm bảo rằng các bản sao của cùng một object không được lưu trữ trong cùng một zone. Điều này giúp tăng cường độ bền và khả năng chịu lỗi của hệ thống.
Ví dụ ở cấu hình (10.237.7.84
, 10.237.7.85
, 10.237.7.86
) thì mỗi node được gán cho một zone riêng biệt (84
, 85
, 86
). Điều này có nghĩa là Swift sẽ cố gắng không lưu trữ các bản sao của cùng một object trên cùng một node. Điều này giúp tăng cường độ bền và khả năng chịu lỗi của hệ thống.