Ошибки потери соединения Zookeeper

Вы просматриваете документацию Apigee Edge .
Перейдите к документации Apigee X.
информация

Симптом

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

  1. Ошибки развертывания прокси API
  2. Вызовы API управления завершаются с ошибкой 5XX
  3. Маршрутизаторы или процессоры сообщений не запускаются
  4. Компоненты аналитики сообщают о потере соединения с ZooKeeper в system.logs.

Сообщения об ошибках

Ниже приведены примеры сообщений об ошибках, которые могут наблюдаться при потере соединения с узлами ZooKeeper.

  1. Следующая ошибка возвращается в журналах сервера управления при сбое развертывания прокси-сервера API из-за потери соединения ZooKeeper:
    org: env: main INFO ZOOKEEPER - ZooKeeperServiceImpl.exists() :
    Retry path existence path:
      /regions/dc-1/pods/analytics/servers/692afe93-8010-45c6-b37d-e4e05b6b2eb5/reachable,
      reason: KeeperErrorCode = ConnectionLoss
    org: env: main ERROR ZOOKEEPER - ZooKeeperServiceImpl.exists() :
      Could not detect existence of path:
      /regions/dc-1/pods/analytics/servers/692afe93-8010-45c6-b37d-e4e05b6b2eb5/reachable ,
      reason: KeeperErrorCode = ConnectionLoss
    org: env: main ERROR KERNEL.DEPLOYMENT - ServiceDeployer.startService() :
      ServiceDeployer.deploy() : Got a life cycle exception while starting service
      [ServerRegistrationService, Error while checking path existence for path :
      /regions/dc-1/pods/analytics/servers/692afe93-8010-45c6-b37d-e4e05b6b2eb5/reachable] :
      com.apigee.zookeeper.ZooKeeperException{ code = zookeeper.ErrorCheckingPathExis tence,
      message = Error while checking path existence for path :
      /regions/dc-1/pods/analytics/servers/692afe93-8010-45c6-b37d-e4e05b6b2eb5/reachable,
      associated contexts = []} 2015-03-25 10:22:39,811
    org: env: main ERROR KERNEL - MicroKernel.deployAll() : MicroKernel.deployAll() :
    Error in deploying the deployment : EventService com.apigee.zookeeper.ZooKeeperException:
    Error while checking path existence for path :
      /regions/dc-1/pods/analytics/servers/692afe93-8010-45c6-b37d-e4e05b6b2eb5/reachable
      at com.apigee.zookeeper.impl.ZooKeeperServiceImpl.exists(ZooKeeperServiceImpl.java:339)
      ~[zookeeper-1.0.0.jar:na] at com.apigee.zookeeper.impl.ZooKeeperServiceImpl.exists(
      ZooKeeperServiceImpl.java:323) ~[zookeeper-1.0.0.jar:na] at ... snipped
  2. Во время запуска маршрутизаторы и процессоры сообщений подключаются к ZooKeeper. Если с ZooKeeper возникнут проблемы с подключением, эти компоненты не запустятся со следующей ошибкой:
    2017-08-01 23:20:00,404  CuratorFramework-0 ERROR o.a.c.f.i.CuratorFrameworkImpl
      - CuratorFrameworkImpl.logError() : Background operation retry gave up
    org.apache.zookeeper.KeeperException$ConnectionLossException: KeeperErrorCode = ConnectionLoss
      at org.apache.zookeeper.KeeperException.create(KeeperException.java:99) ~[zookeeper-3.4.6.jar:3.4.6-1569965]
      at org.apache.curator.framework.imps.CuratorFrameworkImpl.checkBackgroundRetry(CuratorFrameworkImpl.java:710) [curator-framework-2.5.0.jar:na]
      at org.apache.curator.framework.imps.CuratorFrameworkImpl.performBackgroundOperation(CuratorFrameworkImpl.java:827) [curator-framework-2.5.0.jar:na]
      at org.apache.curator.framework.imps.CuratorFrameworkImpl.backgroundOperationsLoop(CuratorFrameworkImpl.java:793) [curator-framework-2.5.0.jar:na]
      at org.apache.curator.framework.imps.CuratorFrameworkImpl.access$400(CuratorFrameworkImpl.java:57) [curator-framework-2.5.0.jar:na]
      at org.apache.curator.framework.imps.CuratorFrameworkImpl$4.call(CuratorFrameworkImpl.java:275) [curator-framework-2.5.0.jar:na]
      at java.util.concurrent.FutureTask.run(FutureTask.java:266) [na:1.8.0_131]
      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [na:1.8.0_131]
      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_131]
      at java.lang.Thread.run(Thread.java:748) [na:1.8.0_131]
  3. Пользовательский интерфейс Edge может отображать следующую ошибку, указывающую, что не удалось проверить состояние развертывания прокси-серверов API:
    Error Fetching Deployments
    Error while checking path existence for path: path

Возможные причины

В следующей таблице перечислены возможные причины этой проблемы:

Причина Для
Проблема с сетевым подключением в разных центрах обработки данных Пользователи Edge Private Cloud
Узел ZooKeeper не обслуживает запросы Пользователи Edge Private Cloud

Щелкните ссылку в таблице, чтобы просмотреть возможные решения этой проблемы.

Проблема с сетевым подключением в разных центрах обработки данных

Диагностика

Кластер ZooKeeper может иметь узлы, охватывающие несколько регионов/центров обработки данных, например DC-1 и DC-2. Типичная топология Apigee Edge 2 DC будет иметь:

  • Серверы ZooKeeper 1, 2 и 3 в качестве избирателей в DC-1
  • ZooKeeper 4 и 5 в качестве избирателей и ZooKeeper 6 в качестве наблюдателя в DC-2.

Если регион DC-1 выходит из строя или сетевое соединение между DC-1 и DC-2 нарушено, узлы ZooKeeper не могут выбрать нового лидера в DC-2 и не могут связаться с ведущим узлом. Наблюдатели ZooKeeper не могут избрать нового лидера, а два оставшихся избирателя в DC-2 не имеют кворума как минимум из 3 узлов избирателей для избрания нового лидера. Таким образом, ZooKeepers в DC-2 не смогут обрабатывать никакие запросы. Остальные узлы ZooKeeper в DC-2 будут продолжать повторять попытки подключиться обратно к избирателям ZooKeeper, чтобы найти лидера.

Разрешение

Примените следующие решения для решения этой проблемы в указанном порядке.

Если вам не удалось решить проблему после использования этих решений, обратитесь в службу поддержки Apigee .

Решение №1

  1. Вместе с сетевыми администраторами устраните проблему сетевого подключения между центрами обработки данных.
  2. Когда ансамбль ZooKeeper сможет взаимодействовать между центрами обработки данных и выбрать лидера ZooKeeper, узлы должны стать работоспособными и иметь возможность обрабатывать запросы.

Решение № 2

  1. Если для восстановления сетевого подключения потребуется время, обходной путь — перенастроить узлы ZooKeeper в том регионе, где они не работают. Например, перенастройте кластер ZooKeeper в DC-2 так, чтобы все 3 узла ZooKeeper в этом регионе были избирателями, и удалите server.# в zoo.cfg ZooKeepers из региона DC-1.
    1. В следующем примере zoo.cfg настраивает узлы для двух регионов, где DC-1 использует имена хостов us-ea , обозначающие регион Восток США, а DC-2 использует имена хостов us-wo , обозначающие регион Запад США. (ПРИМЕЧАНИЕ: отображаются только соответствующие конфигурации):
      server.1=zk01ea.us-ea.4.apigee.com:2888:3888
      server.2=zk02ea.us-ea.4.apigee.com:2888:3888
      server.3=zk03ea.us-ea.4.apigee.com:2888:3888
      server.4=zk04wo.us-wo.4.apigee.com:2888:3888
      server.5=zk05wo.us-wo.4.apigee.com:2888:3888
      server.6=zk06wo.us-wo.4.apigee.com:2888:3888:observer

      В приведенном выше примере перенастройте zoo.cfg следующим образом:

      server.1=zk04wo.us-wo.4.apigee.com:2888:3888
      server.2=zk05wo.us-wo.4.apigee.com:2888:3888
      server.3=zk06wo.us-wo.4.apigee.com:2888:3888
    2. Используя код с config , создайте файл /opt/apigee/customer/application/zookeeper.properties со следующим:
      conf_zoo_quorum=server.1=zk04wo.us-wo.4.apigee.com:2888:3888\
      \nserver.2=zk05wo.us-wo.4.apigee.com:2888:3888\
      \nserver.3=zk06wo.us-wo.4.apigee.com:2888:3888\

    В приведенном выше примере узлы Востока США удаляются, а узлы Запада США повышаются среди избирателей при удалении аннотации :observer .

  2. Создайте резервную копию /opt/apigee/apigee-zookeeper/conf/zoo.cfg и старого /opt/apigee/customer/application/zookeeper.properties .

    Эти файлы будут использоваться для восстановления настроек по умолчанию при восстановлении сетевого подключения между центрами обработки данных.

  3. Отключите нотацию наблюдателя для узла наблюдателя. Для этого добавьте следующую конфигурацию в начало /opt/apigee/customer/application/zookeeper.properties :

    conf_zoo_peertype=
  4. Отредактируйте файл /opt/apigee/data/apigee-zookeeper/data/myid следующим образом:

    • Для server.1 измените запись внутри myid с 4 на 1 .
    • Для server.2 измените myid с 5 на 2 .
    • Для server.3 измените myid с 6 на 3 .
  5. Перезапустите узлы ZooKeeper в регионе, в котором вы перенастроили кластер ZooKeeper.
  6. Повторите описанную выше настройку с шага № 1b по шаг № 5 на всех узлах ZooKeeper в DC-2.
  7. Убедитесь, что узлы работают с лидером:
    $ echo srvr | nc zk04wo.us-wo.4.apigee.com 2181
    > echo srvr | nc zk05wo.us-wo.4.apigee.com 2181
    > echo srvr | nc zk06wo.us-wo.4.apigee.com 2181

    Вывод этой команды будет содержать строку с надписью «режим», за которой следует «лидер», если он является лидером, или «ведомый», если он является ведомым.

    Когда сеть между центрами обработки данных будет восстановлена, изменения конфигурации ZooKeeper можно будет отменить на узлах ZooKeeper в DC-2.

Решение №3

  1. Если узлы ZooKeeper в кластере не запущены, перезапустите их.
  2. Проверьте журналы ZooKeeper, чтобы определить, почему узел ZooKeeper вышел из строя.

    Журналы ZooKeeper доступны в следующем каталоге:

    $ cd /opt/apigee/var/log/apigee-zookeeper
    $ ls -l
    total 188
    -rw-r--r--. 1 apigee apigee   2715 Jul 22 19:51 apigee-zookeeper.log
    -rw-r--r--. 1 apigee apigee  10434 Jul 17 19:51 config.log
    -rw-r--r--. 1 apigee apigee 169640 Aug  1 19:51 zookeeper.log
  3. Свяжитесь со службой поддержки Apigee и предоставьте журналы ZooKeeper для устранения причины остановки любого узла ZooKeeper.

Узел ZooKeeper не обслуживает запросы

Узел ZooKeeper в ансамбле может стать неработоспособным и не сможет отвечать на запросы клиентов. Это может быть потому, что:

  1. Узел был остановлен без перезапуска.
  2. Узел был перезагружен без включенного автозапуска.
  3. Нагрузка системы на узле привела к его выходу из строя или выходу из строя.

Диагностика

  1. Выполните следующие команды проверки работоспособности ZooKeeper на каждом из узлов ZooKeeper и проверьте выходные данные:
    1. $ echo "ruok" | nc localhost 2181

      Пример вывода:

      $ echo "ruok" | nc localhost 2181
      imok
    2. echo srvr | nc localhost 2181

      Проверьте режим, чтобы определить, является ли узел ZooKeeper лидером или ведомым.

      Пример вывода для единого узла ZooKeeper:

      $ echo srvr | nc localhost 2181
      ZooKeeper version: 3.4.5-1392090, built on 09/30/2012 17:52 GMT
      Latency min/avg/max: 0/0/88
      Received: 4206601
      Sent: 4206624
      Connections: 8
      Outstanding: 0
      Zxid: 0x745
      Mode: standalone
      Node count: 282
    3. $ echo mntr | nc localhost 2181

      Эта команда перечисляет переменные ZooKeeper, которые можно использовать для проверки работоспособности кластера ZooKeeper.

      Пример вывода:

      $ echo mntr | nc localhost 2181
      zk_version 3.4.5-1392090, built on 09/30/2012 17:52 GMT
      zk_avg_latency 0
      zk_max_latency 88
      zk_min_latency 0
      zk_packets_received     4206750
      zk_packets_sent 4206773
      zk_num_alive_connections 8
      zk_outstanding_requests 0
      zk_server_state standalone
      zk_znode_count 282
      zk_watch_count 194
      zk_ephemerals_count 1
      zk_approximate_data_size 22960
      zk_open_file_descriptor_count 34
      zk_max_file_descriptor_count 4096
    4. $ echo stat | nc localhost 2181

      Эта команда выводит статистику о производительности и подключенных клиентах.

      Пример вывода:

      $ echo stat | nc localhost 2181
      ZooKeeper version: 3.4.5-1392090, built on 09/30/2012 17:52 GMT
      Clients:
       /10.128.0.8:54152[1](queued=0,recved=753379,sent=753385)
       /10.128.0.8:53944[1](queued=0,recved=980269,sent=980278)
       /10.128.0.8:54388[1](queued=0,recved=457094,sent=457094)
       /10.128.0.8:54622[1](queued=0,recved=972938,sent=972938)
       /10.128.0.8:54192[1](queued=0,recved=150843,sent=150843)
       /10.128.0.8:44564[1](queued=0,recved=267332,sent=267333)
       /127.0.0.1:40820[0](queued=0,recved=1,sent=0)
       /10.128.0.8:53960[1](queued=0,recved=150844,sent=150844)
      
      Latency min/avg/max: 0/0/88
      Received: 4206995
      Sent: 4207018
      Connections: 8
      Outstanding: 0
      Zxid: 0x745
      Mode: standalone
      Node count: 282
    5. $ echo cons | nc localhost 2181

      Эта команда предоставляет расширенную информацию о соединениях ZooKeeper.

      Пример вывода:

      $ echo cons | nc localhost 2181
      /127.0.0.1:40864[0](queued=0,recved=1,sent=0)
      /10.128.0.8:54152[1](queued=0,recved=753400,sent=753406,sid=0x15d521a96d40007,
        lop=PING,est=1500321588647,to=40000,lcxid=0x972e9,lzxid=0x745,lresp=1502334173174,
        llat=0,minlat=0,avglat=0,maxlat=26)
      /10.128.0.8:53944[1](queued=0,recved=980297,sent=980306,sid=0x15d521a96d40005,
        lop=PING,est=1500321544896,to=40000,lcxid=0xce92a,lzxid=0x745,lresp=1502334176055,
        llat=0,minlat=0,avglat=0,maxlat=23)
      /10.128.0.8:54388[1](queued=0,recved=457110,sent=457110,sid=0x15d521a96d4000a,
        lop=PING,est=1500321673852,to=40000,lcxid=0x4dbe3,lzxid=0x745,lresp=1502334174245,
        llat=0,minlat=0,avglat=0,maxlat=22)
      /10.128.0.8:54622[1](queued=0,recved=972967,sent=972967,sid=0x15d521a96d4000b,
        lop=PING,est=1500321890175,to=40000,lcxid=0xccc9d,lzxid=0x745,lresp=1502334182417,
        llat=0,minlat=0,avglat=0,maxlat=88)
      /10.128.0.8:54192[1](queued=0,recved=150848,sent=150848,sid=0x15d521a96d40008,
        lop=PING,est=1500321591985,to=40000,lcxid=0x8,lzxid=0x745,lresp=1502334184475,
        llat=3,minlat=0,avglat=0,maxlat=19)
      /10.128.0.8:44564[1](queued=0,recved=267354,sent=267355,sid=0x15d521a96d4000d,
        lop=PING,est=1501606633426,to=40000,lcxid=0x356e2,lzxid=0x745,lresp=1502334182315,
        llat=0,minlat=0,avglat=0,maxlat=35)
      /10.128.0.8:53960[1](queued=0,recved=150848,sent=150848,sid=0x15d521a96d40006,
        lop=PING,est=1500321547138,to=40000,lcxid=0x5,lzxid=0x745,lresp=1502334177036,
        llat=1,minlat=0,avglat=0,maxlat=20)

      Если какая-либо из последних трех команд проверки работоспособности отображает следующее сообщение:

      $ echo stat | nc localhost 2181
          This ZooKeeper instance is not currently serving requests

      Затем это указывает на то, что определенные узлы ZooKeeper не обслуживают запросы.

  2. Проверьте журналы ZooKeeper на конкретном узле и попытайтесь найти ошибки, приводящие к сбою ZooKeeper. Журналы ZooKeeper доступны в следующем каталоге:
    $ cd /opt/apigee/var/log/apigee-zookeeper
    $ ls -l
    total 188
    -rw-r--r--. 1 apigee apigee   2715 Jul 22 19:51 apigee-zookeeper.log
    -rw-r--r--. 1 apigee apigee  10434 Jul 17 19:51 config.log
    -rw-r--r--. 1 apigee apigee 169640 Aug  1 19:51 zookeeper.log

Разрешение

  1. Перезапустите все остальные узлы ZooKeeper в кластере один за другим.
  2. Повторно запустите команды проверки работоспособности ZooKeeper на каждом узле и посмотрите, получите ли вы ожидаемый результат.

Свяжитесь со службой поддержки Apigee , чтобы устранить причину загрузки системы, если она сохраняется или если перезагрузка не решает проблему.