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şlatmaya çalıştığınızda, 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 Şunun için:
Yanlış yapılandırılmış ZooKeeper myid Edge Private Cloud kullanıcıları
Kullanımdaki ZooKeeper bağlantı noktası Edge Private Cloud kullanıcıları
apigee-zookeeper.pid dosyasında yanlış işlem kimliği Edge Private Cloud kullanıcıları
ZooKeeper lider seçimi hatası Edge Private Cloud kullanıcıları

Bu nedene yönelik olası çözümleri görmek için tablodaki bir bağlantıyı tıklayın.

Yanlış yapılandırılmış ZooKeeper myid

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

myid dosyasına genel bakış

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

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

    Örneğin, /opt/apigee/apigee-zookeeper/conf/zoo.cfg, kümenin parçası olan 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 metin satırı içerir. 1. sunucunun myid'si yalnızca "1" metnini içerir. 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 "Connection broken for id #, my id = #" (Kimlik # için bağlantı kesildi, kimliğim = #) benzeri bir UYARI mesajı görürseniz bu sorunun olası nedeni, myid dosyasındaki # sunucusunun yanlış yapılandırılmış veya bozulmuş 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 mevcut ZooKeeper düğümü için sunucu numarasını not edin.
  4. /opt/apigee/data/apigee-zookeeper/data/myid dosyasını kontrol edin ve bu dosyadaki metnin, 2. adımda belirtilen sunucuyla eşleşip eşleşmediğine bakın.
  5. Uyuşmazlık varsa ZooKeeper'ın başlatılamamasının nedenini belirlemişsinizdir.

Çözünürlük

myid dosyası yanlış yapılandırılmışsa myid dosyasını düzenleyin ve değeri zoo.cfg dosyasındaki # parametresini temsil eden doğru metinle değiştirin.

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

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, 2181 numaralı bağlantı noktasına bağlanırken java.net.BindException: Address already in use istisnasını görürseniz bu, ZooKeeper 2181 numaralı bağlantı noktasının başka bir işlem tarafından kullanıldığını 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 gerçekten başka bir işlem tarafından kullanıldığını doğrulamak için aşağıdaki netstat komutunu kullanın:
    netstat -an | grep 2181

Çözünürlük

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

  1. 2181 bağlantı noktasını kullanan işlemi bulmak için netstat komutunu kullanın. ZooKeeper bağlantı noktası 2181'i kullanan işlemi sonlandırın:
    $ netstat -antp | grep 2181
    tcp        0      0 0.0.0.0:2181            0.0.0.0:*
    LISTEN      28016/java <defunct>
    $ kill -9 28016
  2. Varsa pid ve kilit dosyalarını temizleyin:
    /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ı eski/yanlış PID'yi içerdiğinden ve şu anda çalışan ZooKeeper sürecinin PID'sini içermediğinden işlem başarısız olabilir. Bu durum, ZooKeeper işlemi beklenmedik şekilde veya aniden sonlandırıldıysa ve apigee-zookeeper.pid dosyası silinmediyse meydana gelebilir.

Teşhis

  1. ps komutunu çalıştırarak o sırada çalışmakta olan 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. Bu dosya varsa içine 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. içinde yanlış işlem kimliğinin bulunmasıdır.

Çözünürlük

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

ZooKeeper lider seçimi hatası

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. ZooKeeper'ın lider seçimi işleminin başarısız olmasına neden olabilecek yapılandırma değişiklikleri olup olmadığını kontrol edin.
  3. /opt/apigee/apigee-zookeeper/conf/zoo.cfg dosyasını kontrol edin ve kümedeki tüm ZooKeeper'ların, sunucu için doğru sayıya ve IP adreslerine sahip olduğundan emin olun.# parametresi. Ayrıca, lider seçimi işleminin başarılı olması için en az 3 seçmen olması ve seçmen sayısının tek olması gerektiğini unutmayın. Yeterli sayıda seçmen yoksa (ör. yalnızca 2 seçmen varsa) bu 2 seçmen arasında bir lider belirlemek için yeterli çoğunluğa ulaşılamaz.

Çözünürlük

Genellikle ZooKeeper seçim hatası, yanlış yapılandırılmış bir myid'den kaynaklanır. Seçim hatasını gidermek için Misconfigured ZooKeeper myid (Yanlış yapılandırılmış ZooKeeper myid) bölümündeki çözümü kullanın.

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