восстановление ceph pg не запускается сразу

Время от времени я получаю одну ошибку несоответствия pg в своем кластере. Как указано в документах, я запускаю ceph pg repair pg.id, и команда дает указание pg x на osd y восстановить, похоже, работает как задумано. Но заводится не сразу, в чем может быть причина? Я провожу 24-часовые скрабы, поэтому в любой момент времени у меня есть как минимум 8-10 страниц, которые очищаются или глубоко очищаются. Формируют ли процессы pg, такие как очистка или восстановление, очередь, и моя команда восстановления просто ждет своей очереди? Или за этим стоит другая проблема?

Редактировать:

Вывод сведений о состоянии Ceph:

pg 57.ee is active+clean+inconsistent, acting [16,46,74,59,5]

Вывод

rados list-inconsistent-obj 57.ee --format=json-pretty


{
    "epoch": 55281,
    "inconsistents": [
        {
            "object": {
                "name": "10001a447c7.00005b03",
                "nspace": "",
                "locator": "",
                "snap": "head",
                "version": 150876
            },
            "errors": [],
            "union_shard_errors": [
                "read_error"
            ],
            "selected_object_info": {
                "oid": {
                    "oid": "10001a447c7.00005b03",
                    "key": "",
                    "snapid": -2,
                    "hash": 3954101486,
                    "max": 0,
                    "pool": 57,
                    "namespace": ""
                },
                "version": "55268'150876",
                "prior_version": "0'0",
                "last_reqid": "client.42086585.0:355736",
                "user_version": 150876,
                "size": 4194304,
                "mtime": "2021-03-15 21:52:43.651368",
                "local_mtime": "2021-03-15 21:52:45.399035",
                "lost": 0,
                "flags": [
                    "dirty",
                    "data_digest"
                ],
                "truncate_seq": 0,
                "truncate_size": 0,
                "data_digest": "0xf88f1537",
                "omap_digest": "0xffffffff",
                "expected_object_size": 0,
                "expected_write_size": 0,
                "alloc_hint_flags": 0,
                "manifest": {
                    "type": 0
                },
                "watchers": {}
            },
            "shards": [
                {
                    "osd": 5,
                    "primary": false,
                    "shard": 4,
                    "errors": [],
                    "size": 1400832,
                    "omap_digest": "0xffffffff",
                    "data_digest": "0x00000000"
                },
                {
                    "osd": 16,
                    "primary": true,
                    "shard": 0,
                    "errors": [],
                    "size": 1400832,
                    "omap_digest": "0xffffffff",
                    "data_digest": "0x00000000"
                },
                {
                    "osd": 46,
                    "primary": false,
                    "shard": 1,
                    "errors": [],
                    "size": 1400832,
                    "omap_digest": "0xffffffff",
                    "data_digest": "0x00000000"
                },
                {
                    "osd": 59,
                    "primary": false,
                    "shard": 3,
                    "errors": [
                        "read_error"
                    ],
                    "size": 1400832
                },
                {
                    "osd": 74,
                    "primary": false,
                    "shard": 2,
                    "errors": [],
                    "size": 1400832,
                    "omap_digest": "0xffffffff",
                    "data_digest": "0x00000000"
                }
            ]
        }
    ]
}

Этот pg находится внутри пула EC. Когда я запускаю ceph pg repair 57.ee, я получаю вывод:

instructing pg 57.ees0 on osd.16 to repair

Однако, как вы можете видеть из отчета pg, несогласованный сегмент находится в osd 59. Я думал, что s0 в конце вывода относится к первому сегменту, поэтому я также попробовал команду восстановления следующим образом:

ceph pg repair 57.ees3, но я получил сообщение об ошибке, которое говорит мне, что это недопустимая команда.


person Nyquillus    schedule 19.03.2021    source источник


Ответы (1)


У вас есть ошибки ввода-вывода, часто возникающие из-за неисправных дисков, так как вы видите ошибку сегмента:

errors": [],
            "union_shard_errors": [
                "read_error"

проблемный осколок находится на OSD: 59

Попробуйте заставить снова прочитать проблемный объект:

# rados -p  EC_pool get 10001a447c7.00005b03 

Очистка вызвала чтение объекта и вернула ошибку чтения, это означает, что объект помечен как исчезнувший, когда это произойдет, он попытается восстановить объект из другого места (пиринг, восстановление, обратная засыпка).

person Norbert_Cs    schedule 19.03.2021