PowerFlex:閘道高可用性設定會導致 REST 用戶端發生 401 錯誤

Summary: REST API 用戶端收到「401:Unauthorized」錯誤,此時兩個閘道/Apache 服務都在執行中。

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 用戶端收到「401:Unauthorized」錯誤,此時兩個閘道/Apache 服務都在執行中。

REST API 用戶端的一個例子是 OpenStack cinder。此問題可能會導致 OpenStack 中的某些 ScaleIO 磁碟區作業失敗 (對應、取消對應等)。

每 10 個成功的 REST API 要求,就有 1 個失敗。例如,主要 Apache 服務的 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顯示: 

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

這是文件中的錯誤。本文檔中的 workers.properties 配置包含兩個閘道 (Tomcat) 實例之間的負載均衡設置,並且它們的 lbfactor 設置為 10 和 1。這意味著 Apache 服務以 10:1 的比例將傳入請求定向到兩個閘道。由於 REST API 用戶端通過一個閘道獲取令牌,並且令牌未在閘道之間共用,因此使用此令牌發送到第二個閘道的請求失敗,並顯示 401。

便條:如果用戶端以 lbfactor 1 從閘道獲取令牌,則失敗率約為 91%。

Resolution

因應措施
使用以下 workers.properties 檔而不是文件中的檔。這會將兩個閘道設定為使用中-備用模式:

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



此配置將 machine2 設置為主計算機,將 worker1 設置為備用資料庫。此設定與文件之間的主要區別在於:

  • worker.machine1.activation=disabled

這會使 worker machine1 處於待機狀態,預設情況下不會向 machine1 發送任何請求。
  • worker.machine2.redirect=machine1
默認情況下,machine2 處於啟動狀態,並接收請求。如果機器 2 失敗,請求將重定向到機器 1。
  • worker.machine#.lbfactor=1

由於這是使用中-待機設定,因此 lbfactors 如果兩個工作人員都不需要,則設置。
 
 

使用此設定:

  • 當兩個閘道都啟動時,所有請求都將定向到 worker2,並且應該沒有 401。
  • 當工作線程 2 關閉時,請求將定向到工作線程 1。REST 用戶端收到 401,可以再次登錄到 REST API 服務並繼續。
  • 當 worker2 返回並 mod_jk 模組檢測到它時,它會再次將請求定向到 worker2,REST 用戶端收到另一個 401,但可以再次登錄到 RESET API 服務並繼續。

注意:兩種 Apache 服務在其 workers.properties 檔案中所定義。Apache 服務也設定為 active-standby 叢集, 由 keepalived,以及 mod_jk Apache 服務中的模組負責將 REST API 請求定向到基於上述配置的閘道服務。

這是文件錯誤。您可以在修正文件之前使用此 KB。

Additional Information

keepalive配置也可以改進,因為它可能無法正確監視apache/httpd服務。

keepalived.conf 使用“killall -0 apache2”作為“script”。如果名稱中有任何包含「apache2」的進程,則會返回 0(成功),例如”tail -f /var/log/apache2/mod_jk.log."

若要正確監控 apache2 服務,請使用「systemctl --no-pager status apache2」(Ubuntu) 或「systemctl status httpd」(CentOS/RedHat)。

如果 apache2/httpd 服務正在執行中,作為「script」的命令必須傳回 0;如果已停止,則作為「script」的命令必須傳回 none-zero。

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.