我正在尝试寻找平衡并保持 HAProxy 后面应用程序持久性的最佳解决方案。
这是我们的基本配置:https://gist.github.com/endzyme/1804046b23c37beba520
在尝试过关闭和启用成员以及重新加载 haproxy(使用 -sf)之后,我注意到 appsession 并不是 100% 有效,似乎有时并非总是如此'request-learn'
。我还尝试添加一个cookie JSESSION prefix
以防万一request-learn
没有成功。
不幸的是,它会出现前缀列出 svr2 但平衡到另一台服务器的情况。我假设这是因为 appsession 表在使用 cookie 参数之前先获取然后坚持使用它。我还没有测试过使用 cookie 作为插入选项(而不是现有 cookie 上的前缀),但我认为它会产生类似的结果。
我的问题是: 哪一个被选中第一的、appsession 或 cookie,读取第一个后会立即捕获,还是会失败?另外作为后续问题 - 不建议在同一个后端同时使用两者吗?
据我所知,Cookie 占用的内存资源较少,与重新加载无关,并且持久性可靠性更高。我认为 Appsession 占用的 CPU 资源较少,因为它是读取而不是写入。
(附加问题:有没有办法检查 appsession/cookie 表映射?socket> show table 除了 stick-tables 之外不显示任何内容)
提前谢谢了,
-缺口
答案1
在与 Exceliance 人员(他们帮助开发 HAProxy)会面后,我获得了更多信息。
没有得到关于先检查哪个的明确答案,但很明显你应该使用 cookie 或使用 stick-tables。这两种方法都有在 HAProxy 重新加载后持久化的方法。他们还让我们知道 appsession 被标记为弃用,并使用 cookie 或带有 cookie 的 stick-tables。Appsession 在内存中使用哈希图,该哈希图不会在重新加载后持久化,并且具有一些发现机制,但不可靠。
Exceliance 还提到,与 appsession 相比,cookie 不会占用太多资源。没有办法检查 appsession 到服务器哈希的映射。使用 cookie 并检查日志记录或 cookie 本身更有效,或者如果您使用 stick-tables - socket> show tables 将用于检查持久性。