1. So sánh giữa Ceph và Raid.
Ceph và RAID đều là công nghệ được sử dụng để lưu trữ dữ liệu. Tuy nhiên, chúng có những ưu điểm và hạn chế khác nhau và không thể so sánh trực tiếp để xác định công nghệ nào tốt hơn.
RAID (Redundant Array of Independent Disks) là một phương pháp để kết hợp nhiều ổ đĩa vật lý thành một hệ thống lưu trữ, tăng hiệu suất và độ tin cậy của hệ thống. Tuy nhiên, RAID yêu cầu tối thiểu hai ổ đĩa để hoạt động và việc quản lý, bảo trì và nâng cấp có thể khó khăn.
Ceph là một hệ thống lưu trữ phân tán được thiết kế để lưu trữ dữ liệu trên nhiều máy chủ. Ceph cung cấp tính sẵn sàng cao, khả năng mở rộng dễ dàng và hỗ trợ đa nền tảng. Tuy nhiên, Ceph yêu cầu một số kiến thức kỹ thuật cao để triển khai và quản lý.
2. Cách tính replica trong Ceph như thế nào?
Trong hệ thống Ceph, replica là số bản sao của dữ liệu được lưu trữ trên các node lưu trữ khác nhau để tăng tính sẵn sàng và độ tin cậy của hệ thống. Cách tính replica trong Ceph phụ thuộc vào cấu hình lưu trữ cụ thể được sử dụng.
Một số ví dụ cách tính replica trong Ceph bao gồm:
Nếu sử dụng pool chuẩn với replica size = 2, thì mỗi đối tượng sẽ được lưu trữ trên hai OSD khác nhau. Điều này đảm bảo rằng nếu một OSD bị lỗi, đối tượng vẫn có thể được truy cập từ OSD còn lại.
Nếu sử dụng Erasure Coding (mã hóa sửa chữa lỗi), replica sẽ được tính dựa trên cấu hình mã hóa được sử dụng. Ví dụ: khi sử dụng mã hóa Jerasure với k=2 m=2, nghĩa là dữ liệu được chia thành 4 phần, trong đó 2 phần là dữ liệu gốc và 2 phần là mã sửa chữa lỗi. Replica sẽ được tính bằng k+ m, tức là 4.
Cách tính replica trong Ceph sẽ phụ thuộc vào cấu hình cụ thể được sử dụng và yêu cầu kỹ thuật của hệ thống.
3. Ví dụ cách tính replica.
Ví dụ giả sử trong hệ thống Ceph hiện tại đang sử dụng replica size = 3, có tổng cộng 30 ổ cứng với dung lượng 4TB mỗi ổ.
Để tính toán dung lượng lưu trữ sẽ được sử dụng trong hệ thống Ceph, ta có thể sử dụng công thức sau:
Dung lượng lưu trữ = (Số lượng ổ cứng) x (Dung lượng mỗi ổ cứng) x (Replica size)
Ứng dụng công thức trên vào trường hợp này, ta có:
Dung lượng lưu trữ = 30 x 4TB x 3 = 360TB
Vì vậy, hệ thống Ceph đang sử dụng replica size = 3 và có tổng dung lượng lưu trữ là 360TB, được phân tán trên 90TB trên mỗi OSD (ổ đĩa trạng thái riêng biệt) được sử dụng để lưu trữ dữ liệu. Cần lưu ý rằng, các thông số này có thể thay đổi tùy thuộc vào cấu hình và yêu cầu kỹ thuật của hệ thống.
4. Tạo pool với replica riêng biệt.
Trong hệ thống Ceph, replica size được thiết lập cho mỗi pool, chứ không phải cho từng đối tượng (object) riêng lẻ. Vì vậy, nếu bạn muốn tạo mỗi pool với replica size riêng biệt, bạn có thể thực hiện việc đó bằng cách tạo các pool khác nhau với replica size khác nhau.
Khi tạo một pool mới trong Ceph, bạn có thể chỉ định replica size cho pool đó. Ví dụ, nếu bạn muốn tạo một pool với replica size = 2, bạn có thể sử dụng lệnh sau:
ceph osd pool create <pool-name> <pg-num> <pgp-num> <pool-type> <flags> <replica-size>
Câu lệnh “ceph osd pool create” được sử dụng để tạo mới một pool OSD trong hệ thống Ceph, với các đối số được chỉ định như sau:
- pool-name: Tên của pool OSD mới được tạo.
- pg-num: Số lượng PG (Placement Group) sẽ được tạo trong pool. PG là một phần quan trọng của Ceph để phân phối dữ liệu và tính toán đồng bộ.
- pgp-num: Số lượng PGP (PG Placement) sẽ được tạo trong pool. PGP là một đại diện ảo cho một PG cụ thể, và giúp hệ thống Ceph xác định OSD để lưu trữ PG đó.
- pool-type: Loại của pool được tạo, có thể là replicated hoặc erasure-coded.
- flags: Các tùy chọn khác để cấu hình pool, chẳng hạn như hashpspool để kích hoạt tính năng pool auto-scaling.
- replica-size: Số lượng bản sao dữ liệu được lưu trữ trong pool. Giá trị này phải lớn hơn hoặc bằng 1. Nếu loại pool là replicated, giá trị này xác định số lượng OSD cần để lưu trữ các bản sao dữ liệu. Nếu loại pool là erasure-coded, giá trị này xác định số lượng chunk mặc định được sử dụng để mã hóa dữ liệu.
Ví dụ với replica size = 2, mỗi đối tượng trong pool đó sẽ được lưu trữ trên 2 OSD khác nhau để đảm bảo tính sẵn sàng và độ tin cậy của hệ thống.
Số lượng PG và PGP được khuyến nghị khi tạo một pool trong Ceph có thể được tính toán dựa trên số lượng OSD có sẵn trong hệ thống. Để tính toán số lượng PG và PGP, bạn có thể sử dụng công cụ ceph osd pool calc trong hệ thống Ceph. Cú pháp của lệnh này như sau:
ceph osd pool calc <pg_num> <pgp_num> <size>
Trong đó:
- pg_num: Số lượng PG mong muốn cho pool mới.
- pgp_num: Số lượng PGP mong muốn cho pool mới.
- size: Số lượng OSD mong muốn cho mỗi PG.
Để dễ hiểu, ta sẽ có ví dụ như sau:
Giả sử hệ thống Ceph của bạn có tổng cộng 20 OSD. Bạn muốn tạo một pool mới có tên là new-pool với mục đích lưu trữ dữ liệu chung trên tất cả các OSD có sẵn trong hệ thống.
Để tính toán số lượng PG và PGP cho pool new-pool, bạn có thể sử dụng lệnh sau:
ceph osd pool calc 128 128 2
Lưu ý rằng trong ví dụ này, chúng ta sử dụng giá trị 2 cho tham số để chỉ định số lượng OSD mong muốn cho mỗi PG. Giá trị này có thể được điều chỉnh tùy thuộc vào các yêu cầu cụ thể của hệ thống.
Kết quả trả về từ lệnh trên là:
pool 1 'new-pool' created
pg_num: 128
pgp_num: 128
Sau đó, bạn có thể tạo pool mới new-pool với số lượng PG và PGP tính toán được bằng lệnh sau:
ceph osd pool create new-pool 128 128 replicated
Trong ví dụ này, chúng ta sử dụng loại pool là replicated, tuy nhiên, loại pool này có thể được thay đổi tùy thuộc vào yêu cầu cụ thể của hệ thống.
5. PGs và OSDs là gì?
PGs và OSDs là hai thành phần quan trọng trong hệ thống Ceph để quản lý và lưu trữ dữ liệu.
PG (Placement Group) là một phân vùng dữ liệu logic trong hệ thống Ceph. Mỗi PG chứa một tập hợp các đối tượng (objects) được phân tán trên nhiều OSDs (ổ đĩa trạng thái riêng biệt) khác nhau. PGs được sử dụng để phân phối dữ liệu và đảm bảo tính sẵn sàng và độ tin cậy của hệ thống. Mỗi PG sẽ được xử lý bởi một hoặc nhiều OSDs, tùy thuộc vào thiết lập của replica size và CRUSH map.
OSD (Object Storage Daemon) là một quá trình chạy trên các máy chủ trong hệ thống Ceph để lưu trữ và quản lý dữ liệu. Mỗi OSD quản lý một ổ đĩa trạng thái riêng biệt để lưu trữ các đối tượng (objects) và metadata tương ứng. Khi một yêu cầu đọc hoặc ghi đến một đối tượng, hệ thống Ceph sẽ định vị và truy cập các OSDs phù hợp để lấy hoặc lưu trữ dữ liệu.
Tóm lại, PGs và OSDs là hai thành phần quan trọng trong hệ thống Ceph để quản lý và lưu trữ dữ liệu. PGs được sử dụng để phân phối dữ liệu trên nhiều OSDs, đảm bảo tính sẵn sàng và độ tin cậy của hệ thống. OSDs là nơi lưu trữ dữ liệu và metadata tương ứng của các đối tượng trong hệ thống Ceph.
6. Giới hạn số lượng pool trong Ceph.
Trong hệ thống Ceph, số lượng pool (vùng lưu trữ) mà bạn có thể tạo không bị giới hạn cứng bởi Ceph. Tuy nhiên, việc tạo quá nhiều pool có thể dẫn đến một số vấn đề về hiệu suất hoặc quản lý hệ thống.
Khi bạn tạo một pool mới, Ceph sẽ tạo các PGs (phân vùng) và OSDs (ổ đĩa trạng thái riêng biệt) tương ứng với pool đó. Vì vậy, nếu bạn tạo quá nhiều pool, số lượng PGs và OSDs tương ứng cũng sẽ tăng lên, ảnh hưởng đến hiệu suất và tài nguyên hệ thống.
Ngoài ra, khi tạo quá nhiều pool, việc quản lý và điều chỉnh hệ thống sẽ trở nên khó khăn hơn. Vì vậy, bạn nên thiết kế số lượng pool phù hợp với yêu cầu và tài nguyên của hệ thống của bạn, và tránh tạo quá nhiều pool không cần thiết.
Tóm lại, trong hệ thống Ceph không có giới hạn cứng về số lượng pool mà bạn có thể tạo, nhưng việc tạo quá nhiều pool có thể ảnh hưởng đến hiệu suất và quản lý hệ thống.
7. Mỗi OSD có phải là mỗi ổ cứng vật lý không?
Không, mỗi OSD trong hệ thống Ceph không nhất thiết phải tương ứng với một ổ cứng vật lý. Thực tế, một ổ cứng vật lý có thể chứa nhiều OSD, và một OSD cũng có thể được lưu trữ trên nhiều ổ cứng vật lý khác nhau.
Điều này có thể được thực hiện bằng cách sử dụng phần mềm để phân phối dữ liệu của Ceph, được gọi là CRUSH (Controlled Replication Under Scalable Hashing). CRUSH sử dụng một bản đồ CRUSH để ánh xạ các OSDs và PGs vào các node vật lý trong hệ thống lưu trữ. Trong bản đồ này, mỗi OSD được định danh bằng một số hoặc tên, và không nhất thiết phải tương ứng với một ổ cứng vật lý cụ thể.
8. Giả sử tôi muốn xây 1 cụm Ceph với replica 3, tôi cần các yêu cầu tối thiểu nào?
Các yêu cầu tối thiểu cho một cụm Ceph replica 3 bao gồm:
- Tối thiểu 3 node Ceph OSD để đảm bảo tính sẵn sàng và khả năng chịu lỗi khi một hoặc hai node bị lỗi. Với replica 3, mỗi node OSD trong một cụm Ceph cần ít nhất 3 ổ cứng vật lý để đảm bảo tính sẵn sàng và khả năng chịu lỗi.
- Hai ổ cứng được sử dụng để lưu trữ dữ liệu và cấu hình OSD.
- Một ổ cứng được sử dụng để lưu trữ journal cho OSD.
- Mỗi node OSD cần có một ổ đĩa dành riêng cho các OSD, tốt nhất là ổ đĩa SSD cho hiệu suất tốt hơn.
- Tối thiểu 1 node Ceph Monitor để giám sát các OSD và quản lý metadata.
- Kết nối mạng ổn định và tốc độ cao giữa các node Ceph.
- Bộ nhớ RAM tối thiểu 1 GB cho mỗi node Ceph OSD và 2 GB cho mỗi node Ceph Monitor.
Với cấu hình tối thiểu replica 3 và 3 node OSD như đã nêu ở trên, hệ thống Ceph vẫn hoạt động được khi một node bị lỗi. Tuy nhiên, khi hai node bị lỗi, hệ thống Ceph sẽ không còn có đủ số replica để duy trì tính sẵn sàng và dữ liệu có thể bị mất hoặc không thể truy cập được.
Vì vậy, để đảm bảo tính sẵn sàng và chịu lỗi cho hệ thống Ceph, tốt nhất là có ít nhất 4 node OSD, trong đó replica 3 sẽ đảm bảo tính sẵn sàng và chịu lỗi khi một hoặc hai node bị lỗi.
9. Ceph hỗ trợ tối đa bao nhiêu bản replica?
Ceph hỗ trợ tối đa 7 bản sao (replica) cho mỗi đối tượng dữ liệu. Tuy nhiên, việc sử dụng nhiều bản sao sẽ tăng khả năng chịu lỗi và tính sẵn sàng của hệ thống, nhưng cũng đồng nghĩa với việc tăng tài nguyên lưu trữ và băng thông được sử dụng.
Ngoài ra, việc sử dụng nhiều bản sao cũng sẽ làm tăng thời gian trễ khi ghi dữ liệu và làm giảm hiệu suất của hệ thống. Vì vậy, số lượng bản sao nên được chọn một cách cân nhắc, dựa trên nhu cầu của hệ thống và các yêu cầu về tính sẵn sàng và hiệu suất.