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

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

本文章適用於 本文章不適用於 本文無關於任何特定產品。 本文未識別所有產品版本。

症狀

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]

 

原因

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

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

解析度

因應措施
使用以下 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。

其他資訊

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。

受影響的產品

PowerFlex Software
文章屬性
文章編號: 000052840
文章類型: Solution
上次修改時間: 17 4月 2026
版本:  5
向其他 Dell 使用者尋求您問題的答案
支援服務
檢查您的裝置是否在支援服務的涵蓋範圍內。