2015-10-19 22 views
9

Son zamanlarda kümelemde kerberos'u etkinleştirdim, kerberos oturum açma sürem dolduğunda, her şey harika çalışıyor, 12 saat. Bu noktada, oluşturduğum herhangi bir bağlantı, bu bağlantılarla oluşturulan tüm tablolar vs. kullandığımda atar. Bu, bunun nasıl ele alınacağına bağlı olarak uygulamanızı kilitleyebilir.HBase Kerberos bağlantı yenileme stratejisi

Uygulamamın, eğer aşağı doğru giderse uygulamayı yeniden diriltecek olan kaydırıcı tarafından yönetilmesi nedeniyle büyük bir çöküşe gerek yok, ancak bu yalnızca HBase "kullanılmış" olduğunda gerçekleşecektir (yani bir tabloda bir yöntemi çağırıyorum büyük olasılıkla bir kullanıcı etkileşimi tarafından neden olacak ve bu da zayıf UX'e yol açacaktır.

Uygulamamı etkilemek için kimlik doğrulaması uygulama ayrıntılarını istemiyorum ve ayrıca çok fazla sayıda RPC çağrısı yapan maliyetli bir işlem olduğu için bağlantı nesnelerini daha sık oluşturmak istemiyorum (zookeeper meta veri konumu ile başla).

Kerberos kimlik doğrulamasının sona ermesini yönetmek ve bu olduğunda HBase bağlantıları/tablolarını yenilemek için ortak bir strateji (tercihen HBase istemcisine yerleşik) var mı?

+2

Eğer bu otomatikse, kullanıcı adı/parola yerine anahtar bantlarını kullanmanızı tavsiye ederim. –

+1

Evet Keytabs kullanıyorum. Anahtarlıklar yenilenir, ancak herhangi bir Hbase Bağlantısı (ve bunlardan birini kullanan herhangi bir şey), keytab'ın sona ermesinden sonra atar. Periyodik arızaya ve tekerleği yeniden icat etmeye gerek kalmadan idare etmek için bir strateji arıyorum. – richardstartin

+1

Anahtarın kullanım süresi dolmuyor. Hesap şifresi birkaç ay sonra yapabilir. Oracle'ın Kerberos modülünde "renewTGT" bayrağı var. Bunu denedin mi? Daha fazla, istisna yığını gösterebilir misin? Bunu takip eden –

cevap

18

Kerberos TGT bir süresi (örneğin 12 saat) ve bir yenilenebilir kullanım (örneğin 7 gün) bulunmaktadır. Bilet hala geçerli ve hala yenilenebilir olduğu sürece "ücretsiz" bir yenileme - şifre gerektirmez - talep edebilirsiniz ve ömür boyu sayaç sıfırlanır (örneğin, tekrar gitmek için 12 saat).

Hadoop kimlik doğrulama kitaplığı, geçerli TGT'nin otomatik yenilenme için özel bir Java iş parçacığı oluşturur. Bunun yerine bir JAAS kütüphane görüşmesinin bir kinit -R komut satırı kullanarak, tür çirkin, ama çalışır - Başlangıçta yenilenebilir bileti oluşturmak için Kaydırıcısını alırsanız, Yani HADOOP-6656

görmek ve size SysAdmin rüşvet eğer yükseltmek varsayılan olarak (cf müşteri conf) ve max (çapraz başvuru KDC conf) yenilenebilir ömür boyu, yani, 30 gün sonra, uygulamanız ilk TGT ile düz bir şekilde 30 gün boyunca çalışabilir. Güzel bir gelişme. Eğer gerçekten sonsuzluk için yalvarmak

~~~~~~~~~~

... üzgünüm, ama aslında yapmak için bazı programlama olacaktır. Bu, adanmış bir iş parçacığı/işlem veya otomatik olarak TGT'yi yeniden oluşturma anlamına gelir.

  • Java Way: HBase/HDF'ler bağlanmak başlangıçta, önce/neyse açıkça loginUserFromKeytab() ile UGI sonra zaman zaman checkTGTAndReloginFromKeytab() çalıştırmak oluşturun
  • Shell Yolu: kabuğu başlatmak ki (a), (b) periyodik tekrar kinit tetikleyen bir alt işlemi olarak çoğaltılır kinit ile TGT oluşturur (c) uygulama şimdiye
sonlandırması durumunda zaman/Java uygulama söz konusu ise alt işlemi öldürür başlattı 210

Uyarı: Başka bir iş parçacığı, TGT yeniden oluşturulduğunda bir bağlantıyı açar veya yeniden açarsa, bu bağlantı, önbellek, erişildiği anda boş olduğundan ("yarış durumu") başarısız olabilir . Bir sonraki girişim başarılı olacak, ancak kayıtlarınızda birkaç sahte uyarı bekleyeceksiniz.

~~~~~~~~~~

Final tavsiye: Eğer yani aynı Linux hesabıyla aynı düğümde birden çok uygulamayı çalıştırabilir (uygulamanız için bir özel bilet önbelleğini kullanabilirsiniz ancak farklı Kerberos prensipleri) "FILE:" önbelleği olduğu sürece KRB5CCNAME ortam değişkenini ayarlayarak.

+1

Bu iyi bir cevaptır. Java sorusu ile ilgili, ancak burada tam olarak cevaplanmayan bir soruya hızlı bir şekilde göz atmak ister misiniz? http://stackoverflow.com/questions/34616676/should-i-call-ugi-checktgtandreloginfromkeytab-ön-every-action-on-hadoop –

+0

@AW, uzun ömürlü bir küme kaydırıcısı için bir keytab'a ihtiyaç duyar; onu konteynırlara itecektir. Burada ortaya çıkan şey, checkTGTandRelogin'i çağırdığınızda, bilet yenilemenin başarısız olduğu Hadoop 2.6'nın son-Java7 uyumsuzluğudur. 1.7u45 veya daha sonraki bir sürümde Java 7'yi kullanıyorsanız, Hadoop 2.6.2 veya sonraki bir –

+0

@Steve'ye ihtiyacınız var, gerçekten de Java-vs-Hadoop sorunu olduğunu gördük * (OpenHDK'ye dayanan bir QA kümesinde RedHat yükseltme) * ve neden anlamak için zor bir zaman geçirdik .. JIRA'daki yorumunuzu Java8 ile ilgili görene kadar. Ama acı noktamız HBase'de değildi, bu yüzden noktaları birleştirmedim. >>> Kapının Ötesinden vizyonlarınız için çok teşekkürler, bu arada **: - 0 ** –