2012-12-05 3 views
1

dbdb에서 basicDatasource에 래핑 된 jdbc mysql 드라이버를 통해 mysql 클러스터에 연결하려고합니다. 나는 두 서버가 서버 시작에 연결 요청을받을 것을 볼 내 MySQL의 로그 파일에서Jdbc mysql loadbalancing

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> 
     <property name="driverClassName" value="com.mysql.jdbc.Driver"/> 
     <property name="url" value="jdbc:mysql:loadbalance://slave1:3306,slave2:3306/mobile_detection"/> 
     <property name="username" value="username"/> 
     <property name="password" value=""/> 
     <property name="initialSize" value="10" /> 
     <property name="maxActive" value="100" /> 
     <property name="maxIdle" value="50" /> 
     <property name="minIdle" value="10" /> 
    </bean> 

하지만, 첫 번째 SLAVE1 자신의 수신 READ 쿼리를 :

여기에 내 콩의 설정입니다. slave2는 slave1이 작동 중지 된 경우에만 장애 조치로 사용됩니다.

제대로 작동하려면 loadbalance 옵션을 얻지 못했습니다.

답변

0

분명히 알아야 할 여러 가지가 있습니다.

처음에는로드 균형 정책을 지정하지 않아야하며, 어디에서 왔는지는 확실하지 않습니다. 그렇지 않으면 작동하지 않습니다.

둘째, 기본적으로 DBCP는 단 하나의 연결로 시작하고 극단적 인 요구에 따라 다른 연결을 만듭니다. 이것이 의미하는 바는 항상 재사용되는 하나의 MySQL 호스트와 연관된 하나의 연결 만 (특히 트랜잭션이 적은 경우) 모든 트래픽이 거기에 집중된다는 것입니다. 더 큰 초기 풀 크기를 지정하면이 문제를 해결할 수 있습니다. 이렇게하면 각 서버에 여러 연결이 생성됩니다. 개인적으로 3 대의 서버에서로드 균형을 조정하고 고정 된 36 개의 연결 풀을 사용합니다. 그런 다음 DBCP는 다른 MySQL 호스트와 관련된 연결을 다소 공평하게 시도합니다. 3 개의 연결 만 지정하면 연결이 단일 호스트로로드 밸런싱 될 가능성이 있으며 여전히 불공정 한 분배로 끝날 수 있습니다. 내 추측은 그들이 잘 작동합니다 roundRobin 정책을 수정하는 경우이지만, 지금은 나를 위해 작동하지 않습니다.

DBCP는 풀의 연결을로드 밸런싱하며 매우 오랫동안 (또는 영원히) 살고 있음을 기억하십시오. 어떤 할당든지 당신이 처음에 얻는 경우에 이것은 이렇게 체재 할 것이다. 풀은 동적로드 균형 조정에 적합하지 않습니다. MySql J Connection이 재시작하지 않고 새로운 MySQL 호스트를 추가하려고하는 JMX 빈은 잘 작동하지 않습니다.