PowerFlex: Konfiguration af Gateway High Availability forårsager 401 fejl på REST-klienter
Summary: REST API-klienten modtager "401: Fejlmeddelelsen Uautoriseret", når begge Gateway/Apache-tjenester kører.
Symptoms
REST API-klienten modtager "401: Fejlmeddelelsen Uautoriseret", når begge Gateway/Apache-tjenester kører.
Et eksempel på REST API-klient er OpenStack cinder. Dette problem kan medføre, at visse ScaleIO-diskenhedshandlinger (tilklæbning, afbildning osv.) i OpenStack mislykkes.
For hver 10 vellykkede REST API-anmodninger mislykkes 1. For eksempel viser den primære Apache-tjenestes mod_jk.log:
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 viser:
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
Dette er en fejl i dokumentet. Konfigurationen workers.properties i dette dokument indeholder en belastningsjusteringsopsætning mellem to Gateway-forekomster (Tomcat), og lbfactor er angivet til 10 og 1 for dem. Dette betyder, at Apache-tjenesten dirigerer indgående anmodninger til de to gateways i forholdet 10: 1. Da REST API-klienten henter et token via én gateway, og tokens ikke deles mellem gateways, mislykkes en anmodning, der sendes til den anden gateway med dette token, med 401.
Seddel: Hvis en klient erhverver et token fra gatewayen med lbfactor 1, er fejlraten ca. 91%.
Resolution
Løsning
Brug følgende workers.properties-fil i stedet for filen i dokumentet. Dermed konfigureres de to gateways i aktiv standbytilstand:
** /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
Denne konfiguration konfigurerer maskine2 som den primære, arbejder1 som standby. De vigtigste forskelle mellem denne konfiguration og dokumentet er:
-
worker.machine1.activation=disabled
worker.machine2.redirect=machine1
-
worker.machine#.lbfactor=1
lbfactors Opsætning, hvis det ikke er påkrævet for begge arbejdere.
Med denne konfiguration:
- Når begge gateways er oppe, sendes alle anmodninger til arbejder2, og der bør ikke være nogen 401.
- Når arbejder2 går ned, sendes anmodningerne til arbejder1. REST-klienten modtager en 401 og kan logge på REST API-tjenesten igen og fortsætte.
- Når worker2 kommer tilbage, og mod_jk modul registrerer det, dirigerer det anmodninger til worker2 igen, og REST-klienten modtager yderligere 401, men kan logge på igen for at RESET API-tjenesten og fortsætte.
Bemærk: Begge Apache-tjenester skal have de samme konfigurationer i deres workers.properties fil. Apache-tjenesterne er også konfigureret som en active-standby klynge, af keepalived, og mod_jk modulet i Apache-tjenesten er ansvarlig for at dirigere REST API-anmodninger til gatewaytjenester, der er baseret på ovenstående konfiguration.
Dette er en dokumentationsfejl. Denne KB kan bruges, før dokumentet rettes.
Additional Information
Den keepalived-konfiguration kan også forbedres, da den muligvis ikke overvåger apache/httpd-tjenester korrekt.
keepalived.conf bruger "killall -0 apache2" til "scriptet". Dette returnerer 0 (fuldført), hvis der er en proces med "apache2" i navnet, f.eks. "tail -f /var/log/apache2/mod_jk.log."
For korrekt overvågning af apache2-tjenesten skal du bruge "systemctl --no-pager status apache2" (Ubuntu) eller "systemctl status httpd" (CentOS / RedHat).
Kommandoen, der bruges som "script", skal returnere 0, hvis apache2/httpd-tjenesten kører, og ingen-nul, hvis den er stoppet.