Балансировка нагрузки отказоустойчивой конфигурации источника данных EAP 6 между двумя серверами SQL? - PullRequest
0 голосов
/ 06 февраля 2019

Среда: Jboss EAP 6.4 У меня есть следующая конфигурация источника данных в моем standalone-ha.xml

<datasource jndi-name="java:jboss/datasources/localPrimaryDS" pool-name="IntegrationDS1" enabled="true" use-java-context="true" statistics-enabled="true">
    <connection-url>jdbc:sqlserver://primarySqlServer;databaseName=HalfFat|jdbc:sqlserver://secondarySqlServer;databaseName=HalfFat</connection-url>
    <driver>mssql</driver>
    <url-delimiter>|</url-delimiter>
    <pool>
        <min-pool-size>5</min-pool-size>
        <max-pool-size>100</max-pool-size>
        <prefill>true</prefill>
        <use-strict-min>true</use-strict-min>
        <flush-strategy>IdleConnections</flush-strategy>
    </pool>
    <security>
        <user-name>user</user-name>
        <password>psswd</password>
    </security> 
    <validation>                    
        <validate-on-match>true</validate-on-match>
        <background-validation>false</background-validation>
        <background-validation-millis>60000</background-validation-millis>
        <valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.mssql.MSSQLValidConnectionChecker"></valid-connection-checker>
        <exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.mssql.MSSQLExceptionSorter"></exception-sorter>
    </validation>
</datasource>

Замечание: Когда присутствуют оба сервера SQL, приложение получало соединения JDBC исключительно от основного sql-сервераэкземпляр сервера.Когда я приостановил / отключил основной сервер sql, на уровне приложения я заметил, что разорванные соединения уничтожаются / новые соединения получаются из экземпляра вторичного сервера sql.Все как и ожидалось.Тем не менее, я наблюдал сочетание двух подключений, если я возобновил / повторно включил основной экземпляр сервера sql.

Вопрос. Это как-то нежелательно, так как я ожидаю, что приложение будет продолжать использовать подключения из вторичной базы данных до тех пор, покаэто терпит неудачу.Есть ли что-то, что я могу настроить на источнике данных, чтобы отключить это поведение «балансировки нагрузки»?

Спасибо

1 Ответ

0 голосов
/ 06 февраля 2019

Оказывается, что <use-strict-min>true</use-strict-min> является причиной проблемы.Согласно redhat , когда для use-strict-min задано значение true, сканирование незанятых соединений не помечает для закрытия дальнейшие соединения, как только размер min-pool (используется + доступные соединения) был установлендостиг.В результате, я предполагаю, что все еще есть некоторые соединения из первичной базы данных, которые не были помечены для закрытия, и неиспользование SQL-сервера сделало бы эти неочищенные соединения снова доступными.

...