Плохая производительность записи с MongoDB 5.0.8 в настройке PSA (Primary-Secondary-Arbiter)

У меня есть некоторые проблемы с производительностью записи с MongoDB 5.0.8 в развертывании PSA (Primary-Secondary-Arbiter), когда один член, несущий данные, выходит из строя.

Мне известно о странице « Устранение проблем с производительностью с помощью набора реплик PSA » и о процедуре временного решения этой проблемы.

Однако, на мой взгляд, описанное здесь ручное вмешательство не должно быть необходимым во время работы. Итак, что я могу сделать, чтобы система продолжала работать эффективно даже в случае сбоя узла? Другими словами, как в MongoDB 4.x с параметром «enableMajorityReadConcern=false».

Насколько я понимаю, проблема как-то связана с файлом defaultRWConcern. При настройке набора реплик PSA в MongoDB вы вынуждены установить DefaultRWConcern. В противном случае при вызове rs.addArb появится следующее сообщение:

MongoServerError: Reconfig попытался установить конфигурацию, которая изменила бы неявную проблему записи по умолчанию. Используйте команду setDefaultRWConcern, чтобы задать проблему записи для всего кластера, и повторите попытку перенастройки.

Так я и сделал

      db.adminCommand({
    "setDefaultRWConcern": 1,
    "defaultWriteConcern": {
        "w": 1
    },
    "defaultReadConcern": {
        "level": "local"
    }
})

Я ожидаю, что эта конфигурация не вызовет задержек при чтении/записи в систему PSA только с одним доступным узлом передачи данных.

Но я наблюдаю сообщения «медленного запроса» в журнале mongod, подобные этому:

      {
    "t": {
        "$date": "2022-05-13T10:21:41.297+02:00"
    },
    "s": "I",
    "c": "COMMAND",
    "id": 51803,
    "ctx": "conn149",
    "msg": "Slow query",
    "attr": {
        "type": "command",
        "ns": "<db>.<col>",
        "command": {
            "insert": "<col>",
            "ordered": true,
            "txnNumber": 4889253,
            "$db": "<db>",
            "$clusterTime": {
                "clusterTime": {
                    "$timestamp": {
                        "t": 1652430100,
                        "i": 86
                    }
                },
                "signature": {
                    "hash": {
                        "$binary": {
                            "base64": "bEs41U6TJk/EDoSQwfzzerjx2E0=",
                            "subType": "0"
                        }
                    },
                    "keyId": 7096095617276968965
                }
            },
            "lsid": {
                "id": {
                    "$uuid": "25659dc5-a50a-4f9d-a197-73b3c9e6e556"
                }
            }
        },
        "ninserted": 1,
        "keysInserted": 3,
        "numYields": 0,
        "reslen": 230,
        "locks": {
            "ParallelBatchWriterMode": {
                "acquireCount": {
                    "r": 2
                }
            },
            "ReplicationStateTransition": {
                "acquireCount": {
                    "w": 3
                }
            },
            "Global": {
                "acquireCount": {
                    "w": 2
                }
            },
            "Database": {
                "acquireCount": {
                    "w": 2
                }
            },
            "Collection": {
                "acquireCount": {
                    "w": 2
                }
            },
            "Mutex": {
                "acquireCount": {
                    "r": 2
                }
            }
        },
        "flowControl": {
            "acquireCount": 1,
            "acquireWaitCount": 1,
            "timeAcquiringMicros": 982988
        },
        "readConcern": {
            "level": "local",
            "provenance": "implicitDefault"
        },
        "writeConcern": {
            "w": 1,
            "wtimeout": 0,
            "provenance": "customDefault"
        },
        "storage": {},
        "remote": "10.10.7.12:34258",
        "protocol": "op_msg",
        "durationMillis": 983
    }

Упомянутая здесь коллекция находится под надлежащей нагрузкой: около 1000 операций чтения и 1000 операций записи в секунду от разных (одновременных) клиентов.

MongoDB 4.x с параметром «enableMajorityReadConcern=false» работал здесь «нормально», и я не заметил потери производительности в своем приложении. MongoDB 5.x не справляется с этим, и в моем приложении накапливаются данные, которые я не могу эффективно записать.

Итак, мой вопрос в том, смогу ли я вернуть поведение MongoDB 4.x. Гарантия записи от единственного узла, несущего данные, который доступен в сценарии сбоя, была бы приемлемой для меня. Но в случае сбоя следует избегать ручной перенастройки неисправного узла.

Спасибо за любой совет!

1 ответ

В конце мы изменили настройку на макет PSS. Это также было рекомендовано на форуме сообщества MongoDB .

Другие вопросы по тегам