标签: haproxy

我可以以编程方式强制更改文件以传播到所有 NFS 客户端吗?

我有一个用 PHP 构建的 CMS,它在磁盘上的文件中存储页面列表、页面导航结构和页面内容。此应用程序托管在 haproxy 服务器后面的 Apache/php-fpm 服务器集群上。这些服务器通过 NFS 从中央文件服务器挂载 Apache DocumentRoot 目录,因此从 CMS 所做的所有更改都会写入 NFS 共享上的文件。

我发现,除非我使用该noac选项挂载 NFS 共享,否则所做的更改可能需要 5-10 秒才能传播到集群中的所有服务器;这意味着当快速连续进行多次更改时,最终更改有时会覆盖较早的更改,因为最终更改可能会发送到尚未收到较早更改的服务器。

但是,在使用noac挂载选项时,访问者端访问内容会有2-5秒的延迟,这是完全不能接受的。

有没有办法以编程方式强制更改 NFS 共享上的文件以传播到所有客户端,或者使所有客户端刷新该文件的缓存?

php file-io nfs haproxy

5
推荐指数
1
解决办法
1548
查看次数

用于 MySQL 主从复制的 HAProxy

我们正在设置 MySQL 主从复制,一切正常。

当前所有负载(读/写)都将转到主服务器。我们的应用程序有 99% 的读取和 1% 的写入。

我们考虑将负载(仅读取)分配给 Master 和 Slave。所以我们想到了使用 HAProxy 将负载分配到两个 MySQL 服务器。

我们的要求是所有写入都重定向到主服务器,读取在主服务器和从服务器之间分配。

mysql haproxy master-slave

5
推荐指数
2
解决办法
8179
查看次数

如何通过 HAproxy 访问 Kibana 仪表板

我有一台运行 kibana 的服务器,我已将其设置为从本地主机访问。这是一个 linux 服务器,所以我可以这样做:

 links http://localhost:5601
Run Code Online (Sandbox Code Playgroud)

这运行良好。我需要将此 kibana 服务器置于 HAProxy 之后,它将充当 Kibana 的反向代理。

我的 Haproxy 配置文件(/etc/haproxy/haproxy.cfg)看起来像

global
        log /dev/log    local0
        log /dev/log    local1 notice
        chroot /var/lib/haproxy
        stats socket /run/haproxy/admin.sock mode 660 level admin
        stats timeout 30s
        user haproxy
        group haproxy
        daemon

        # Default SSL material locations
        ca-base /etc/ssl/certs
        crt-base /etc/ssl/private

        # Default ciphers to use on SSL-enabled listening sockets.
        # For more information, see ciphers(1SSL). This list is from:
        #  https://hynek.me/articles/hardening-your-web-servers-ssl-ciphers/
        ssl-default-bind-ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS
        ssl-default-bind-options no-sslv3

defaults
        log     global
        mode …
Run Code Online (Sandbox Code Playgroud)

reverse-proxy haproxy elasticsearch kibana-4 devops

5
推荐指数
1
解决办法
3752
查看次数

在 haproxy 后端使用域而不是 IP

我有 2 个虚拟主机

app.example.com:80 在 IP 地址上 xxx.xxx.xxx.xxx

app2.example.com:80 在 IP 地址上 yyy.yyy.yyy.yyy

我的haproxy ipaddress是 sss.sss.sss.sss

这是 haproxy 配置:

global
   log 127.0.0.1 local0 notice
   maxconn 2000
   user haproxy
   group haproxy

defaults
  log     global
  mode    http
  option  httplog
  option  dontlognull
  retries 3
  option redispatch
  timeout connect  5000
  timeout client  10000
  timeout server  10000

frontend www-http
    mode http
    bind *:80
    default_backend appname
    stats enable
    stats uri /haproxy?stats
    stats auth admin:password
    stats show-node

backend appname
  balance roundrobin
  option httpclose
  option forwardfor
  server lamp1 …
Run Code Online (Sandbox Code Playgroud)

networking haproxy

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

Haproxy ssl 重定向握手失败

我有使用 http 和 https 的 haproxy v1.5.4。我将 *:80 & :*443 绑定到相同的前端并使用相同的 acl。

我想创建一个 http -> https 重定向

frontend http-in
    bind *:80
    bind *:443 ssl crt /etc/pki/tls/certs/...

    ...

    acl is_office path_beg /office
    http-request redirect scheme https if !{ ssl_fc } is_office

    use_backend office if is_office
Run Code Online (Sandbox Code Playgroud)

这引起

10.XXXXX:36909 [16/Dec/2015:17:23:07.678] http-in/2: SSL handshake failure
Run Code Online (Sandbox Code Playgroud)

当我通过 http 访问时(期待重定向)

如果我通过 https 访问,那么它会正确地访问后端并通过 443 代理通过服务。

backend office
  balance roundrobin
  server backbone-daily 10.XXXXXX:443 ssl check verify none
Run Code Online (Sandbox Code Playgroud)

自签名证书无需重定向即可验证和工作。感觉就像我在重定向阶段遗漏了一些东西。

非常感谢任何帮助

ssl redirect haproxy

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

Haproxy ACL 用于比较标头中的值

我使用 Haproxy 作为 SSL 终止来识别客户端证书。我想检查客户端证书中的 CN 值是否与客户端发送的标头值匹配。如果证书中的 CN 值与标头中的值不匹配,有没有办法设置 ACL?

就像是:

http-request set-header X-SSL-Client-CN     %{+Q}[ssl_c_s_dn(cn)]
acl id_not_match hdr(client-id) -m hdr(X-SSL-Client-CN)
Run Code Online (Sandbox Code Playgroud)

ssl haproxy

5
推荐指数
1
解决办法
4941
查看次数

如何使用 ansible docker_container 模块重新加载配置?

我正在尝试docker kill -s HUP <container>在 Ansible 中完成,但看起来我尝试的选项总是重新启动容器或尝试而不是重新加载配置。

运行以下命令允许我在不重新启动容器的情况下重新加载配置:

docker kill -s HUP <container>

Ansibledocker_container文档建议了以下选项:

force_kill 停止正在运行的容器时使用 kill 命令。

kill_signal 覆盖用于终止正在运行的容器的默认信号。

单独使用kill_signal没有任何作用。

下面是我希望能起作用的一个例子:

- name: Reload haproxy config
  docker_container:
    name: '{{ haproxy_docker_name }}'
    state: stopped
    image: '{{ haproxy_docker_image }}'
    force_kill: True
    kill_signal: HUP
Run Code Online (Sandbox Code Playgroud)

我假设覆盖force_killkill_signal会给我所需的行为。我也尝试将状态设置为“开始”和present.

这样做的正确方法是什么?

haproxy ansible docker

5
推荐指数
1
解决办法
1763
查看次数

haproxy 统计数据:qtime、ctime、rtime、ttime?

运行Web应用程序背后HAProxy的1.6.3-1ubuntu0.1,我越来越HAProxy的统计qtime,ctime,rtime,ttime0,0,0,2704

从文档(https://www.haproxy.org/download/1.6/doc/management.txt):

 58. qtime [..BS]: the average queue time in ms over the 1024 last requests
 59. ctime [..BS]: the average connect time in ms over the 1024 last requests
 60. rtime [..BS]: the average response time in ms over the 1024 last requests
     (0 for TCP)
 61. ttime [..BS]: the average total session time in ms over the 1024 last requests
Run Code Online (Sandbox Code Playgroud)

我期望响应时间在 0-10 毫秒范围内。ttime2704 毫秒似乎高得不切实际。是否有可能单位关闭,这是 2704 微秒而不是 2704 毫秒?

其次,它ttime …

metrics latency haproxy

5
推荐指数
1
解决办法
1263
查看次数

间歇性的“对等连接重置”sql postgres

一段时间不活动后,我的 go web 服务在执行第一个 postgres sql 查询时收到一条net.OpError消息read tcp x.x.x.x:52086->x.x.x.x:24414: read: connection reset by peer。错误后,后续请求将正常工作。

postgres 数据库由 compose.com 托管,它在 postgres db 前面有 haproxy。我的 go web 应用程序使用标准 sql 和 sqlx。

我试过db.Ping()每 15 分钟运行一次自动收报机,但这并没有解决问题。

为什么 go 标准sql库不处理这些连接中断?

postgresql haproxy go compose-db sqlx

5
推荐指数
1
解决办法
3106
查看次数

如何将密码添加到谷歌云内存存储

我需要从云功能访问谷歌云内存存储,但我知道它还不受支持,所以我尝试解决方法在我的 kubernetes 集群中添加 haproxy 并使其可以使用来自负载均衡器类型的 kubernetes 服务公开访问,并将 tcp 请求转发到内存存储。

它对我很好,我可以从云功能连接到我的 memorystore 实例,但只有我遇到的问题,我需要修复它以在 haproxy 级别或 memorystore 级别保护 memorystore,我尝试向 memorystore 添加密码但我发现 CONFIG 命令被禁用。

这是我的 haproxy 配置:

frontend redis_frontend
   bind *:6379
   mode tcp
   option tcplog
   timeout client  1m
   default_backend redis_backend

backend redis_backend
   mode tcp
   option tcplog
   option log-health-checks
   option redispatch
   log global
   balance roundrobin
   timeout connect 10s
   timeout server 1m
   server redis_server 10.0.0.12:6379 check
Run Code Online (Sandbox Code Playgroud)

那么有什么建议吗?

haproxy google-cloud-platform kubernetes google-cloud-memorystore

5
推荐指数
1
解决办法
2396
查看次数