Пропадают настройки при выключении сервера.

Started by karmael, February 08, 2010, 02:06:43 PM

Previous topic - Next topic

karmael

День добрый, коллеги.
У меня опять наверное глупый вопрос, но ситуация такая:
Делаю DCI на все что можно и нужно. Все прекрасно работает до момента перезапуска netxms.
После старта пропадают все сделанные DCI  :-\ 
стартую\стоплю вот таким скриптом:


#! /bin/sh
#
# /etc/init.d/netxms
#
### BEGIN INIT INFO
# Provides:      netxms
# Required-Start: $local_fs $network sshd
# Required-Stop:
# Default-Start:  3 5
# Default-Stop:
# Description:    Provides netxms control
### END INIT INFO

case "$1" in
        start)
                echo "whaiting for sql base start, 30 sec around."
        su postgres --session-command="/usr/local/pgsql/bin/pg_ctl -D /opt/pgsql/data start"
                sleep 20
                echo "netxmsd starting up..."
                /usr/local/netxms/bin/netxmsd -c /usr/local/netxms/etc/netxmsd.conf -D 0 -d
                /usr/local/netxms/bin/nxagentd -d -c /usr/local/netxms/etc/nxagentd.conf
                ;;
        stop)
        su postgres --session-command "/usr/local/pgsql/bin/pg_ctl -D /opt/pgsql/data stop"
                        killall TERM nxagentd nxhttpd netxmsd
                ;;
        restart)
                $0 stop
                echo "5 second pause before restart. . ."
                sleep 5
                $0 start
                ;;
        *)
        echo "Usage: $0 {start|stop|restart}"
    exit 1
    esac
   exit 0


Что я делаю не так ? Может быть есть где то описанная более-менее процедура правильной остановки ?

ПО:

БД - postgresql
netxms - 0.2.31


Заранее спасибо.

Victor Kirhenshtein

Добрый день!

Если я правильно понимаю этот скрипт, при остановке сначала останавливается база данных, а уже потом netxmsd. Соответственно при выходе сервер может не записать какие-то данные из памяти, поскольку база уже остановлена. Правильная последовательность - дать SIGTERM процессу netxmsd, дождаться его завершения (в зависимости от ситуации это может занять какое-то время - до 30 секунд на больших базах), и только после этого останавливать базу.

Best regards,
Victor

karmael

Спасибо, я конечно попробую, но в настройках сервера стоит, что commit в базу раз в 60 сек, однако у меня ситуация более интересная.

DCI были настроены в пятницу, по тех причинам сервера перезагружались ночью в воскресенье. После этого последнее настроенные DCI - пропали.
т.ч. есть сомнения в том, что дело в этом, но я все равно отпишусь по результатам.

-- with best regards,
Alexander Kleyev.

p.s. > хм, у меня была идея как раз в том, чтобы сначала правильно погасить базу, чтобы все commitы прошли, но видимо идея не работает, т.к. результат тот же.
Ибо при перезагрузке сервера - руками послали SIGTERM netxmsd , базу не трогали, перегружали уже целиком сервер, т.е. делали в том порядке, который Вы рекомендовали.

Victor Kirhenshtein

Да, если пропали настройки, сделанные давно - это конечно к порядку остановки сервисов отношения не имеет. А что в логах сервера? Добавьте в netxmsd.conf строчку

LogFailedSQLQueries = yes

возможно какие-то SQL запросы не проходят.

karmael

в логах netxms - все нормально, никаких сообщений об ошибках. Зато  в логах postgresql - следующее:

edit:
в логе netxms.log увидел вот такую штуку :

Inconsistent database: ServiceRoot object has reference to non-existing child object 1309

сделал nxdbmgr check - прошло без ошибок.

[root@monitor ~]# /usr/local/netxms/bin/nxdbmgr check
NetXMS Database Manager Version 0.2.31

Configuration file OK
Checking database:
Database is locked by server 192.168.3.5 [monitor.int.rapida.ru Linux Release 2.6.25-14.fc9.i686]
Do you wish to force database unlock? (Y/N) y
Database lock removed
* Checking node objects...                                              [PASSED]
* Checking interface objects...                                         [PASSED]
* Checking network service objects...                                   [PASSED]
* Checking cluster objects...                                           [PASSED]
* Checking template to node mapping...                                  [PASSED]
* Checking object properties...                                         [PASSED]
* Checking event processing policy...                                   [PASSED]
* Checking collected data...                                            [PASSED]
Database doesn't contain any errors
Database check completed




Зато  в логах postgresql - следующее:

STATEMENT:  SELECT id FROM nodes WHERE id=1242
ERROR:  current transaction is aborted, commands ignored until end of transaction block
STATEMENT:  INSERT INTO nodes (id,primary_ip,node_flags,snmp_version,community,status_poll_type,agent_port,auth_method,secret,snmp_oid,proxy_node,node_type,agent_version,platform_name,uname,poller_node_id,zone_guid,snmp_proxy,required_polls,use_ifxtable,usm_auth_password,usm_priv_password,usm_methods) VALUES (1242,'192.168.3.31',517,1,'public',0,4700,0,'#00','.1.3.6.1.4.1.9.1.217',0,0,'#00','#00','Cisco Internetwork Operating System Software  IOS (tm) C2900XL Software (C2900XL-C3H2S-M), Version 12.0(5.2)XU, MAINTENANCE INTERIM SOFTWARE Copyright (c) 1986-2000 by cisco Systems, Inc. Compiled Mon 17-Jul-00 17:35 by ayounes',0,0,0,0,0,'#00','#00',0)
ERROR:  current transaction is aborted, commands ignored until end of transaction block


Ошибок конечно на порядок больше, и при каждом обращении клиента к netxmsd - лезет нечто подобное.
гуглил ошибку в гуглях - вменяемого ответа на ошибку : ERROR:  current transaction is aborted, commands ignored until end of transaction block так и не нашел. Может быть есть специфика в том как netxms пишет в базу ? или все таки уже у постресов спрашивать про ошибку?

karmael

Виктор, вроде нашел в чем проблема, точней первую ошибку после которой он начинает пробрасывать запросы.
Не хватает кавычки в первом UPDATE.
вот кусок лога:


LOG:  database system was interrupted; last known up at 2010-02-08 16:12:21 MSK
LOG:  database system was not properly shut down; automatic recovery in progress
LOG:  redo starts at E6/F0E62E40
LOG:  record with zero length at E6/F1611F24
LOG:  redo done at E6/F1611EE4
LOG:  last completed transaction was at log time 2010-02-08 16:12:12.672469+03
LOG:  autovacuum launcher started
LOG:  database system is ready to accept connections
>>>>>>>>>>>>>>> ERROR:  unterminated quoted string at or near "'N 00" at character 328 #вот в этом месте
STATEMENT:  UPDATE object_properties SET name='Entire Network',status=4,is_deleted=0,inherit_access_rights=1,last_modified=1265634909,status_calc_alg=0,status_prop_alg=0,status_fix
ed_val=1,status_shift=0,status_translation='01020304',status_single_threshold=75,status_thresholds='503C2814',comments='',is_system=0,location_type=0,latitude='N 00[/b]
ERROR:  current transaction is aborted, commands ignored until end of transaction block
STATEMENT:  DELETE FROM acl WHERE object_id=1
ERROR:  current transaction is aborted, commands ignored until end of transaction block
STATEMENT:  SELECT object_id FROM object_properties WHERE object_id=2
ERROR:  current transaction is aborted, commands ignored until end of transaction block
STATEMENT:  DELETE FROM container_members WHERE container_id=2
ERROR:  current transaction is aborted, commands ignored until end of transaction block
STATEMENT:  DELETE FROM acl WHERE object_id=2
ERROR:  current transaction is aborted, commands ignored until end of transaction block
STATEMENT:  SELECT object_id FROM object_properties WHERE object_id=11
ERROR:  current transaction is aborted, commands ignored until end of transaction block
STATEMENT:  SELECT id FROM templates WHERE id=11
ERROR:  current transaction is aborted, commands ignored until end of transaction block
STATEMENT:  INSERT INTO templates (id,version,enable_auto_apply,apply_filter) VALUES (11,65536,0,'#00')
ERROR:  current transaction is aborted, commands ignored until end of transaction block
STATEMENT:  DELETE FROM dct_node_map WHERE template_id=11
ERROR:  current transaction is aborted, commands ignored until end of transaction block


как исправить сие ?

Victor Kirhenshtein


Victor Kirhenshtein

Ochen' stranno - vrode kak ispravlena uze eta oshibka. Sravnite pozalujsta fail src/server/core/netobj.cpp s prilozennim. Esli oni ne sovpadajut, zamenite na prilozennij i peresoberite server.

karmael

пересобрал с Вашим файлом netobj.cpp - проблема сохранилась. вот кусок лога pg_sql:

LOG:  received smart shutdown request
LOG:  autovacuum launcher shutting down
LOG:  shutting down
LOG:  database system is shut down
LOG:  database system was shut down at 2010-02-11 10:47:49 MSK
LOG:  autovacuum launcher started
LOG:  database system is ready to accept connections
ERROR:  unterminated quoted string at or near "'N 00" at character 328
STATEMENT:  UPDATE object_properties SET name='Entire Network',status=4,is_deleted=0,inherit_access_rights=1,last_modified=1265874505,status_calc_alg=0,status_prop_alg=0,status_fixed_val=1,status_shift=0,status_translation='01020304',status_single_threshold=75,status_thresholds='503C2814',comments='',is_system=0,location_type=0,latitude='N 00

ERROR:  current transaction is aborted, commands ignored until end of transaction block
STATEMENT:  DELETE FROM acl WHERE object_id=1
ERROR:  current transaction is aborted, commands ignored until end of transaction block
STATEMENT:  SELECT object_id FROM object_properties WHERE object_id=2
ERROR:  current transaction is aborted, commands ignored until end of transaction block
STATEMENT:  DELETE FROM container_members WHERE container_id=2
ERROR:  current transaction is aborted, commands ignored until end of transaction block
STATEMENT:  DELETE FROM acl WHERE object_id=2

Victor Kirhenshtein

Poprobujte zapustit' server s kljucom -D 9 (togda budet pisat'sja mnogo debug informacii, vkljuchaja i sql zaprosi) i prislat' log servera pered vipolneniem etogo sql zaprosa (vkljuchaja i sam zapros).
I kakaja versija PostgreSQL i operacionki?

karmael

версия линукса и postgres :

[root@monitor local]# /usr/local/pgsql/bin/postgres --version
postgres (PostgreSQL) 8.3.3
[root@monitor local]# uname -a
Linux monitor.int.rapida.ru 2.6.25-14.fc9.i686 #1 SMP Thu May 1 06:28:41 EDT 2008 i686 i686 i386 GNU/Linux
[root@monitor local]#



файл лога прикреплен. Ошибка возникает в самом первом запросе, сразу после старта сервера. т.е. первая строчка в логе.


Victor Kirhenshtein

Vrode razobralsja. Poprobujte novij variant netobj.cpp.

karmael

 теперь вот такая ошибка :

11-Feb-2010 15:39:25] Log file opened
[11-Feb-2010 15:39:25] Platform subagent "/usr/local/netxms/lib/libnsm_linux.so" successfully loaded
[11-Feb-2010 15:39:25] Database driver "/usr/local/netxms/lib/libnxddr_pgsql.so" loaded and initialized successfully
[11-Feb-2010 15:39:33] Listening for SNMP traps on UDP socket 0.0.0.0:162
[11-Feb-2010 15:39:33] NetXMS Server started
[11-Feb-2010 15:39:33] Listening for client connections on TCP socket 0.0.0.0:4701
[11-Feb-2010 15:42:33] SQL query failed (Query = "UPDATE object_properties SET name='Подключение по л▒',status=0,is_deleted=0,inherit_access_rights=1,last_modified=1265892116,status_calc_alg=0,status_prop_alg=0,status_fixed_val=1,status_shift=0,status_translation='01020304',status_single_threshold=75,status_thresholds='503C2814',comments='',is_system=0,location_type=0,latitude='0.000000',longitude='0.000000' WHERE object_id=1374"): ERROR:  unterminated quoted string at or near "'Подключение по л"
LINE 1: UPDATE object_properties SET name='Подключение по л

                                          ^
[11-Feb-2010 15:42:33] SQL query failed (Query = "SELECT id FROM interfaces WHERE id=1374"): ERROR:  current transaction is aborted, commands ignored until end of transaction block
[11-Feb-2010 15:42:33] SQL query failed (Query = "INSERT INTO interfaces (id,ip_addr,ip_netmask,node_id,if_type,if_index,mac_addr,synthetic_mask,required_polls) VALUES (1374,'192.168.5.12','255.255.255.0',1103,6,65539,'00304866C4E3',0,0)"): ERROR:  current transaction is aborted, commands ignored until end of transaction block
[11-Feb-2010 15:42:33] SQL query failed (Query = "DELETE FROM acl WHERE object_id=1374"): ERROR:  current transaction is aborted, commands ignored until end of transaction block
[11-Feb-2010 15:42:33] SQL query failed (Query = "SELECT object_id FROM object_properties WHERE object_id=1531"): ERROR:  current transaction is aborted, commands ignored until end

Victor Kirhenshtein

Poprobujte zamenit' src/server/dbdrv/pgsql/pgsql.cpp na prilozennij.
A v kakoj kodirovke sdelana baza? Esli zamena pgsql.cpp ne pomozet i kodirovka bazi ne UTF8, poprobujte sozdat' bazu s UTF8 kodirovkoj.


karmael

Кодировка в базе - UT8
проверить смогу только завтра с утра увы, по результатам - отпишусь.
Спасибо Вам за оперативную помощь.