
Здравствуйте. У нас есть 3 узла SQL Server 2014 Standard Edition, один из них основной, а другой — репликация основного с использованием базы данных репликации транзакций.
Мы хотим использовать два других узла для операций чтения и снизить нагрузку на основной узел.
Как можно настроить балансировщик нагрузки, такой как HA Proxy, чтобы отделить операции чтения от операций записи и отправлять на узлы 2 и 3 только операции чтения? Или нам следует использовать другой балансировщик нагрузки, который позволяет это?
решение1
Как можно настроить балансировщик нагрузки, такой как HA Proxy, чтобы отделить операции чтения от операций записи и отправлять на узлы 2 и 3 только операции чтения?
Вовсе нет. Балансировщик нагрузки не может знать, что происходит в соединении с SQL Server, и логически понимать, что можно, а что нельзя считать только чтением, только записью или смешанным (что является записью), особенно потому, что балансировщик нагрузки не может смотреть вперед во времени. Я могу подключиться к SQL Server, начать транзакцию, выполнить операцию чтения, А ЗАТЕМ НАЧАТЬ ЗАПИСЬ — как вы узнаете, что я собираюсь писать, принимая решение о балансировке нагрузки? Нет логического способа справиться с этим, не глядя вперед во времени.
Обычно это делается путем создания различных соединений на уровне приложения и предоставления приложению возможности решать, какое из них использовать. В конце концов, можно было бы предположить, что программисты достаточно умны, чтобы знать, намерены ли они использовать соединение только для чтения или, возможно, на самом деле записывать данные в то же соединение/транзакцию на более позднем этапе.