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

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

Симптом

Проблемы с подключением к 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 будет включать:

  • Сотрудники зоопарка № 1, 2 и 3 являются избирателями в округе DC-1.
  • Смотрители зоопарка № 4 и 5 выступают в качестве избирателей, а смотритель зоопарка № 6 – в качестве наблюдателя в округе DC-2.

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

Разрешение

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

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

Решение №1

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

Решение №2

  1. Если восстановление сетевого соединения займет время, в качестве временного решения можно перенастроить узлы ZooKeeper в регионе, где они не работают. Например, перенастройте кластер ZooKeeper в DC-2 таким образом, чтобы все 3 узла ZooKeeper в этом регионе были голосующими, и удалите server.# из файла zoo.cfg узлов ZooKeeper в регионе DC-1.
    1. В следующем примере файл zoo.cfg настраивает узлы для двух регионов, где DC-1 использует имена хостов us-ea , обозначающие регион US-East, а DC-2 использует имена хостов us-wo , обозначающие регион US-West. (ПРИМЕЧАНИЕ: Отображаются только соответствующие конфигурации):
      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. Используя код с конфигурацией , создайте файл /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\

    В приведенном выше примере узлы из региона US-East удалены, а узлы из региона US-West становятся избирателями, когда удаляется аннотация :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

    В результате выполнения этой команды будет отображаться строка "mode", за которой следует "leader", если это лидер, или "follower", если это последователь.

    После восстановления сетевого соединения между центрами обработки данных изменения конфигурации 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)

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

      $ 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 для выяснения причины перегрузки системы.