PowerFlex: Gateway High Availability -määritys aiheuttaa 401-virheitä REST-asiakkaissa
Summary: REST API -asiakas vastaanottaa "401: Luvaton" -virhe, kun sekä Gateway/Apache -palvelut ovat käynnissä.
Symptoms
REST API -asiakas vastaanottaa "401: Luvaton" -virhe, kun sekä Gateway/Apache -palvelut ovat käynnissä.
Yksi esimerkki REST API -asiakkaasta on OpenStack cinder. Tämä ongelma saattaa aiheuttaa tiettyjen OpenStackin ScaleIO-asematoimintojen (map, unmap jne.) epäonnistumisen.
Jokaista kymmentä onnistunutta REST API -pyyntöä kohden yksi epäonnistuu. Esimerkiksi Primary Apache -palvelun mod_jk.log näkyy:
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 näyttää:
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
Tämä on asiakirjassa oleva virhe. Tämän asiakirjan workers.properties-määritys sisältää kuormituksentasausasetukset kahden yhdyskäytävän (Tomcat) esiintymän välillä, ja niiden lbfactor-arvoksi on määritetty 10 ja 1. Tämä tarkoittaa, että Apache-palvelu ohjaa saapuvat pyynnöt kahteen yhdyskäytävään suhteessa 10: 1. Koska REST API -asiakas hankkii tunnuksen yhden yhdyskäytävän kautta eikä tunnuksia jaeta yhdyskäytävien kesken, tällä tunnuksella toiseen yhdyskäytävään lähetetty pyyntö epäonnistuu 401:ssä.
Muistiinpano: Jos asiakas hankkii tunnuksen yhdyskäytävältä lbfactor 1: llä, vikaprosentti on noin 91%.
Resolution
Vaihtoehtoinen menetelmä
Käytä seuraavaa workers.properties-tiedostoa asiakirjassa olevan tiedoston sijaan. Tämä määrittää kaksi yhdyskäytävää aktiivisessa valmiustilassa:
** /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
Tämä määritys määrittää koneen 2 ensisijaiseksi ja työntekijä 1 valmiustilaksi. Tärkeimmät erot tämän kokoonpanon ja asiakirjan välillä ovat:
-
worker.machine1.activation=disabled
worker.machine2.redirect=machine1
-
worker.machine#.lbfactor=1
lbfactors Määritä, jos sitä ei vaadita molemmille työntekijöille.
Tällä kokoonpanolla:
- Kun molemmat yhdyskäytävät ovat käytössä, kaikki pyynnöt ohjataan worker2:lle, eikä 401:tä pitäisi olla.
- Kun worker2 menee alas, pyynnöt ohjataan worker1:lle. REST-asiakas vastaanottaa 401:n ja voi kirjautua uudelleen REST API -palveluun ja jatkaa.
- Kun worker2 tulee takaisin ja mod_jk moduuli havaitsee sen, se ohjaa pyynnöt uudelleen worker2:lle, ja REST-asiakas vastaanottaa toisen 401:n, mutta voi kirjautua uudelleen RESET API -palveluun ja jatkaa.
Huomautus: Molemmissa Apache-palveluissa on oltava samat kokoonpanot workers.properties tiedosto. Apache-palvelut on myös perustettu active-standby klusteri, mukaan keepalivedja mod_jk Apache-palvelun moduuli vastaa REST API -pyyntöjen ohjaamisesta yhdyskäytäväpalveluihin, jotka perustuvat yllä olevaan määritykseen.
Tämä on dokumentaatiovirhe. Tätä tietämyskannan artikkelia voidaan käyttää ennen asiakirjan korjaamista.
Additional Information
Keepalive-kokoonpanoa voidaan myös parantaa, koska se ei välttämättä valvo apache / httpd-palveluita oikein.
Keepalived.conf käyttää komentosarjaa "killall -0 apache2". Tämä palauttaa arvon 0 (onnistui), jos nimessä on jokin prosessi, jonka nimessä on "apache2", kuten "tail -f /var/log/apache2/mod_jk.log."
Voit valvoa apache2-palvelua oikein käyttämällä "systemctl --no-pager status apache2" (Ubuntu) tai "systemctl status httpd" (CentOS/RedHat).
Komentosarjana käytettävän komennon on palautettava 0, jos palvelu apache2/httpd on käynnissä, ja none-zero, jos se on pysähtynyt.