Khi một OSD bị down, Ceph sẽ không ngay lập tức thực hiện rebalance (tái phân phối dữ liệu) mà sẽ chờ một khoảng thời gian để xác định xem OSD đó có thực sự mất hay không.

Cơ chế hoạt động cụ thể như sau:
- OSD bị down
- Khi một OSD mất kết nối hoặc ngừng hoạt động, Ceph sẽ đánh dấu nó là down và out sau một khoảng thời gian nhất định nếu nó không tự khôi phục.
- Trạng thái này sẽ được phản ánh trong
ceph health detail
và các PG sử dụng OSD đó có thể chuyển sang trạng thái undersized, degraded.
- Chờ thời gian để xác nhận mất dữ liệu
- Ceph có tham số
mon_osd_report_timeout
(mặc định 900 giây = 15 phút), trong thời gian này nếu OSD hoạt động trở lại thì hệ thống không thực hiện rebalance.
- Ceph có tham số
- Nếu OSD không quay lại, Ceph thực hiện backfill & recovery
- Nếu sau
mon_osd_report_timeout
, OSD vẫn không quay lại, Ceph sẽ bắt đầu sao chép lại dữ liệu bị thiếu từ các OSD còn sống sang các OSD khác để đảm bảo mức replica được duy trì. - Quá trình này gọi là backfill & recovery, làm tăng tải IO trên cluster.
- Nếu sau
- Khi OSD bị mất hoàn toàn (out)
- Nếu OSD mất hoàn toàn và admin chủ động remove OSD khỏi cluster bằng lệnh:
ceph osd out <osd_id> ceph osd crush remove osd.<osd_id>
→ Lúc này Ceph sẽ rebalance lại dữ liệu ngay lập tức để đảm bảo số lượng bản sao đúng theo replication size.
- Nếu OSD mất hoàn toàn và admin chủ động remove OSD khỏi cluster bằng lệnh:
Ví dụ cụ thể:
- Pool có replica 2, có một object
obj_1234
được lưu trên OSD.10 và OSD.20. - Nếu OSD.10 bị down, hệ thống sẽ:
- Đánh dấu OSD.10 là down.
- Các PG liên quan sẽ có trạng thái undersized + degraded.
- Chờ
mon_osd_report_timeout
để xem OSD.10 có quay lại không. - Nếu OSD.10 không quay lại, Ceph sẽ chọn một OSD khác (ví dụ OSD.30) và sao chép
obj_1234
từ OSD.20 → OSD.30 để đảm bảo mức replica là 2.
Dưới đây là sơ đồ mô tả quá trình Ceph xử lý khi một OSD bị down, từ trạng thái “Undersized + Degraded” đến khi phục hồi dữ liệu:
Trạng thái ban đầu (Replica 2, OSD.10 và OSD.20 lưu object obj_1234)
-------------------------------------------------
| OSD.10 (obj_1234) | OSD.20 (obj_1234) |
-------------------------------------------------
1️⃣ OSD.10 bị down → PG trở thành Undersized + Degraded
-------------------------------------------------
| OSD.10 (DOWN ❌) | OSD.20 (obj_1234) |
-------------------------------------------------
🔻
Ceph chờ mon_osd_report_timeout
2️⃣ Nếu OSD.10 không quay lại → Ceph backfill & recovery
-------------------------------------------------
| OSD.30 (obj_1234 ✅) | OSD.20 (obj_1234) |
-------------------------------------------------
🔺
Ceph đã phục hồi replica về trạng thái an toàn
💡 Sơ đồ ví dụ trên cho ta thấy:
- Khi OSD.10 bị down, Ceph chờ
mon_osd_report_timeout
(900s mặc định). - Nếu OSD.10 không quay lại, Ceph sao chép object
obj_1234
từ OSD.20 sang OSD.30. - Cuối cùng, hệ thống khôi phục lại mức replica = 2, đảm bảo dữ liệu an toàn. 🚀
Bạn có thể kiểm tra giá trị của mon_osd_report_timeout
trong Ceph bằng lệnh sau:
shell> ceph config get mon mon_osd_report_timeout
900
Nếu bạn muốn xem toàn bộ cấu hình liên quan đến mon
, bạn có thể chạy:
shell> ceph config show mon.CEPH-LAB-MON-071
NAME VALUE SOURCE OVERRIDES IGNORES
auth_allow_insecure_global_id_reclaim true mon
cluster_network default mon
container_image 10.237.7.74:5000/ceph/ceph@sha256:479f0db9298e37defcdedb1edb8b8db25dd0b934afd6b409d610a7ed81648dbc mon
daemonize false override
keyring $mon_data/keyring default
leveldb_block_size 65536 default
leveldb_cache_size 536870912 default
leveldb_compression false default
leveldb_log default
leveldb_write_buffer_size 33554432 default
log_to_file true mon default[false]
log_to_journald false mon default[true]
log_to_stderr false mon (default[false])
mon_cluster_log_to_file true mon default[false]
mon_cluster_log_to_journald false mon default[true]
mon_cluster_log_to_stderr false mon (default[false])
mon_host [v2:10.237.7.71:3300/0,v1:10.237.7.71:6789/0] [v2:10.237.7.72:3300/0,v1:10.237.7.72:6789/0] [v2:10.237.7.73:3300/0,v1:10.237.7.73:6789/0] file
mon_memory_target 34359738368 mon
mon_osd_down_out_subtree_limit host mon
mon_pg_warn_max_object_skew 0.500000 mon
mon_warn_on_insecure_global_id_reclaim false mon
mon_warn_on_insecure_global_id_reclaim_allowed false mon
no_config_file false override
osd_pool_default_pg_autoscale_mode off mon
osd_pool_default_size 2 mon
public_network 10.237.7.0/24 file (mon[10.237.7.0/24])
rbd_default_features 61 default
rbd_qos_exclude_ops 0 default
setgroup ceph cmdline
setuser ceph cmdline
Ngoài ra, nếu bạn muốn kiểm tra tất cả các thông số cấu hình của Ceph, bạn có thể sử dụng:
shell> ceph config dump
WHO MASK LEVEL OPTION VALUE RO
global advanced cluster_network 10.237.7.0/24 *
global basic container_image 10.237.7.74:5000/ceph/ceph@sha256:479f0db9298e37defcdedb1edb8b8db25dd0b934afd6b409d610a7ed81648dbc *
global basic log_to_file true
global basic log_to_journald false
global basic log_to_stderr false
global advanced mon_cluster_log_to_file true
global advanced mon_cluster_log_to_journald false
global advanced mon_cluster_log_to_stderr false
global advanced mon_osd_down_out_subtree_limit host
global advanced osd_pool_default_pg_autoscale_mode off
global advanced osd_pool_default_size 2
mon advanced auth_allow_insecure_global_id_reclaim true
mon basic mon_memory_target 34359738368
mon advanced mon_pg_warn_max_object_skew 0.500000
mon advanced mon_warn_on_insecure_global_id_reclaim false
mon advanced mon_warn_on_insecure_global_id_reclaim_allowed false
mon advanced public_network 10.237.7.0/24 *
mgr advanced mgr/cephadm/container_image_alertmanager 10.237.7.74:5000/prometheus/alertmanager:v0.25.0 *
mgr advanced mgr/cephadm/container_image_grafana 10.237.7.74:5000/ceph/ceph-grafana:8.3.5 *
mgr advanced mgr/cephadm/container_image_node_exporter 10.237.7.74:5000/prometheus/node-exporter:v1.5.0 *
mgr advanced mgr/cephadm/container_image_prometheus 10.237.7.74:5000/prometheus/prometheus:v2.43.0 *
mgr advanced mgr/cephadm/container_init True *
mgr advanced mgr/cephadm/migration_current 6 *
mgr advanced mgr/dashboard/ALERTMANAGER_API_HOST http://CEPH-LAB-MON-071:9093 *
mgr advanced mgr/dashboard/FEATURE_TOGGLE_CEPHFS false *
mgr advanced mgr/dashboard/FEATURE_TOGGLE_ISCSI false *
mgr advanced mgr/dashboard/FEATURE_TOGGLE_NFS false *
mgr advanced mgr/dashboard/FEATURE_TOGGLE_RGW false *
mgr advanced mgr/dashboard/GRAFANA_API_SSL_VERIFY false *
mgr advanced mgr/dashboard/GRAFANA_API_URL https://CEPH-LAB-MON-071:3000 *
mgr advanced mgr/dashboard/PROMETHEUS_API_HOST http://CEPH-LAB-MON-071:9095 *
mgr advanced mgr/dashboard/ssl_server_port 8443 *
mgr advanced mgr/orchestrator/orchestrator cephadm
mgr advanced mgr/prometheus/rbd_stats_pools POOL-LAB-01 *
osd host:CEPH-LAB-MON-071 basic osd_memory_target 1528672119
osd advanced osd_memory_target_autotune true
osd.0 basic osd_mclock_max_capacity_iops_ssd 28227.305724
osd.1 basic osd_mclock_max_capacity_iops_ssd 23633.250708
< đã lược bỏ bớt output>
osd.8 basic osd_mclock_max_capacity_iops_ssd 33187.380764
osd.9 basic osd_mclock_max_capacity_iops_ssd 1428.586654
Mặc định, giá trị của mon_osd_report_timeout
thường là 900 giây (15 phút), tức là nếu một OSD mất kết nối, Ceph sẽ chờ 15 phút trước khi thực hiện các bước tiếp theo như đánh dấu out hoặc bắt đầu recovery.
Câu hỏi đặt ra là hệ thống có tự remove OSD ra khỏi Cluster khi vượt quá thời gian của mon_osd_report_timeout
hay không?
Khi một OSD bị down và vượt quá thời gian mon_osd_report_timeout
, nó không tự động bị remove khỏi cluster mà sẽ được đánh dấu là out sau một thời gian nhất định. Cụ thể:
🔹 Cách Ceph xử lý OSD down lâu
- OSD bị down
- Khi OSD mất kết nối, Ceph sẽ đánh dấu nó là down.
- Hệ thống vẫn giữ metadata của OSD đó, không loại bỏ ngay.
- Sau
mon_osd_report_timeout
(mặc định: 900 giây = 15 phút)- Monitor sẽ coi OSD là không phản hồi trong thời gian dài.
- Các PG chứa OSD này có thể rơi vào trạng thái undersized, degraded, hoặc inconsistent.
- Sau
osd_out_timeout
(mặc định: 600 giây = 10 phút)- Nếu OSD vẫn chưa quay lại, nó sẽ bị đánh dấu là “out”.
- Hệ thống bắt đầu rebalance dữ liệu sang các OSD khác để đảm bảo đủ số bản sao (replicas).
- OSD vẫn không quay lại?
- Nó vẫn tồn tại trong cluster, nhưng sẽ không được sử dụng để lưu trữ dữ liệu.
- Nếu muốn loại bỏ hẳn, bạn phải xóa thủ công bằng:
ceph osd purge <osd_id> --yes-i-really-mean-it
Kêt luận
mon_osd_report_timeout
không tự động xóa OSD, chỉ đánh dấu nó là down.osd_out_timeout
sẽ đánh dấu nó là out nếu mất kết nối quá lâu.- Ceph sẽ tự động rebalance dữ liệu nếu một OSD bị out.
- Nếu OSD bị hỏng hoàn toàn, bạn phải xóa thủ công.