我希望将应用程序的 v1 版本放在一个池中,将版本 v1.1 放在另一个池中,然后慢慢增加流向池 2 的流量,并将其减少到池 1。
谁能展示一些使用 HA Proxy、Varnish、Nginx 或其他东西执行此操作的具体示例?
我需要设置一个具有负载平衡的网站以容纳更多访问者,
我在论坛上看到 varnish(balance)->apache(web1&2)->mysql(dbserver) 是可行的方法。
我知道如何设置 varnish->single webserver->mysql 但不知道如何设置两个 web 服务器来平衡,
但是我怎样才能实时同步两个网络服务器内容呢?我的自定义应用程序允许访问者发布文件。
请告诉我如何配置这个?
我的设置。
(internet)
|
(load balance server)
/ \
/ \
(webserver1) (webserver2)
\ /
(database server)
Run Code Online (Sandbox Code Playgroud)
谢谢。
我在同一台服务器上的 Varnish(4.1.0) 前面有 Nginx(1.9.9)。
//nginx
upstream varnish {
server 127.0.0.1:8391;
keepalive 16;
}
location ~ \.php$ {
proxy_pass http://varnish;
proxy_http_version 1.1; #for 1.0 varnish shows blank page
proxy_set_header Connection "";
proxy_redirect off;
proxy_set_header Host $host:$server_port;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_read_timeout 600;
proxy_send_timeout 600;
proxy_connect_timeout 600;
}
//varnish
DAEMON_OPTS="-a :8391 \
-T localhost:6082 \
-f /etc/varnish/default.vcl \
-S /etc/varnish/secret \
-s malloc,1024m"
Run Code Online (Sandbox Code Playgroud)
对于 0.001% 的请求,nginx 显示错误:
[error] 5331#5331: *7392847 upstream prematurely closed connection while reading response header from upstream, …Run Code Online (Sandbox Code Playgroud) 我在 CentOS 7.8 上使用 Apache 2.4.43 以及 Varnish 6 和 PHP-FPM 来为 Magento 2 网站提供服务。
Varnish 侦听端口 80。Apache 侦听 8080 以向 Varnish 提供内容,并且还侦听端口 443,该端口将 HTTPS 请求代理到 Varnish,如下所示:
ProxyPreserveHost On
ProxyPass / http://127.0.0.1:80/
RequestHeader set X-Forwarded-Port "443"
RequestHeader set X-Forwarded-Proto "https"
Run Code Online (Sandbox Code Playgroud)
这适用于大多数请求,但偶尔(约 10% 的请求)我会收到来自 Varnish 和 Apache 的 503 响应。我在 Apache 日志中看到的唯一错误是:
[proxy_http:error] [pid 6719:tid 140054596265728] (70008)Partial results are valid but processing is incomplete: [client x.x.x.x:53760] AH01110: error reading response, referer: http://example.com
Run Code Online (Sandbox Code Playgroud)
如果我重试该请求,它通常会立即起作用,尽管有时我必须刷新几次才能满足请求。我注意到,当发出大批量请求时(即包含数百个外部资源的页面),这种情况会更频繁地发生。我还注意到,这种情况似乎发生在较大的文件上,而不是较小的文件上。
我猜测这可能是某种超时,但我不确定要调整哪些值或如何进一步调试它。
我尝试过的事情包括以下内容:
我们目前通过单个 Apache 服务器提供大型 (1GB+) 文件,但我们的 Apache 服务器非常受磁盘 IO 限制,我们需要扩展。
我的第一个想法是简单地复制这个 Apache 服务器,但是我们的文件库太大了,不能简单地将 Apache 服务器水平扩展 N 倍。
所以我的下一个想法是在后端有两个 Apache(高可用),每个都有我们整个库的单独副本......然后在前面有“N”个反向代理,其中“N”随着我们的交付需求的增长而增长。每个反向代理都占用大量 RAM,并且每 GB 具有尽可能多的心轴。后端 Apache 服务器更“存档”,并且主轴与 GB 之间的比率较低。
这是一个好的架构吗?有没有更好的处理方法?
我想看看如何配置 Nginx 和 Varnish。
我正在运行多个 PHP 站点和 Rack-Sinatra 站点作为跨两个 IP 的虚拟主机。我想防止 Nginx 不得不提供静态文件,因为我注意到一些延迟。
编辑:我已更改为 Nginx,但提供的答案很容易移植到 nginx。
好的:我已经建立了一个站点,其中包含一些我们向开发人员公开的 API,它们采用以下格式
/api/item.xml?type_ids=34,35,37®ion_ids=1000002,1000003&key=SOMERANDOMALPHANUM
Run Code Online (Sandbox Code Playgroud)
在这个 URI 中,type_ids 总是被设置,region_ids 和 key 是可选的。
需要注意的重要一点是,关键变量不会影响响应的内容。它用于请求的内部跟踪,因此我们可以识别发出缓慢或其他不需要的请求的人。
在 Varnish 中,我们有一个像这样的 VCL:
if (req.http.host ~ "the-site-in-question.com") {
if (req.url ~ "^/api/.+\.xml") {
unset req.http.cookie;
}
}
Run Code Online (Sandbox Code Playgroud)
我们只是去除 cookie 并让后端完成其余的工作(就时间而言,这是一种 hackaround,因为 Rails/authlogic 发送带有 API 响应的会话 cookie)。
但目前,任何不同的开发人员基本上都在访问不同的缓存,因为它们&key=SOMEALPHANUM被视为 Varnish 哈希存储的一部分。这显然不是一个很好的解决方案,我正在尝试找出如何告诉 Varnish 忽略 URI 的那部分。
我正在尝试解决通过 WebDav 重命名文件的问题。我们的堆栈由一台机器组成,通过 Nginx、Varnish 和 Apache 提供内容。当您尝试重命名文件时,操作会因我们当前使用的堆栈而失败。
要连接到 WebDav,客户端程序必须:
以下是重命名失败的示例:
$ cadaver https://webdav.domain/
Authentication required for Webdav on server `webdav.domain':
Username: user
Password:
dav:/> cd sandbox
dav:/sandbox/> mkdir test
Creating `test': succeeded.
dav:/sandbox/> ls
Listing collection `/sandbox/': succeeded.
Coll: test 0 Mar 12 16:00
dav:/sandbox/> move test newtest
Moving `/sandbox/test' to `/sandbox/newtest': redirect to http://webdav.domain/sandbox/test/
dav:/sandbox/> ls
Listing collection `/sandbox/': succeeded.
Coll: …Run Code Online (Sandbox Code Playgroud) 我们最近将我们的站点迁移到了 varnish 后面的负载均衡的 apache 集群。从那时起,一小部分用户报告说他们无法查看任何页面。我已经把问题缩小了很多。这个问题在搬迁之前不存在,旧的基础设施是一个大盒子。
我们在 Rackspace Cloud 上运行 8 个 apache2 实例,在 varnish 3.0 后面使用 Rackspace Cloud 负载平衡器 (Zeus) 和 2 个 mysql 实例进行负载平衡,总共 10 个服务器,全部为 linux。
用户可以查看静态 html 文件。用户可以查看静态资产,例如图像。用户无法查看任何 php 文件,即使是一个只包含 phpinfo() 的简单文件;当负载均衡器从图片中取出时,用户无法查看任何 php 文件。
除了访问日志之外,apache 日志没有显示任何值得注意的内容。PHP错误报告设置为记录,不显示,虽然我设置为显示时间很短,但用户仍然得到一个没有错误的空白页面。Apache/Varnish/PHP 错误日志没有显示任何值得注意的内容。
服务器是:
部分配置截图:
我的服务器中有一个非常繁重的站点。服务器的负载总是在 30-50 左右,有时甚至会变成 150,服务器的工作真的很辛苦。我正在寻找一种可以提高服务器性能并减少服务器负载的缓存解决方案。
但我不知道我应该使用哪种缓存解决方案?顺便说一句,我正在使用 Drupal CMS 并且我有 WHM/CPanel
以下是我发现的选项:1- Memcached 2- Varnish 3- Apache mod_cache
有人可以给我一些关于这些平台的比较或指导吗?Apache 的 mod_cache 和 Varnish 一样好用吗?因为在 cPanel / WHM 中安装和配置 Varnish 并不复杂。虽然我读过关于 Varnish 的非常好的评论。
我正在寻找可以直接配置且不复杂的最佳缓存解决方案。我将不胜感激任何帮助或评论。