PowerFlex: Gateway met hoge beschikbaarheid instellen veroorzaakt 401-fouten op REST-clients

Summary: REST API-client ontvangt "401: Niet geautoriseerd" wanneer beide Gateway-/Apache-services worden uitgevoerd.

This article applies to This article does not apply to This article is not tied to any specific product. Not all product versions are identified in this article.

Symptoms

REST API-client ontvangt "401: Niet geautoriseerd" wanneer beide Gateway-/Apache-services worden uitgevoerd.

Een voorbeeld van een REST API-client is OpenStack cinder. Dit probleem kan ertoe leiden dat bepaalde ScaleIO-volumebewerkingen (mappen, unmappen, enzovoort) in OpenStack mislukken.

Voor elke 10 succesvolle REST API-aanvragen mislukt er 1. In de mod_jk.log van de primaire Apache-service wordt bijvoorbeeld het volgende weergegeven:

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 toont: 

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

Dit is een fout in het document. De configuratie workers.properties in dit document bevat een load-balancing-instelling tussen twee Gateway (Tomcat)-instanties en de lbfactor is voor deze instanties ingesteld op 10 en 1. Dit betekent dat de Apache-service inkomende aanvragen naar de twee gateways stuurt in een verhouding van 10:1. Aangezien de REST API-client een token verkrijgt via één gateway en tokens niet worden gedeeld tussen gateways, mislukt een aanvraag die met dit token naar de tweede gateway wordt verzonden met 401.

Notitie: Als een client een token van de Gateway verkrijgt met lbfactor 1, is het uitvalpercentage ongeveer 91%.

Resolution

Tijdelijke oplossing
Gebruik het volgende bestand workers.properties in plaats van het bestand in het document. Hiermee worden de twee gateways in de actieve stand-bymodus geplaatst:

** /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



Deze configuratie stelt machine2 in als de primaire en worker1 als stand-by. De belangrijkste verschillen tussen deze configuratie en het document zijn:

  • worker.machine1.activation=disabled

Dit zet werkmachine1 in stand-by en er worden standaard geen aanvragen naar machine1 verzonden.
  • worker.machine2.redirect=machine1
Machine2 is standaard geactiveerd en ontvangt aanvragen. Als machine2 mislukt, wordt de aanvraag doorgestuurd naar machine1.
  • worker.machine#.lbfactor=1

Aangezien dit een actieve stand-by-opstelling is, is een andere lbfactors Installatie indien niet vereist voor beide werknemers.
 
 

Met deze configuratie:

  • Wanneer beide gateways actief zijn, worden alle aanvragen doorgestuurd naar worker2 en zou er geen 401 moeten zijn.
  • Wanneer werker 2 uitvalt, worden de aanvragen doorgestuurd naar werker1. De REST-client ontvangt een 401 en kan zich opnieuw aanmelden bij de REST API-service en doorgaan.
  • Wanneer werker2 terugkomt en mod_jk module het detecteert, stuurt het opnieuw aanvragen naar werker2 en ontvangt de REST-client nog een 401, maar kan zich opnieuw aanmelden bij de RESET API-service en doorgaan.

Opmerking: Beide Apache-services moeten dezelfde configuraties hebben in hun workers.properties bestand. De Apache-diensten zijn ook ingesteld als een active-standby cluster, door keepalived, en de mod_jk module in de Apache-service is verantwoordelijk voor het doorsturen van REST API-aanvragen naar Gateway-services, die zijn gebaseerd op de bovenstaande configuratie.

Dit is een documentatiefout. Deze KB kan worden gebruikt voordat het document wordt gecorrigeerd.

Additional Information

De keepalive-configuratie kan ook worden verbeterd omdat deze apache/httpd-services mogelijk niet correct controleert.

De keepalived.conf gebruikt "killall -0 apache2" voor het "script". Dit retourneert 0 (succes) als er een proces is met "apache2" in de naam, zoals "tail -f /var/log/apache2/mod_jk.log."

Om de apache2-service correct te controleren, gebruikt u "systemctl --no-pager status apache2" (Ubuntu) of "systemctl status httpd" (CentOS/RedHat).

De opdracht die als "script" wordt gebruikt, moet 0 retourneren als de apache2/httpd-service wordt uitgevoerd, en none-zero als deze is gestopt.

Affected Products

PowerFlex Software
Article Properties
Article Number: 000052840
Article Type: Solution
Last Modified: 29 Oct 2025
Version:  4
Find answers to your questions from other Dell users
Support Services
Check if your device is covered by Support Services.