Ошибки потери подключения к Zookeeper

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

Symptom

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

  1. Ошибки развертывания прокси-сервера API
  2. Вызовы Management API завершаются ошибками 5XX
  3. Не удается запустить маршрутизаторы или обработчики сообщений
  4. Компоненты Аналитики сообщают о потере подключения ZooKeeper в системных журналах

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

Ниже приведены примеры сообщений об ошибках, которые могут появляться при потере подключения к узлам 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 с двумя центрами обработки данных включает:

  • Серверы 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 нет кворума из как минимум трех голосующих узлов, чтобы выбрать нового лидера. Таким образом, ZooKeeper в DC-2 не сможет обработать ни одного запроса. Оставшиеся узлы ZooKeeper в DC-2 будут продолжать попытки подключиться к голосующим узлам ZooKeeper, чтобы найти лидера.

Разрешение

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

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

Решение 1

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

Решение 2

  1. Если на восстановление сетевого подключения потребуется время, можно перенастроить узлы ZooKeeper в регионе, где они не работают. Например, перенастройте кластер ZooKeeper в DC-2 так, чтобы все три узла 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. Используя code with 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\

    В примере выше узлы из 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. Повторите описанные выше действия (шаги 1б–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)

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

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