PowerFlex: Ağ Geçidi Yüksek Kullanılabilirlik kurulumu, REST istemcilerinde 401 hatalarına neden oluyor
Summary: REST API istemcisi "401: Her iki Ağ Geçidi/Apache hizmeti çalışırken "yetkisiz" hatası.
Symptoms
REST API istemcisi "401: Her iki Ağ Geçidi/Apache hizmeti çalışırken "yetkisiz" hatası.
REST API istemcisinin bir örneği OpenStack cinder'dır. Bu sorun, OpenStack'teki belirli ScaleIO birim işlemlerinin (eşleme, eşlemeyi kaldırma vb.) başarısız olmasına neden olabilir.
Her 10 başarılı REST API isteğinden 1'i başarısız olur. Örneğin, Birincil Apache hizmetinin mod_jk.log şunları gösterir:
tail -f /var/log/apache2/mod_jk.log | grep ") status"
[6496:139877463439104] [debug] ajp_unmarshal_response::jk_ajp_common.c (739): (machine2) status = 200
[6497:139877295294208] [debug] ajp_unmarshal_response::jk_ajp_common.c (739): (machine2) status = 200
[6497:139877270116096] [debug] ajp_unmarshal_response::jk_ajp_common.c (739): (machine2) status = 200
[6496:139877429868288] [debug] ajp_unmarshal_response::jk_ajp_common.c (739): (machine1) status = 401 <---
[6497:139877219759872] [debug] ajp_unmarshal_response::jk_ajp_common.c (739): (machine2) status = 200
[6496:139877303686912] [debug] ajp_unmarshal_response::jk_ajp_common.c (739): (machine2) status = 200
[6497:139877228152576] [debug] ajp_unmarshal_response::jk_ajp_common.c (739): (machine2) status = 200
/var/log/nova/nova-compute.log şunu gösterir:
2017-04-05 11:20:36.090 38186 ERROR nova.compute.manager [instance: 20e1036d-daf0-49b9-a228-07a1c48b882d] File "/usr/lib/python2.7/site-packages/os_brick/initiator/connector.py", line 1980, in connect_volume 2017-04-05 11:20:36.090 38186 ERROR nova.compute.manager [instance: 20e1036d-daf0-49b9-a228-07a1c48b882d] self.volume_id = self._get_volume_id() 2017-04-05 11:20:36.090 38186 ERROR nova.compute.manager [instance: 20e1036d-daf0-49b9-a228-07a1c48b882d] File "/usr/lib/python2.7/site-packages/os_brick/initiator/connector.py", line 1879, in _get_volume_id 2017-04-05 11:20:36.090 38186 ERROR nova.compute.manager [instance: 20e1036d-daf0-49b9-a228-07a1c48b882d] raise exception.BrickException(message=msg) 2017-04-05 11:20:36.090 38186 ERROR nova.compute.manager [instance: 20e1036d-daf0-49b9-a228-07a1c48b882d] BrickException: Error getting volume id from name oGXMByctQWesXL8PPKiyBQ==: Unauthorized 2017-04-05 11:20:36.090 38186 ERROR nova.compute.manager [instance: 20e1036d-daf0-49b9-a228-07a1c48b882d]
Cause
Bu, belgedeki bir hatadır. Bu belgedeki workers.properties yapılandırması, iki Ağ Geçidi (Tomcat) örneği arasında bir yük dengeleme kurulumu içerir ve lbfactor bunlar için 10 ve 1 olarak ayarlanır. Bu, Apache hizmetinin gelen istekleri iki Ağ Geçidine 10:1 oranında yönlendirdiği anlamına gelir. REST API istemcisi bir Ağ Geçidi üzerinden bir belirteç aldığından ve belirteçler Ağ Geçitleri arasında paylaşılmadığından, bu belirteçle ikinci Ağ Geçidine gönderilen istek 401 ile başarısız olur.
Not: Bir istemci, lbfactor 1 ile Ağ Geçidinden bir belirteç alırsa, başarısızlık oranı yaklaşık% 91'dir.
Resolution
Geçici
çözümBelgedeki dosya yerine aşağıdaki workers.properties dosyasını kullanın. Bu, iki Ağ Geçidini etkin bekleme moduna ayarlar:
** /etc/apache2/workers.properties ***
worker.list=balance1
worker.machine1.type=ajp13
worker.machine1.host=<ip of GW 1>
worker.machine1.port=8009
worker.machine1.lbfactor=1
worker.machine1.activation=disabled
worker.machine2.type=ajp13
worker.machine2.host=<ip of GW 2>
worker.machine2.port=8009
worker.machine2.lbfactor=1
worker.machine2.redirect=machine1
worker.balance1.type=lb
worker.balance1.balance_workers=machine1,machine2
Bu yapılandırma, makine2'yi birincil, çalışan1'i yedek olarak ayarlar. Bu yapılandırma ile belge arasındaki temel farklar şunlardır:
-
worker.machine1.activation=disabled
worker.machine2.redirect=machine1
-
worker.machine#.lbfactor=1
lbfactors Her iki çalışan için de gerekli değilse kurulum.
Bu yapılandırma ile:
- Her iki Ağ Geçidi de çalıştığında, tüm istekler çalışan2'ye yönlendirilir ve 401 olmamalıdır.
- worker2 kapandığında, istekler worker1'e yönlendirilir. REST istemcisi 401 alır ve REST API hizmetinde tekrar oturum açıp devam edebilir.
- worker2 geri geldiğinde ve mod_jk modülü bunu algıladığında, istekleri tekrar worker2'ye yönlendirir ve REST istemcisi başka bir 401 alır, ancak RESET API hizmetinde tekrar oturum açabilir ve devam edebilir.
Not: Her iki Apache hizmetinin de kendi yapılandırmalarında aynı yapılandırmalara sahip olması gerekir. workers.properties dosyasında adlandırma çakışmalarını önlemek üzere hedef sistem için farklı uygulamaların farklı adlar kullanmasını gerekli hale getirme. Apache hizmetleri ayrıca bir active-standby küme, tarafından keepalivedve mod_jk Apache hizmetindeki modül, REST API isteklerini yukarıdaki yapılandırmaya dayalı olarak Ağ Geçidi hizmetlerine yönlendirmekten sorumludur.
Bu bir dokümantasyon hatasıdır. Bu KB, belge düzeltilmeden önce kullanılabilir.
Additional Information
Apache/httpd hizmetlerini doğru şekilde izleyemeyebileceği için keepalive yapılandırması da geliştirilebilir.
keepalived.conf, "komut dosyası" için "killall -0 apache2" kullanır. Adında "apache2" olan herhangi bir işlem varsa bu 0 (başarılı) döndürür, örneğin "tail -f /var/log/apache2/mod_jk.log."
apache2 hizmetini doğru şekilde izlemek için "systemctl --no-pager status apache2" (Ubuntu) veya "systemctl status httpd"(CentOS/RedHat) komutunu kullanın.
"script" olarak kullanılan komut, apache2/httpd hizmeti çalışıyorsa 0, durmuşsa sıfır döndürmelidir.