Spec-Zone .ru
спецификации, руководства, описания, API
|
Connector/J долго обеспечивал эффективное средство распределить загрузку чтения-записи через многократные экземпляры сервера MySQL для Кластера или основного основного развертывания репликации. Запускаясь с Connector/J 5.1.3, можно теперь динамически сконфигурировать сбалансированные с загрузки соединения без отключения электричества службы. Незавершенные транзакции не теряются, и никакие исключения приложения не сгенерированы, если какое-либо приложение пытается использовать тот определенный экземпляр сервера.
Есть две опции строки подключения, связанные с этой функциональностью:
loadBalanceConnectionGroup
– Это обеспечивает
возможность сгруппировать соединения из различных источников. Это позволяет Вам управлять этими
источниками JDBC в пределах единственного загрузчика class в любой комбинации, которую Вы выбираете.
Если они используют ту же самую конфигурацию, и Вы хотите управлять ими как логическая единственная
группа, дать им то же самое имя. Это - ключевое свойство для управления: если Вы не определяете имя
(строка) для loadBalanceConnectionGroup
, невозможно управлять соединениями.
Все сбалансированные с загрузки соединения, совместно использующие то же самое loadBalanceConnectionGroup
значением, независимо от того, как приложение создает их, будут управлять вместе.
loadBalanceEnableJMX
– Возможность управлять
соединениями представляется, когда Вы определяете a loadBalanceConnectionGroup
, но если Вы хотите управлять этим внешне,
включите JMX, устанавливая это свойство в true
. Это включает реализации
JMX, которая представляет управление и контролирующие операции группы соединения. Далее, запустите свое
приложение с -Dcom.sun.management.jmxremote
Флаг JVM. Можно тогда
выполнить, соединяют и выполняют операции, используя клиент JMX такой как jconsole
.
Как только соединение было сделано, используя корректные опции строки подключения, много контролирующих свойств доступны:
Текущее активное количество узла.
Текущее активное количество физического соединения.
Текущее активное количество логического соединения.
Создаются полные логические соединения.
Полное количество транзакции.
Следующие операции управления могут также быть выполнены:
Добавьте узел.
Удалите узел.
Интерфейс JMX, com.mysql.jdbc.jmx.LoadBalanceConnectionGroupManagerMBean
, имеет
следующие методы:
int getActiveHostCount(String group);
int getTotalHostCount(String group);
long getTotalLogicalConnectionCount(String group);
long getActiveLogicalConnectionCount(String group);
long getActivePhysicalConnectionCount(String group);
long getTotalPhysicalConnectionCount(String group);
long getTotalTransactionCount(String group);
void removeHost(String group, String host) throws
SQLException;
void stopNewConnectionsToHost(String group, String host)
throws SQLException;
void addHost(String group, String host, boolean
forExisting);
String getActiveHostsList(String group);
String getRegisteredConnectionGroups();
getRegisteredConnectionGroups()
метод возвращает имена всех групп соединения,
определенных в том загрузчике class.
Можно протестировать эту установку со следующим кодом:
public class Test { private static String URL = "jdbc:mysql:loadbalance://" + "localhost:3306,localhost:3310/test?" + "loadBalanceConnectionGroup=first&loadBalanceEnableJMX=true"; public static void main(String[] args) throws Exception { new Thread(new Repeater()).start(); new Thread(new Repeater()).start(); new Thread(new Repeater()).start(); } static Connection getNewConnection() throws SQLException, ClassNotFoundException { Class.forName("com.mysql.jdbc.Driver"); return DriverManager.getConnection(URL, "root", ""); } static void executeSimpleTransaction(Connection c, int conn, int trans){ try { c.setAutoCommit(false); Statement s = c.createStatement(); s.executeQuery("SELECT SLEEP(1) /* Connection: " + conn + ", transaction: " + trans + " */"); c.commit(); } catch (SQLException e) { e.printStackTrace(); } } public static class Repeater implements Runnable { public void run() { for(int i=0; i < 100; i++){ try { Connection c = getNewConnection(); for(int j=0; j < 10; j++){ executeSimpleTransaction(c, i, j); Thread.sleep(Math.round(100 * Math.random())); } c.close(); Thread.sleep(100); } catch (Exception e) { e.printStackTrace(); } } } }}
После компиляции приложение может быть запущено с -Dcom.sun.management.jmxremote
флаг, чтобы включить удаленному управлению. jconsole
может тогда быть запущен.
Test
основной class будет перечислен jconsole
.
Выберите это и щелкните . Можно тогда переместиться к com.mysql.jdbc.jmx.LoadBalanceConnectionGroupManager
боб. В этой точке можно
щелкнуть по различным операциям и исследовать возвращенный результат.
Если бы у Вас теперь был дополнительный экземпляр MySQL, работающего на порту 3309, то Вы могли бы
гарантировать, что Connector/J начинает использовать это при использовании addHost()
, который представляется в jconsole
.
Отметьте, что эти операции могут быть выполнены динамически, не имея необходимость останавливать выполнение
приложения.
Для дополнительной информации о комбинации выравнивания нагрузки и failover, см. Раздел 22.3.9, "Failover с Connector/J".