Ad Widget

Collapse

Несколько адресов сервера, как подключае

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • mkolomiets
    Senior Member
    • Jul 2009
    • 134

    #1

    Несколько адресов сервера, как подключае

    Привет!
    Кто подскажет.
    Настроено 4 альтернативных адреса для сервера, каким образом происходит подключение агента к серверу если первый адрес в списке стал не доступен? Какая логика обхода адресов сервера в списке, какие задержки?

    Смотрел при падениях основного канала - подключений агентов на другие адреса не происходит, ждал достаточно долго - порядка минут 10.

    Версия 1.8.3, агенты работают чисто в активном режиме.
  • dima_dm
    Senior Member
    • Dec 2009
    • 2697

    #2
    Никак, в активном режиме используется только 1-й IP или Hostname.

    Comment

    • mkolomiets
      Senior Member
      • Jul 2009
      • 134

      #3
      Originally posted by dima_dm
      Никак, в активном режиме используется только 1-й ip или hostname.
      Не понял на счет активного режима...
      В принципе серверу (пассивный режим) без разницы с какого ИП подключаться к агенту, а вот для агента, ИМХО, адреса сервера актуальны именно в активном режиме.
      Или я что то не правильно понимаю?

      Comment

      • dima_dm
        Senior Member
        • Dec 2009
        • 2697

        #4
        Originally posted by mkolomiets
        Не понял на счет активного режима...
        В принципе серверу (пассивный режим) без разницы с какого ИП подключаться к агенту, а вот для агента, ИМХО, адреса сервера актуальны именно в активном режиме.
        Или я что то не правильно понимаю?
        First entry is used for sending active checks
        /etc/zabbix/zabbix_agentd.conf
        Code:
        # List of comma delimited IP addresses (or hostnames) of ZABBIX servers. 
        # No spaces allowed. First entry is used for sending active checks.
        # Note that hostnames must resolve hostname->IP address and
        # IP address->hostname.
        
        Server=127.0.0.1

        Comment

        • mkolomiets
          Senior Member
          • Jul 2009
          • 134

          #5
          Привет!
          Originally posted by dima_dm
          first entry is used for sending active checks
          /etc/zabbix/zabbix_agentd.conf
          Code:
          # list of comma delimited ip addresses (or hostnames) of zabbix servers. 
          # no spaces allowed. First entry is used for sending active checks.
          # note that hostnames must resolve hostname->ip address and
          # ip address->hostname.
          
          Server=127.0.0.1
          Как раз по причине этой фразы и возник вопрос.
          Если я правильно понимаю, в активном режиме агент самостоятельно подключается к серверу, стягивает перечень ключей и передает значения. Как раз здесь и было бы полезным иметь несколько альтернативных адресов у сервера для доступности.
          В пассивном режиме - сервер сам подключается к агенту, и тут смысла для нескольких адресов сервера как бы и нет, разве что как ограничений с точки зрения безопасности.

          Comment

          • zalex_ua
            Senior Member
            Zabbix Certified Trainer
            Zabbix Certified SpecialistZabbix Certified Professional
            • Oct 2009
            • 1286

            #6
            Originally posted by mkolomiets
            Привет!
            Кто подскажет.
            Настроено 4 альтернативных адреса для сервера, каким образом происходит подключение агента к серверу если первый адрес в списке стал не доступен? Какая логика обхода адресов сервера в списке, какие задержки?

            Смотрел при падениях основного канала - подключений агентов на другие адреса не происходит, ждал достаточно долго - порядка минут 10.

            Версия 1.8.3, агенты работают чисто в активном режиме.
            Originally posted by mkolomiets
            Не понял на счет активного режима...
            В принципе серверу (пассивный режим) без разницы с какого ИП подключаться к агенту, а вот для агента, ИМХО, адреса сервера актуальны именно в активном режиме.
            Или я что то не правильно понимаю?
            Только первый ip адрес в списке используется для запроса активны проверок и отправки их результатов. Все адреса в списке - это адреса с которых агент будет принимать входящие подключения (пассивные проверки) и будет отдавать результат. Ip не из списка будет отказано в подключении. Отказоустойчивости в этом плане не предусмотрено, в т.ч для пассивных проверок сервер не может "переключится" на использование другого ip для узла сети если он стал не доступен. Несколько ip предусмотрено чтобы мониторить одного агента с нескольких заббикс серверов одновременно, но только пассивными проверками. Кажется это все в доке есть, иначе я этого не знал бы Читайте доку и еще книгу ту что вверху

            Comment

            • zalex_ua
              Senior Member
              Zabbix Certified Trainer
              Zabbix Certified SpecialistZabbix Certified Professional
              • Oct 2009
              • 1286

              #7
              Originally posted by mkolomiets
              Если я правильно понимаю, в активном режиме агент самостоятельно подключается к серверу, стягивает перечень ключей и передает значения.
              Привет из-за угла
              Уже год с заббиксом а до сих пор сомневаетесь? Такие вещи нужно знать уверенно.

              Comment

              • mkolomiets
                Senior Member
                • Jul 2009
                • 134

                #8
                Originally posted by zalex_ua
                ... Кажется это все в доке есть, иначе я этого не знал бы Читайте доку и еще книгу ту что вверху
                СНК
                С докой или без нее - все время, почему то, хочется коммунизма и уже построенного

                Comment

                • mkolomiets
                  Senior Member
                  • Jul 2009
                  • 134

                  #9
                  Следующий патч (делалось для 1.8.3) добавляет перебор адресов сервера из списка в конфиге до первого успешного подключения.
                  У кого есть желание, можете потестить - у меня только активный режим, поэтому как оно скажется в других местах я не уверен на все 100%, хотя по логике ничего особо не меняется.

                  По сути это плагиат из функции zbx_tcp_listen, т.ч. особых рукоплесканий не надо

                  Code:
                  diff -ur zabbix-1.8.3.ORIG/src/libs/zbxcomms/comms.c zabbix-1.8.3/src/libs/zbxcomms/comms.c
                  --- zabbix-1.8.3.ORIG/src/libs/zbxcomms/comms.c	2010-08-16 11:19:31.000000000 +0300
                  +++ zabbix-1.8.3/src/libs/zbxcomms/comms.c	2010-11-01 01:10:06.000000000 +0200
                  @@ -461,6 +461,7 @@
                   #else
                   int	zbx_tcp_connect(zbx_sock_t *s, const char *source_ip, const char *ip, unsigned short port, int timeout)
                   {
                  +	char *server_ips, *server_ip, *delim;
                   	ZBX_SOCKADDR	servaddr_in, source_addr;
                   	struct hostent	*hp;
                   
                  @@ -468,13 +469,6 @@
                   
                   	zbx_tcp_clean(s);
                   
                  -	if (NULL == (hp = zbx_gethost(ip)))
                  -		return FAIL;
                  -
                  -	servaddr_in.sin_family		= AF_INET;
                  -	servaddr_in.sin_addr.s_addr	= ((struct in_addr *)(hp->h_addr))->s_addr;
                  -	servaddr_in.sin_port		= htons(port);
                  -
                   	if (ZBX_SOCK_ERROR == (s->socket = socket(AF_INET, SOCK_STREAM, 0)))
                   	{
                   		zbx_set_tcp_strerror("Cannot create socket [%s:%d] [%s]", ip, port, strerror_from_system(zbx_sock_last_error()));
                  @@ -498,14 +492,42 @@
                   
                   	zbx_tcp_timeout_set(s, timeout);
                   
                  -	if (ZBX_TCP_ERROR == connect(s->socket, (struct sockaddr *)&servaddr_in, sizeof(ZBX_SOCKADDR)))
                  +	servaddr_in.sin_family		= AF_INET;
                  +	servaddr_in.sin_port		= htons(port);
                  +
                  +	server_ip = server_ips = (NULL == ip ? NULL : strdup(ip));
                  +
                  +	do
                   	{
                  -		zbx_set_tcp_strerror("Cannot connect to [%s:%d] [%s]", ip, port, strerror_from_system(zbx_sock_last_error()));
                  -		zbx_tcp_close(s);
                  -		return FAIL;
                  +		delim = (NULL == server_ip ? NULL : strchr(server_ip, ','));
                  +		if (NULL != delim)
                  +			*delim = '\0';
                  +
                  +		if (NULL != (hp = zbx_gethost(server_ip)))
                  +		{
                  +			servaddr_in.sin_addr.s_addr = ((struct in_addr *)(hp->h_addr))->s_addr;
                  +
                  +			if (ZBX_TCP_ERROR != connect(s->socket, (struct sockaddr *)&servaddr_in, sizeof(ZBX_SOCKADDR)))
                  +			{
                  +				free(server_ips);
                  +				return SUCCEED;
                  +			}
                  +			zbx_set_tcp_strerror("Cannot connect to [[%s]:%d] [%s]", ip, port, strerror_from_system(zbx_sock_last_error()));
                  +
                  +			server_ip = delim + 1;
                  +			if (NULL == ip || NULL == delim)
                  +				break;
                  +			zabbix_log(LOG_LEVEL_WARNING, "Trying next server address in list [%s]", server_ip);
                  +		}
                   	}
                  +	while (1);
                   
                  -	return SUCCEED;
                  +	if (NULL != server_ips)
                  +		free(server_ips);
                  +
                  +	zbx_tcp_close(s);
                  +
                  +	return FAIL;
                   }
                   #endif /*HAVE_IPV6*/
                   
                  diff -ur zabbix-1.8.3.ORIG/src/zabbix_agent/active.c zabbix-1.8.3/src/zabbix_agent/active.c
                  --- zabbix-1.8.3.ORIG/src/zabbix_agent/active.c	2010-08-16 11:19:32.000000000 +0300
                  +++ zabbix-1.8.3/src/zabbix_agent/active.c	2010-10-31 23:14:09.000000000 +0200
                  @@ -1095,8 +1095,8 @@
                   
                   	assert(activechk_args.host);
                   
                  -	p = strchr(activechk_args.host,',');
                  -	if(p) *p = '\0';
                  +//	p = strchr(activechk_args.host,',');
                  +//	if(p) *p = '\0';
                   
                   	zabbix_log( LOG_LEVEL_INFORMATION, "zabbix_agentd active check started [%s:%u]", activechk_args.host, activechk_args.port);
                  ЗЫ. Как бы еще разработчикам маякнуть, может примут в доработку, возможность полезная...
                  Attached Files
                  Last edited by mkolomiets; 01-11-2010, 01:34.

                  Comment

                  • Jimson
                    Senior Member
                    • Jan 2008
                    • 1327

                    #10
                    к разработчикам это где то тут: https://support.zabbix.com/secure/Cr...44&issuetype=4

                    Comment

                    • zalex_ua
                      Senior Member
                      Zabbix Certified Trainer
                      Zabbix Certified SpecialistZabbix Certified Professional
                      • Oct 2009
                      • 1286

                      #11
                      И чего вам не спится то ночью ?

                      Comment

                      • mkolomiets
                        Senior Member
                        • Jul 2009
                        • 134

                        #12
                        Originally posted by zalex_ua
                        И чего вам не спится то ночью ?
                        А ночью как раз самые идиотские идеи в голову и приходят

                        Comment

                        Working...