forum.bitel.ru
http://forum.bitel.ru/

Несколько Access+Accounting одновременно
http://forum.bitel.ru/viewtopic.php?f=44&t=12591
Страница 1 из 1

Автор:  fmaks [ 23 авг 2017, 15:56 ]
Заголовок сообщения:  Несколько Access+Accounting одновременно

Здравствуйте.
Вопрос в следующем - могут ли одновременно работать несколько Access/Accounting серверов с одинаковым rootDeviceId?
Суть в следующем: одна группа Access/Accounting принимает запросы авторизации/аккаунтинга, предположим, одной группы клиентов,
вторая, параллельно, обслуживает другую группу.
Находил темы про резервирование и проблемы с ним в части аккаунтинга, но это не совсем то.
Пока, не требуется именно резервирование, нужно разделить обработку RADIUS-запросов от групп клиентов.

Запускаю вторую группу Access/Accounting серверов, естественно app.id у всех приложений разный.
Получаю, на боевом сервере в accounting/error.log:
Код:
accounting 08-23/13:04:35 ERROR [accwrkr-2-p-12-t-1] SessionFlushingManager - Cannot find session for update with id=2610999, connectionId=2730751, sessionStart=2017-08-23 00:00:00.0 in DB!
accounting 08-23/13:04:35 ERROR [accwrkr-2-p-12-t-1] SessionFlushingManager - Cannot find connection with id=2730751 in DB while flush!
accounting 08-23/13:04:35 ERROR [accwrkr-2-p-12-t-1] SessionFlushingManager - Cannot find session for update with id=2610997, connectionId=2730750, sessionStart=2017-08-23 00:00:00.0 in DB!
accounting 08-23/13:04:35 ERROR [accwrkr-2-p-12-t-1] SessionFlushingManager - Cannot find connection with id=2730750 in DB while flush!
accounting 08-23/13:05:01 ERROR [accwrkr-3-p-13-t-1] SessionFlushingManager - Cannot find session for finish with id=2610999, connectionId=2730751, sessionStart=2017-08-23 00:00:00.0 in DB!
accounting 08-23/13:05:01 ERROR [accwrkr-3-p-13-t-1] SessionFlushingManager - Cannot find connection with id=2730751 in DB while flush/finish!
accounting 08-23/13:05:01 ERROR [accwrkr-3-p-13-t-1] SessionFlushingManager - Cannot find session for finish with id=2610997, connectionId=2730750, sessionStart=2017-08-23 00:00:00.0 in DB!
accounting 08-23/13:05:01 ERROR [accwrkr-3-p-13-t-1] SessionFlushingManager - Cannot find connection with id=2730750 in DB while flush/finish!
mq 08-23/13:09:48 ERROR [event-proc-p-2-t-1] Consumer - com.mysql.jdbc.exceptions.jdbc4.MySQLTransactionRollbackException: Deadlock found when trying to get lock; try restarting transaction
ru.bitel.bgbilling.common.BGException: com.mysql.jdbc.exceptions.jdbc4.MySQLTransactionRollbackException: Deadlock found when trying to get lock; try restarting transaction
   at ru.bitel.bgbilling.modules.inet.api.server.bean.InetConnectionDao.closeConnection(InetConnectionDao.java:484)
   at ru.bitel.bgbilling.modules.inet.accounting.Accounting.connectionStop(Accounting.java:1653)
   at ru.bitel.bgbilling.modules.inet.radius.InetNas.stopConnection(InetNas.java:845)
   at ru.bitel.bgbilling.modules.inet.radius.InetNas.stopConnection(InetNas.java:793)
   at ru.bitel.bgbilling.modules.inet.radius.InetRadiusProcessor.notify(InetRadiusProcessor.java:2599)
   at ru.bitel.bgbilling.modules.inet.radius.InetRadiusProcessor.notify(InetRadiusProcessor.java:86)
   at ru.bitel.bgbilling.kernel.event.AbstractConsumer.notify(AbstractConsumer.java:353)
   at ru.bitel.bgbilling.kernel.event.Consumer.notify(Consumer.java:19)
   at ru.bitel.bgbilling.kernel.event.Consumer.onMessage0(Consumer.java:91)
   at ru.bitel.bgbilling.kernel.event.Consumer$EventListenerRunnable.runImpl(Consumer.java:51)
   at ru.bitel.common.worker.WorkerTask.run(WorkerTask.java:86)
   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
   at java.lang.Thread.run(Thread.java:745)
   at ru.bitel.common.worker.WorkerThread.run(WorkerThread.java:46)
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLTransactionRollbackException: Deadlock found when trying to get lock; try restarting transaction
   at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
   at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
   at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
   at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
   at com.mysql.jdbc.Util.handleNewInstance(Util.java:404)
   at com.mysql.jdbc.Util.getInstance(Util.java:387)
   at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:946)
   at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3878)
   at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3814)
   at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2478)
   at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2625)
   at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2551)
   at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1861)
   at com.mysql.jdbc.PreparedStatement.executeUpdateInternal(PreparedStatement.java:2073)
   at com.mysql.jdbc.PreparedStatement.executeUpdateInternal(PreparedStatement.java:2009)
   at com.mysql.jdbc.PreparedStatement.executeLargeUpdate(PreparedStatement.java:5094)
   at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1994)
   at org.apache.commons.dbcp.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:105)
   at ru.bitel.bgbilling.modules.inet.api.server.bean.InetConnectionDao.closeConnection(InetConnectionDao.java:477)
   ... 14 more


на втором сервере access/error.log

Код:

connection 08-23/13:11:42 ERROR [sa-p-12-t-93] AcknowledgeConsumer - java.util.concurrent.TimeoutException: Timeout waiting task done (or answer)
ru.bitel.bgbilling.common.BGException: java.util.concurrent.TimeoutException: Timeout waiting task done (or answer)
   at ru.bitel.bgbilling.kernel.event.AsyncEventWorker.internalDoTaskImpl(AsyncEventWorker.java:276)
   at ru.bitel.bgbilling.kernel.event.AsyncEventWorker.notify(AsyncEventWorker.java:201)
   at ru.bitel.bgbilling.kernel.event.AcknowledgeConsumer.onMessage0(AcknowledgeConsumer.java:83)
   at ru.bitel.bgbilling.kernel.event.AsyncEventWorker.internalDoTask(AsyncEventWorker.java:176)
   at ru.bitel.bgbilling.kernel.event.AsyncEventWorker.doTasks(AsyncEventWorker.java:109)
   at ru.bitel.bgbilling.modules.inet.access.sa.ServiceActivatorDeviceWorker.runWorker(ServiceActivatorDeviceWorker.java:246)
   at ru.bitel.bgbilling.kernel.event.EventWorker.internalRunWorker(EventWorker.java:139)
   at ru.bitel.bgbilling.modules.inet.access.sa.ServiceActivatorDeviceWorker.runImpl(ServiceActivatorDeviceWorker.java:152)
   at ru.bitel.common.worker.WorkerTask.run(WorkerTask.java:86)
   at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
   at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308)
   at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180)
   at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294)
   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
   at java.lang.Thread.run(Thread.java:745)
   at ru.bitel.common.worker.WorkerThread.run(WorkerThread.java:46)
Caused by: java.util.concurrent.TimeoutException: Timeout waiting task done (or answer)
   ... 17 more

...

connection 08-23/13:29:41 ERROR [sa-p-12-t-52] InetSaStateModifyEvent - Connection not found with id=2738404
connection 08-23/13:29:41 ERROR [sa-p-12-t-52] InetSaStateModifyEvent - Connection not found with id=2738429
connection 08-23/13:29:41 ERROR [sa-p-12-t-52] InetSaStateModifyEvent - Connection not found with id=2738431
connection 08-23/13:29:41 ERROR [sa-p-12-t-52] InetSaStateModifyEvent - Connection not found with id=2738380
connection 08-23/13:29:41 ERROR [sa-p-12-t-52] InetSaStateModifyEvent - Connection not found with id=2738394
connection 08-23/13:29:41 ERROR [sa-p-12-t-52] InetSaStateModifyEvent - Connection not found with id=2738387
connection 08-23/13:29:41 ERROR [sa-p-12-t-52] InetSaStateModifyEvent - Connection not found with id=2738473
connection 08-23/13:29:41 ERROR [sa-p-12-t-52] InetSaStateModifyEvent - Connection not found with id=2738466
...
connection 08-23/13:12:42 ERROR [sa-p-12-t-24] ServiceActivatorDeviceWorker - [Ljava.lang.Object;@ad59779


accounting/error.log

Код:

accounting 08-23/13:19:59 ERROR [accwrkr-3-p-13-t-1] SessionFlushingManager - Cannot find connection with id=2739853 in DB while flush/finish!
accounting 08-23/13:20:12 ERROR [accwrkr-2-p-12-t-1] SessionFlushingManager - Cannot find session for update with id=0, connectionId=2739853, sessionStart=2017-08-23 12:54:52.0 in DB!
accounting 08-23/13:20:12 ERROR [accwrkr-2-p-12-t-1] SessionFlushingManager - Cannot find connection with id=2739853 in DB while flush!
accounting 08-23/13:20:19 ERROR [accwrkr-3-p-13-t-1] WorkerTask - com.mysql.jdbc.exceptions.jdbc4.MySQLTransactionRollbackException: Deadlock found when trying to get lock; try restarting transaction
ru.bitel.bgbilling.common.BGException: com.mysql.jdbc.exceptions.jdbc4.MySQLTransactionRollbackException: Deadlock found when trying to get lock; try restarting transaction
   at ru.bitel.bgbilling.modules.inet.accounting.SessionFlushingManager.flush(SessionFlushingManager.java:460)
   at ru.bitel.bgbilling.modules.inet.accounting.Accounting.sessionFinish(Accounting.java:1776)
   at ru.bitel.bgbilling.modules.inet.accounting.InetConnectionCallRuntime.finish(InetConnectionCallRuntime.java:426)
   at ru.bitel.bgbilling.modules.inet.accounting.InetConnectionCallRuntime.tryFinish(InetConnectionCallRuntime.java:369)
   at ru.bitel.bgbilling.modules.inet.accounting.worker.SessionFinishWorker.runImpl(SessionFinishWorker.java:112)
   at ru.bitel.common.worker.WorkerTask.run(WorkerTask.java:86)
   at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
   at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308)
   at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180)
   at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294)
   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
   at java.lang.Thread.run(Thread.java:745)
   at ru.bitel.common.worker.WorkerThread.run(WorkerThread.java:46)
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLTransactionRollbackException: Deadlock found when trying to get lock; try restarting transaction
   at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
   at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
   at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
   at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
   at com.mysql.jdbc.Util.handleNewInstance(Util.java:404)
   at com.mysql.jdbc.Util.getInstance(Util.java:387)
   at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:946)
   at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3878)
   at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3814)
   at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2478)
   at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2625)
   at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2551)
   at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1861)
   at com.mysql.jdbc.PreparedStatement.executeUpdateInternal(PreparedStatement.java:2073)
   at com.mysql.jdbc.PreparedStatement.executeUpdateInternal(PreparedStatement.java:2009)
   at com.mysql.jdbc.PreparedStatement.executeLargeUpdate(PreparedStatement.java:5094)
   at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1994)
   at org.apache.commons.dbcp.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:105)
   at ru.bitel.bgbilling.modules.inet.accounting.SessionFlushingManager.merge(SessionFlushingManager.java:909)
   at ru.bitel.bgbilling.modules.inet.accounting.SessionFlushingManager.flush(SessionFlushingManager.java:385)
   ... 13 more
accounting 08-23/13:20:32 ERROR [accwrkr-2-p-12-t-1] SessionFlushingManager - Cannot find session for update with id=0, connectionId=2739853, sessionStart=2017-08-23 12:54:52.0 in DB!



Извините за простыни, не нашёл как под кат убрать.

Может я что не донастроил? При чём, на второй access/accounting RADIUS запросы пока совсем не попадают.
Я так понимаю они общаются через ActiveMQ, но deadlock-и то откуда? Не могут разделить - кто будет выполнять?
Или, всё же, ошибка в настройке?

Автор:  fmaks [ 23 авг 2017, 19:51 ]
Заголовок сообщения:  Re: Несколько Access+Accounting одновременно

Настройки access и accounting серверов "из коробки", различаются только app.name и app.id.
У всех rootDeviceId=1 так как в BG они относятся к одной группе access+accounting.
Если нужно, конфиги выложу.

inet: вер. 6.2.713 / 10.03.2017 18:23:44

Автор:  Cromeshnic [ 24 авг 2017, 08:42 ]
Заголовок сообщения:  Re: Несколько Access+Accounting одновременно

Я думаю, если на одном rootDeviceId, то тут от предыдущих тем про резервирование нет отличий: можно несколько access, но только 1 accounting. У меня так сделано.
Вы же группы клиентов на самом оборудовании хотите разделать по радиусам? Т.е. разные группы авторизации в разные порты радиусов?
Продублировать ветки устройств в разных rootDeviceId не вариант? Или там общие ресурсы нужно разделять (порты устройств, например)?
Если нельзя, то хз даже.
А зачем именно разные радиусы тогда вообще? В чём смысл?

Автор:  Cromeshnic [ 24 авг 2017, 08:45 ]
Заголовок сообщения:  Re: Несколько Access+Accounting одновременно

У меня, например, одни и те же устройства есть в разных ветках - отличаются схемами подключений: IPoE и PPPoE.
Соответственно, разные радиусы, разные типы устройств, обработчики. Общих ресурсов нет: порты, пулы адресов разные.

Автор:  fmaks [ 24 авг 2017, 16:22 ]
Заголовок сообщения:  Re: Несколько Access+Accounting одновременно

Вот дело в том, что пулы адресов разделяемые.
Есть клиенты из других регионов в другом часовом поясе.
Хотелось бы access/accounting завести в другом часовом поясе, чтобы время в логах правильное было.
Они даже авторизоваться будут на других железках.

Автор:  ikoctya [ 07 июн 2018, 10:27 ]
Заголовок сообщения:  Re: Несколько Access+Accounting одновременно

Вопрос к разработчикам.
Дерево такое: Access - Accounting - Dhcp Relay - коммутаторы. Конфигурация dhcp прописана на Access.
Хочу продублировать, т.е. запустить второй access сервер на другой машине.
К примеру я его запускаю с другим app-id и соответствующими настройками inet-access.xml
Но тогда как указывать в конфигурации dhcp.option.serverIdentifier=x.x.x.x ???

Автор:  Amir [ 07 июн 2018, 19:04 ]
Заголовок сообщения:  Re: Несколько Access+Accounting одновременно

В inet-access.xml через
Код:
<param name="dhcp.option.serverIdentifier" value="1.2.3.4"/>
<param name="dhcp.filter.serverIdentifier" value="1.2.3.4"/>
По второму параметру - если InetAccess получает DHCP-запрос, где serverIdentifier не совпадает с указанным в этом параметре, то InetAccess будет пропускать такой запрос.

Автор:  ikoctya [ 08 июн 2018, 10:48 ]
Заголовок сообщения:  Re: Несколько Access+Accounting одновременно

Получается в конфигурации устройства уже не нужно прописывать dhcp.option.serverIdentifier ?
А в каком месте дерева расположить второй dhcp access сервер? Или его в дерево вообще можно не добавлять, а просто добавить ip через запятую в корневое устройства дерева!?

Автор:  Amir [ 08 июн 2018, 11:22 ]
Заголовок сообщения:  Re: Несколько Access+Accounting одновременно

Цитата:
Получается в конфигурации устройства уже не нужно прописывать dhcp.option.serverIdentifier ?
Да, не нужно. Иначе он переопределить значение из xml.
Цитата:
А в каком месте дерева расположить второй dhcp access сервер? Или его в дерево вообще можно не добавлять, а просто добавить ip через запятую в корневое устройства дерева!?
Не нужно добавлять в дереве, нужно указать в xml тот же rootDeviceId.

Автор:  ikoctya [ 08 июн 2018, 11:45 ]
Заголовок сообщения:  Re: Несколько Access+Accounting одновременно

Amir писал(а):
Цитата:
Не нужно добавлять в дереве, нужно указать в xml тот же rootDeviceId.

Но rootDeviceId является основным/старым dhcp access сервером. Проблем не возникнет с задвоением или игнорированием dhcp-пакетов?

Автор:  ikoctya [ 09 июн 2018, 13:33 ]
Заголовок сообщения:  Re: Несколько Access+Accounting одновременно

А каким образом сделать, чтобы второй access сервер не проверял uptime устройств и вообще все что уже сделано первым сервером. Получается несколько избыточно

Автор:  ikoctya [ 13 июн 2018, 18:00 ]
Заголовок сообщения:  Re: Несколько Access+Accounting одновременно

<param name="snmp.checkUptime" value="0"/> - не катит.

Автор:  Amir [ 13 июн 2018, 22:11 ]
Заголовок сообщения:  Re: Несколько Access+Accounting одновременно

А что еще кроме uptime дублирует?

Там manage.uptime.pause, а не snmp.checkUptime. Но его тогда нужно будет убрать из конфигурации устройств, иначе он переопределит значение из xml.

Автор:  ikoctya [ 14 июн 2018, 19:06 ]
Заголовок сообщения:  Re: Несколько Access+Accounting одновременно

Amir писал(а):
Там manage.uptime.pause, а не snmp.checkUptime. Но его тогда нужно будет убрать из конфигурации устройств, иначе он переопределит значение из xml.


Почистил дерево, убрал все manage.uptime.*, прописал их только в xml первого сервера, на втором прописал только snmp.checkUptime=0, Но все равно второй пытается аптайм узнать. Где еще посмотреть?

Автор:  ikoctya [ 19 июн 2018, 10:35 ]
Заголовок сообщения:  Re: Несколько Access+Accounting одновременно

А как можно еще выяснить, почему резервный сервер тоже запрашивает аптайм?

Автор:  Cromeshnic [ 19 июн 2018, 11:08 ]
Заголовок сообщения:  Re: Несколько Access+Accounting одновременно

Amir писал(а):
Там manage.uptime.pause, а не snmp.checkUptime.

-
ikoctya писал(а):
на втором прописал только snmp.checkUptime=0


Мб в этом дело?

Автор:  ikoctya [ 19 июн 2018, 11:18 ]
Заголовок сообщения:  Re: Несколько Access+Accounting одновременно

нет, это попытка как раз отключить проверку, проверил.

Автор:  ikoctya [ 09 июл 2018, 12:30 ]
Заголовок сообщения:  Re: Несколько Access+Accounting одновременно

Что еще можно проверить?
Делает ли второй access сервер все проверки заново или просто берет из какой-то очереди и всего лишь "помогает" первому серверу

Автор:  ikoctya [ 24 сен 2018, 13:23 ]
Заголовок сообщения:  Re: Несколько Access+Accounting одновременно

Кстати, radius/dhcp (в моем случае) логи, по правой кнопке на сессии, показываются через раз. Видимо как то не совсем дублируется access сервер

Страница 1 из 1 Часовой пояс: UTC + 5 часов [ Летнее время ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/