четверг, 15 октября 2009 г.

Репликация с SymmetricDS

С первого взгляда всё просто, но потом появляются всякие левые ошибки, частично связанные с таймаутами(необходимо неопределённое время на запуск сервера репликации), частично хрен знает с чем.  Все примеры есть во вражеском коде - там типа скрипты, в документации описана последовательность действий для тестов(см глава 2) Вот пример на яве:







34     static void test() throws Exception{
35       final SymmetricWebServer masterNode = new SymmetricWebServer("master.properties");
36       Thread s = new Thread() {
37         public void run() {
38           try {
39             masterNode.start(8080);//блокирует поток выполнения
40           } catch (Exception e) {
41             e.printStackTrace();
42           }
43         }
44       };
45       s.start();
46       masterNode.getEngine().openRegistration("slave", "1");
47       masterNode.getEngine().reloadNode("1");
48       Thread.sleep(10000);//надо ждать пока сервер не запустится
49       SymmetricEngine slaveEngine = new SymmetricEngine("slave.properties");
50       slaveEngine.start();
51     }

Все настройки указываются в пропертях и конфигурации xml.

Зы 1. Сервер сразу не запустился - необходимо изменить(положить в classpath) ddl-config.xml в котором DECIMAL" size="18" - по умолчанию 20 - что неработает с firebird.

Зы 2. На рутовый нод сначала нужно пролить данные - необходимо создать запись в бд про центральный нод



205          //создаём первый нод
206          session.createSQLQuery("insert into SYM_NODE (node_id, node_group_id, external_id, sync_enabled) " +
207              "values ('00000', 'master', '00000', 1);").executeUpdate();
208          session.createSQLQuery("insert into SYM_NODE_IDENTITY " +
209              "values ('00000')").executeUpdate();

Зы 3. Данные на клиент проливаются сами при репликации(можно полностью прогрузить нод reloadNode)

Зы 4. Так делать ненадо, сервер мнёт и ругается когда типа и серверу и клиенту говорят что нада самим лазить за обновлениями(буква - это лазить за обновлениями'P' )


217          //указываем связи - направление синхронизации (Slave сам подсоединяется к Master)
218          session.createSQLQuery("insert into sym_node_group_link (source_node_group_id, target_node_group_id, data_event_action) " +
219              "values ('slave', 'master', 'P')").executeUpdate();
220          //корп ждёт когда к нему подсоединится сторе(W)
221          session.createSQLQuery("insert into sym_node_group_link (source_node_group_id, target_node_group_id, data_event_action) " +
222              "values ('master', 'slave', 'P')").executeUpdate();






Комментариев нет:

Отправить комментарий