PowerFlex: Nastavení vysoké dostupnosti brány způsobuje v klientech REST chyby 401
Summary: Klient rozhraní REST API obdrží zprávu "401: Unauthorized", když jsou spuštěny obě služby Gateway/Apache.
Symptoms
Klient rozhraní REST API obdrží zprávu "401: Unauthorized", když jsou spuštěny obě služby Gateway/Apache.
Jedním z příkladů klienta REST API je OpenStack cinder. Tento problém může způsobit selhání některých operací se svazky ScaleIO (mapování, odmapování atd.)
v OpenStack.Na každých 10 úspěšných požadavků rozhraní REST API 1 selže. Na mod_jk.log primární služby Apache se například zobrazí:
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 zobrazuje:
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
Jedná se o chybu v dokumentu. Konfigurace workers.properties v tomto dokumentu obsahuje nastavení vyrovnávání zatížení mezi dvěma instancemi brány (tomcat) a faktor lbfactor je pro ně nastaven na 10 a 1. To znamená, že služba Apache směruje příchozí požadavky na dvě brány v poměru 10:1. Vzhledem k tomu, že klient rozhraní REST API získá token prostřednictvím jedné brány a tokeny nejsou sdíleny mezi bránami, požadavek odeslaný do druhé brány s tímto tokenem selže s hodnotou 401.
Poznámka: Pokud klient získá token z brány s faktorem lbfactor 1, míra selhání je přibližně 91 %.
Resolution
Alternativní řešení
Místo souboru v dokumentu použijte následující soubor workers.properties . Tím se obě brány nastaví do aktivního pohotovostního režimu:
** /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
Tato konfigurace nastaví počítač2 jako primární, worker1 jako pohotovostní. Hlavní rozdíly mezi touto konfigurací a dokumentem jsou:
-
worker.machine1.activation=disabled
worker.machine2.redirect=machine1
-
worker.machine#.lbfactor=1
lbfactors nastavení, pokud není vyžadováno pro oba pracovníky.
S touto konfigurací:
- Když jsou obě brány v provozu, všechny požadavky se směrují na worker2 a neměla by být k dispozici žádná hodnota 401.
- Když worker2 přejde mimo provoz, požadavky se směrují na worker1. Klient REST obdrží kód 401 a může se znovu přihlásit ke službě REST API a pokračovat.
- Když se worker2 vrátí a modul mod_jk ho detekuje, znovu přesměruje požadavky na worker2 a klient REST obdrží další 401, ale může se znovu přihlásit ke službě RESET API a pokračovat.
Poznámka: Obě služby Apache musí mít ve svých službách stejné konfigurace workers.properties . Služby Apache jsou také nastaveny jako active-standby cluster, podle keepaliveda mod_jk modul ve službě Apache je zodpovědný za směrování požadavků REST API na služby brány, které jsou založeny na výše uvedené konfiguraci.
Jedná se o chybu v dokumentaci. Tento článek znalostní databáze lze použít před opravou dokumentu.
Additional Information
Keepalive konfiguraci je také možné vylepšit, protože nemusí správně monitorovat služby apache/httpd.
Keepalived.conf používá pro "skript" "killall -0 apache2". Vrátí se hodnota 0 (úspěch), pokud existuje nějaký proces, který má v názvu "apache2", například "tail -f /var/log/apache2/mod_jk.log."
Chcete-li správně monitorovat službu apache2 , použijte příkaz "systemctl --no-pager status apache2" (Ubuntu) nebo "systemctl status httpd" (CentOS/RedHat).
Příkaz použitý jako "script" musí vrátit hodnotu 0, pokud je služba apache2/httpd spuštěna, a žádnou nulu, pokud se služba zastavila.