小编Chr*_*uet的帖子

haproxy:如何在不启动应用程序会话的情况下准备服务器维护?

问题

我正在使用 haproxy 对 Web 服务器进行负载平衡。我将会话持久性与附加 cookie 一起使用,因为某些应用程序使用会话文件,而这些文件在服务器之间不同步。

我想禁用服务器进行维护,但不中断会话。所以我想允许现有客户继续他们的应用程序会话,但不接受新客户。

快乐的行为

  • 我将服务器设置为“去维护”
  • 如果客户端设置了 cookie,即使标记为“进入维护”,也要使用服务器
  • 如果一个新客户端(没有 cookie)来了,它被定向到另一个服务器
  • 在所有客户端结束他们的应用程序会话之后,没有更多的客户端会将 cookie 设置到这个特定的服务器,我最好在没有用户中断的情况下关闭它。

您认为通过某些 haproxy 配置可以实现吗?或者有什么聪明的方法来做到这一点?

其他方法

满足此需求的其他方法的非详尽列表:

  • 在服务器之间同步会话文件(需要一种在多个服务器之间同步文件的方法,或者一个通用的单个挂载点)
  • 使用数据库存储会话信息(需要改变应用行为)

更多细节

我使用这种配置:

frontend https-in
   bind xxx.xxx.xxx.xxx:443 ssl crt /etc/haproxy/ssl/_default.pem crt /etc/haproxy/ssl
   reqadd X-Forwarded-Proto:\ https

   acl APP1 hdr(host) -i APP1.atac.local
   use_backend APP1 if APP1

   default_backend _default

backend APP1
   redirect scheme https if !{ ssl_fc }
   mode http
   balance roundrobin
   cookie HAPROXY_SESSION insert indirect
   option httpchk HEAD /haproxy_test_page.php HTTP/1.0\nUser-Agent:\ HAProxy
   server SRV1 SRV1_IP:PORT cookie SRV1 check
   server …
Run Code Online (Sandbox Code Playgroud)

maintenance cookies haproxy

16
推荐指数
2
解决办法
3万
查看次数

SaltStack:一个状态如何只执行一次?

我只需要执行一次状态。我找不到一个简单的方法来做到这一点。

现在,上下文

我通过 salt 安装了两个 MySQL 服务器。我想让一个人成为另一个人的奴隶。

为了设置从站,我需要在主站安装结束时获取主站状态信息:

SHOW MASTER STATUS;
Run Code Online (Sandbox Code Playgroud)

现在,我可以使用执行mysql.query函数的自定义状态来获取它。

mysql_master_status:
  mystate.query:
    - query: SHOW MASTER STATUS
Run Code Online (Sandbox Code Playgroud)

但是每次为我的服务器执行 highstate 时它都会执行。从而每次都给出不同的主信息。

我尝试使用文件存在作为标志:

/tmp/only_once:
  file.missing: []
mysql_master_status:
  mystate.query:
    - query: SHOW MASTER STATUS
    - require:
      - file: /tmp/only_once
Run Code Online (Sandbox Code Playgroud)

它正在工作,但我并不高兴,因为我现在每次都有两个失败的状态。

我的自定义解决方案

我以一个新参数 for 结束mystateflag它在第一次执行时创建一个标志文件,如果文件存在则成功返回:

mysql_master_status:
  mystate.query:
    - query: SHOW MASTER STATUS
    - flag:  /tmp/only_once
Run Code Online (Sandbox Code Playgroud)

还有这个问题

不过,我想知道是否以及如何只执行一次状态。

saltstack

9
推荐指数
1
解决办法
8743
查看次数

sssd:有没有办法强制某些组成员使用特定的外壳?

上下文

我想限制一些 AD 用户使用特定脚本,限制他们在这台特定机器上可以做什么。

因此,与其将它们与/bin/bash(例如)连接起来,我想强制它们使用/path/to/my/script. 这些用户位于特定的 AD 组中。

其他人应该能够使用真正的shell。

经典的方式

如果那些用户是本地用户,我只会更改 .bashrc 中的 shell 字段/etc/passwd

sssd方式

有没有办法只为该组的成员提供不同的 shell 值?

如果不是,你会怎么做?

active-directory sssd

8
推荐指数
1
解决办法
1万
查看次数