Zookeeper Başlatılamıyor

Apigee Edge belgelerini görüntülüyorsunuz.
Apigee X belgelerine gidin.
bilgi

Belirti

ZooKeeper işlemi başlatılamıyor.

Hata mesajları

ZooKeeper işlemini başlatmayı denediğinizde, ZooKeeper'ın başlatılamadığını belirten aşağıdaki hata mesajı döndürülür:

+ apigee-service apigee-zookeeper status
apigee-service: apigee-zookeeper: Not running (DEAD)
apigee-all: Error: status failed on [apigee-zookeeper]

Olası nedenler

Aşağıdaki tabloda, bu sorunun olası nedenleri listelenmiştir:

Neden (Hedef müşteri) için
Yanlış yapılandırılmış ZooKeeper myid Edge Private Cloud kullanıcıları
ZooKeeper bağlantı noktası kullanılıyor Edge Private Cloud kullanıcıları
Apigee-zookeeper.pid dosyasında yanlış işlem kimliği Edge Private Cloud kullanıcıları
ZooKeeper Lideri Seçimlerinin Başarısız Olması Edge Private Cloud kullanıcıları

Bu nedene ilişkin olası çözümleri görmek için tabloda ilgili bağlantıyı tıklayın.

Hatalı yapılandırılmış ZooKeeper kimlik kimliği

Aşağıdaki bölümlerde myid dosyasına bir genel bakış sunulmakta ve yanlış yapılandırma sorunlarının nasıl tespit edilip giderileceği açıklanmaktadır.

myid dosyasına genel bakış

Her ZooKeeper düğümünde iki dosya bulunur:

  1. Kümedeki tüm ZooKeeper düğümleri için IP'lerin listesini içeren /opt/apigee/apigee-zookeeper/conf/zoo.cfg dosyası.

    Örneğin, /opt/apigee/apigee-zookeeper/conf/zoo.cfg, kümenin içindeki 3 ZooKeeper düğümünün IP'lerini aşağıdaki gibi içeriyorsa:

    server.1=11.11.11.11:2888:3888
    server.2=22.22.22.22:2888:3888
    server.3=33.33.33.33:2888:3888
    
  2. /opt/apigee/data/apigee-zookeeper/data/myid dosyası, söz konusu ZooKeeper düğümünün sunucu numarasına karşılık gelen tek bir satır metin içerir. Sunucu 1'in myid değeri, "1" metnini içerir ve başka hiçbir şey içermez. Kimlik, topluluk içinde benzersiz olmalı ve 1 ile 255 arasında bir değere sahip olmalıdır.

    Örneğin, ZooKeeper server.1'de /opt/apigee/data/apigee-zookeeper/data/myid dosyası, aşağıda gösterildiği gibi yalnızca 1 metnini içermelidir:

    $ cat myid
    1
    

Teşhis

  1. Hatalar için ZooKeeper günlüğünü /opt/apigee/var/log/apigee-zookeeper/zookeeper.log kontrol edin.
  2. Aşağıdaki şekilde gösterildiği gibi "#, kimliğim = # için bağlantı kesildi," şeklinde bir WARN mesajı görüyorsanız bu sorunun olası nedeni myid dosyasındaki sunucu # numaralı sunucunun yanlış yapılandırılmış veya bozuk olması olabilir.
    [myid:2] - WARN [RecvWorker:2:QuorumCnxManager$RecvWorker@762] -
      Connection broken for id 2, my id = 2, error = java.io.EOFException
        at java.io.DataInputStream.readInt(DataInputStream.java:375)
        at org.apache.zookeeper.server.quorum.QuorumCnxManager$RecvWorker.
          run(QuorumCnxManager.java:747)
    
  3. /opt/apigee/apigee-zookeeper/conf/zoo.cfg dosyasını kontrol edin ve geçerli ZooKeeper düğümü için server.# değerini not edin.
  4. /opt/apigee/data/apigee-zookeeper/data/myid dosyasını kontrol edin ve bu dosyadaki metnin 2. adımda belirtilen sunucu# ile eşleşip eşleşmediğini kontrol edin.
  5. Bir uyuşmazlık varsa ZooKeeper'ın başlatamamasının nedenini tanımlamışsınız demektir.

Çözünürlük

myid dosyası yanlış yapılandırılmışsa myid dosyasını düzenleyip değeri, zo.cfg dosyasında server.# parametresini temsil eden doğru metinle değiştirin.

ZooKeeper bağlantı noktası kullanılıyor

Teşhis

  1. Hatalar için /opt/apigee/var/log/apigee-zookeeper/zookeeper.log ZooKeeper günlüğünü kontrol edin.
  2. Aşağıdaki şekilde gösterildiği gibi, 2181 numaralı bağlantı noktasına bağlarken java.net.BindException: Address already in use istisnasıyla karşılaşmanız, ZooKeeper bağlantı noktası 2181'in başka bir işlem tarafından kullanılmakta olduğunu gösterir. Bu nedenle, ZooKeeper başlatılamadı.
    2017-04-26 07:00:10,420 [myid:3] - INFO  [main:NIOServerCnxnFactory@94] -
      binding to port 0.0.0.0/0.0.0.0:2181
    2017-04-26 07:00:10,421 [myid:3] - ERROR [main:QuorumPeerMain@89] -
      Unexpected exception, exiting abnormally
      java.net.BindException: Address already in use
        at sun.nio.ch.Net.bind0(Native Method)
        at sun.nio.ch.Net.bind(Net.java:433)
        at sun.nio.ch.Net.bind(Net.java:425)
        at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:223)
        at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:74)
        at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:67)
        at org.apache.zookeeper.server.NIOServerCnxnFactory.configure(NIOServerCnxnFactory.java:95)
        at org.apache.zookeeper.server.quorum.QuorumPeerMain.runFromConfig(QuorumPeerMain.java:130)
        at org.apache.zookeeper.server.quorum.QuorumPeerMain.initializeAndRun(QuorumPeerMain.java:111)
        at org.apache.zookeeper.server.quorum.QuorumPeerMain.main(QuorumPeerMain.java:78)
    
  3. ZooKeeper bağlantı noktası 2181'in başka bir işlem tarafından kullanıldığını onaylamak için aşağıdaki netstat komutunu kullanın:
    netstat -an | grep 2181
    

Çözünürlük

ZooKeeper bağlantı noktası 2181 hâlâ kullanılıyorsa bu sorunu gidermek için aşağıdaki adımları uygulayın:

  1. 2181 numaralı bağlantı noktasında bulunan işlemi bulmak için netstat komutunu kullanın. ZooKeeper bağlantı noktası 2181'i kullanan işlemi durdurun:
    $ netstat -antp | grep 2181
    tcp        0      0 0.0.0.0:2181            0.0.0.0:*
    LISTEN      28016/java <defunct>
    $ kill -9 28016
    
  2. pid'yi temizleyin ve varsa dosyaları kilitleyin:
    /opt/apigee/var/run/apigee-zookeeper/apigee-zookeeper.pid
    /opt/apigee/var/run/apigee-zookeeper/apigee-zookeeper.lock
    
  3. ZooKeeper'ı yeniden başlatın:
    /opt/apigee/apigee-service/bin/apigee-service apigee-zookeeper restart
    

Apigee-zookeeper.pid dosyasında yanlış işlem kimliği

ZooKeeper'ı durdurmaya/yeniden başlatmaya çalıştığınızda apigee-zookeeper.pid dosyası, şu anda çalışan ZooKeeper işleminin dosyasını değil, eski/yanlış pid içerdiğinden başarısız olabilir. ZooKeeper işleminin beklenmedik veya ani bir şekilde sonlandırılması ve apigee-zookeeper.pid dosyası silinmemesi durumunda bu durum yaşanabilir.

Teşhis

  1. ps komutunu çalıştırarak şu anda çalışan ZooKeeper işleminin işlem kimliğini alın:
    ps -ef | grep zookeeper
    
  2. /opt/apigee/var/run/apigee-ZooKeeper/apigee-zookeeper.pid dosyasının mevcut olup olmadığını kontrol edin. Dosya mevcutsa, bu dosyaya yazılan işlem kimliğini not edin.
  3. 1. ve 2. adımda alınan işlem kimliklerini karşılaştırın. Bunlar farklıysa bu sorunun nedeni apigee-zookeeper.pid file. öğesindeki işlem kimliğinin yanlış olmasıdır

Çözünürlük

  1. Apigee-zookeeper.pid dosyasını düzenleyin ve yanlış işlem kimliğini ps komutundan alınan doğru işlem kimliğiyle değiştirin (yukarıdaki 1. adım).
  2. ZooKeeper'ı yeniden başlatın:
    /opt/apigee/apigee-service/bin/apigee-service apigee-zookeeper restart
    

ZooKeeper Lideri Seçiminde Başarısızlık

Teşhis

Teşhis etmek için:

  1. Hatalar için ZooKeeper günlüğünü /opt/apigee/var/log/apigee-zookeeper/zookeeper.log kontrol edin.
  2. Liderin ZooKeeper seçiminin başarısız olmasına yol açabilecek herhangi bir yapılandırma değişikliği olup olmadığını kontrol edin.
  3. /opt/apigee/apigee-zookeeper/conf/zoo.cfg öğesini kontrol edin ve kümedeki tüm ZooKeeper'ların server.# parametresi için doğru sayıya ve IP adresine sahip olduğundan emin olun. Ayrıca, lider seçiminin başarılı olması için en az 3 seçmen olması ve seçmen sayısının tek sayı olması gerektiğini de unutmayın. Yalnızca 2 seçmen gibi çok az seçmen varsa yalnızca 2 seçmen arasından bir lider belirlemek için yeterli çoğunluk kurulamaz.

Çözünürlük

Genellikle, ZooKeeper seçim hatası, yanlış yapılandırılmış bir kimlik doğrulamasından kaynaklanır. Seçimle ilgili başarısızlık sorununu gidermek için Yanlış yapılandırılmış ZooKeeper myid bölümündeki çözünürlüğü kullanın.

Sorun devam ederse ve daha fazla teşhis yapılması gerekiyorsa Apigee Edge Destek Ekibi ile iletişime geçin.