问题描述
对于OpenStack的DashBoard来说,为水平扩展其处理能力,就需要对多个DashBoard进行Load Balance。DashBoard和OpenStack各组件对外的API服务不同,其是有状态的,且会涉及特定的问题,本文会对其涉及的问题及解决办法进行分析和记录。
问题分析
OpenStack的DashBoard对外提供Portal和noVNCProxy两个服务,使用Django框架实现。其中noVNCProxy还涉及到提供websocket服务器的能力。要做到DashBoard的LoadBalance,有如下几个问题需要考虑。
Session Sticky
DashBoard涉及到用户登陆和session管理,当使用多个DashBoard后端做LoadBalance时,需要保持多DashBoard后端session数据的一致性。可以通过将DashBoard所在主机添加到一个memcache集群中,并配置Django使用此memcache来作为session后端来完成这一点。当然,也可以通过由LB软件提供session sticky能力来完成这一点。所谓的session sticky,是指LB需要在第一次接收到请求并分发到后端时,记录其session信息,在后续收到同一个session的请求到来时,将请求转发到相同的后端上。作为L7 Level的LB软件,HAProxy具备session sticky的能力。可通过类似如下Backend配置来开启session sticky:
mode http
balance roundrobin
cookie SERVERID insert indirect nocache
server server01 controller01:80 check cookie server01
server server02 controller02:80 check cookie server02
server server03 controller03:80 check cookie server03
WebSocket
NoV