JVM Failover Issue - PullRequest
       1

JVM Failover Issue

0 голосов
/ 27 февраля 2020

У меня проблема с этим кодом. У меня есть 2 сервера, на которых одновременно работает JVM, serverA и serverB. Помимо названия, все процессы, программное обеспечение идентичны. Идея состоит в том, что если JVM на сервере A дает сбой, JVM на сервере B вступит во владение немедленно.

Для проверки того, какой сервер является основным, я запускаю метод проверки, который обновляет таблицу (имя сервера и дату обновления) в базе данных.

Например, когда сервер А является основным, он проверит, является ли текущий сервер в БД сервером А. Если это так, он обновит имя сервера и время последнего обновления базы данных. Если нет (main = ServerB), он проверит разницу между текущим временем и временем последнего обновления. Если результат составляет> 50 секунд (что указывает на проблему с текущим основным сервером), serverA будет обновляться как основной.

Проблема, с которой я сталкиваюсь, состоит в том, что были случаи, когда оба сервера обновляли себя как главный. Например:

ServerA обновлен около 6: 20: 23

ServerB обновлен около 6: 20: 59

Из-за того, что эти два пытаются запустить процессы JVM на В то же время у меня есть случаи, когда обе JVM создают блокировку для одной и той же работы. Обычно, когда возникают такие проблемы, JVM неосновного сервера зависает и в конечном итоге получает ошибку «Недостаточно памяти».

Я хотел бы знать, есть ли способы остановить один сервер (перезапустите JVM?), Когда другой вступает во владение, или чтобы два сервера не боролись за основную позицию.

Любая помощь очень ценится.


if (WmsParam.HOST_SERVER_NAME.equals(r.getLastUpdatePname())) //check if current server is still main
    {
        result = true;
    }
else
    {
        Calendar nowTime = Calendar.getInstance();
        long lastUsed = r.getLastUpdateDate().getTime();
        long nowTimeMili = nowTime.getTimeInMillis();

        long diff = nowTimeMili - lastUsed;

        long diffSec = diff /1000;

        if (diffSec >= WmsParam.HOST_DELAY_SECONDS) //host_delay_seconds = 50
        {
            result = true;
        }
    }

if (result)
        {

            rsAkey.setKey(rsKey);
            rsAkey.updateLastUsedDate(new Date());
            rsAkey.updateLastUpdatePname(WmsParam.HOST_SERVER_NAME);

            reasonHandler.modify(rsAkey);
            getConnection().commit();

        }

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...