小编Phi*_*ßen的帖子

如何让现有的缓存 Nginx 代理使用另一个代理绕过防火墙?

我的问题是关于使用 Nginx 作为另一个代理背后的代理。(有点混乱。)

我想设置 Nginx,以便它充当 npm 镜像的缓存代理服务器。这是链接:http : //eng.yammer.com/a-private-npm-cache/

在我的本地机器上,不受防火墙限制,以下配置工作正常:

proxy_cache_path /var/cache/npm/data levels=1:2 keys_zone=npm:20m max_size=1000m
inactive=365d;
proxy_temp_path /var/cache/npm/tmp;

server {
   listen 80;
   server_name classen.abc.lan;
   location / {
      proxy_pass http://registry.npmjs.org/;
      proxy_cache npm;
      proxy_cache_valid 200 302 365d;
      proxy_cache_valid 404 1m;
      sub_filter 'registry.npmjs.org' 'classen.abc.lan';
      sub_filter_once off;
      sub_filter_types application/json;
   }
}
Run Code Online (Sandbox Code Playgroud)

现在我想将它应用到位于附加防火墙后面的服务器。在日志中,我可以确认它访问了正确的上游 IP,但由于内部防火墙,请求失败。

我们有一个内部代理,我可以用它绕过防火墙,例如:

$ curl http://registry.npmjs.org
curl: (7) couldn't connect to host
$ http_proxy=http://proxy.abc.lan:1234/ curl http://registry.npmjs.org
... succeeds ...
Run Code Online (Sandbox Code Playgroud)

这个技巧不适用于 Nginx,因为它忽略了http_proxy环境变量。看了文档,还是想不通怎么修改配置,让它内部可以使用代理。

是否可以结合两种解决方案?重要的是缓存仍然有效,否则,您可以直接使用外部镜像 registry.npmjs.org。

也许,Nginx 应该使用内部代理(proxy.abc.lan)作为proxy_pass,但是内部代理如何知道应该将请求发送到外部 npm 镜像( …

firewall nginx proxy cache

7
推荐指数
2
解决办法
9250
查看次数

在 Windows 上保持 ssh 连接打开?

我知道在 Unix 系统上,您可以保持 ssh 连接打开。

步骤1:创建ssh配置,例如:

 Host <some.host.name>
 ControlPath ~/.ssh/master-%r@%h:%p
 ControlPersist yes
Run Code Online (Sandbox Code Playgroud)

步骤2:使用-M参数启动ssh。

Windows 下是否有类似的东西可以重用 ssh 连接?也许我看错了地方,但我没有找到关于这个主题的任何好的链接。

(我在 MingGW 环境中尝试了上面的方法(使用 MingGW 的 ssh 客户端)。在真正的 Unix 系统中,它应该在 中创建一个特殊的套接字文件~/.ssh,但 MingGW 似乎不支持该功能。)

windows ssh

6
推荐指数
1
解决办法
5516
查看次数

EC2 Auto-Scaling:配置目标跟踪策略以优先选择 Spot 实例

Amazon 最近推出了EC2 Auto Scaling 的目标跟踪策略

在我的生产服务中,我使用两个独立的自动扩展组来支持混合使用 Spot 和按需实例的混合自动扩展。我想要的是我的 CPU 使用率不应超过 70%,并且应尽可能使用 Spot 实例,但在必要时回退到按需实例。

首先,我将两个 Auto-Scaling 组(Spot 和 On-Demand)设置为针对 70% CPU 负载使用目标跟踪,并将两个组的最小大小设置为 1。我的服务上的流量是相当可预测的(没有突然增加,白天流量较多,夜间流量很少)。

某一时刻,有两个按需实例和两个 Spot 实例正在运行。系统刚刚缩容,因为五台服务器的CPU负载变得非常低(大约35%)。对于四台服务器,CPU 负载上升,几分钟后短暂突破 70% 大关(当时可能有非常小的流量提升)。

系统保守地决定再次扩展,但由于两个自动扩展组同时独立做出决定,因此启动了两个实例(一个 Spot 实例和一个 On-Demand 实例)。此时,已有六台服务器正在运行。一段时间后,它再次缩小规模,最终达到运行四个实例的设置。

为了避免这种影响,我现在更改了设置,如下所示:

  • 按需:目标 CPU 使用率 70%,至少一台服务器
  • Spot:目标 CPU 使用率 65%,至少一台服务器

我的假设是它应该有助于防止我描述的情况。我预计 On-Demand 组会比 Spot 组更早缩小规模(无论如何,这是可取的,因为它们成本更高)。我预计 Spot 实例会更快地扩展,这应该可以防止按需组不必要的扩展。

这是我的期望,但我没有在文档中找到太多细节来证实它。有人可以详细说明新的目​​标跟踪扩展如何工作,以及如何将其应用到具有 Spot 和按需实例的混合设置吗?

问题:

  • 如果我将目标设置为 70% CPU 利用率,那么什么时候它会决定扩大规模以及何时缩小规模?
  • 如果我有两个 Auto-Scaling 组,一个的 CPU 利用率目标为 70%,另一个的目标为 65%,那么它何时会决定扩大或缩小规模?它总是倾向于缩小 70% 群体的规模吗?它总是倾向于扩大 65% 群体的规模吗?
  • 如果现货市场的价格突然上涨并超过我的出价限制,会发生什么情况?按需自动扩展组会接管吗?
  • 我的理解是否正确,手动定义所需实例的数量仅具有短期效果,并且会由 Auto Scaling 策略自动调整?
  • 例如,如果它在夜间缩小到最小值并在第二天再次扩大,是否意味着前一天的初始“所需实例数”设置现在已过时?换句话说,我是否只需要担心设置合理的最小值和最大值,AWS 会计算出其余的值吗?

amazon-ec2 amazon-web-services autoscaling

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

是否建议在 systemd 中为可替换服务设置 OOMScoreAdjust=1000?

systemd 有一个OOMScoreAdjust选项,它允许调整启动进程的 oom-killer 分数。

引用systemd 文档

OOMScoreAdjust=

为已执行的进程设置内存不足杀手的调整级别。取一个介于 -1000(禁用此进程的 OOM 终止)和 1000(在内存压力下很可能终止此进程)之间的整数。有关详细信息,请参阅proc.txt

在我的设置中,我在 AWS 上部署了一个 NodeJs 服务器。除了 Node 服务器之外,EC2 实例上没有其他运行(除了监控和基本的 OS 进程)。有 ELB 运行状况检查,最终应该会替换损坏的 EC2 实例。

不过,我想知道如果OOMScoreAdjust存在内存问题,增加内核是否更喜欢杀死 Node 服务器进程是否被认为是一种好习惯,因为它可以自动重新启动。在 systemd 中,它可能如下所示:

OOMScoreAdjust=1000
Restart=always
Run Code Online (Sandbox Code Playgroud)

我不得不承认我的理解是有限的。我目前的理解是它很可能不会产生真正的影响,最好保留默认值:

  • 如果内存耗尽进程是 Node 服务器,它很可能无论如何都会被杀死。
  • 如果罪魁祸首是另一个进程,重启 Node 服务器将无济于事,ELB 健康检查最终应该负责替换实例。

不过,我很好奇是否有更了解的人已经考虑过了。启用它只会是 systemd 脚本中的一行。如果有疑问,我宁愿让内核杀死 Node 进程,而不是任何随机系统服务。

amazon-web-services systemd oom-killer

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

对 CentOS 6.4 的依赖中断:可以安装 nodejs 但不能安装 npm

我正在使用带有 EPEL 存储库的全新安装的 CentOS 6.4 (x86-64)。

$ yum install nodejs
...
$ node -v
v0.10.5
Run Code Online (Sandbox Code Playgroud)

到目前为止,npm一切都很好,但是当我尝试安装时,我会收到以下错误消息:

$ yum install npm
Loaded plugins: fastestmirror, refresh-packagekit, security
Loading mirror speeds from cached hostfile
 * base: ftp.halifax.rwth-aachen.de
 * epel: mirror.fraunhofer.de
 * extras: centos.psw.net
 * updates: centos.psw.net
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package npm.noarch 0:1.2.17-5.el6 will be installed
--> Processing Dependency: npm(which) < 2 for package: npm-1.2.17-5.el6.noarch
--> Processing Dependency: npm(uid-number) < 1 for package: npm-1.2.17-5.el6.noarch …
Run Code Online (Sandbox Code Playgroud)

centos yum node.js epel centos6.4

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

在 Redis 5 中(使用 Jemalloc 分配器)是否存在应该禁用 activedefrag 的情况?

Redis 4 添加了主动内存碎片整理(来源:发行说明):

主动内存碎片整理。如果使用 Jemalloc 分配器(Linux 上的默认设置),Redis 能够在联机时对内存进行碎片整理。对于分配器无法将碎片保持得足够低的工作负载非常有用,因此唯一的可能性是 Redis 和分配器协作以对内存进行碎片整理。

在 Redis 5 中,该功能(现在称为版本 2)得到了改进:

来源 1:Redis 主要开发者 Salvatore Sanfilippo 的推文

主动碎片整理版本 2。对正在运行的服务器进行内存碎片整理是黑魔法,但 Oran Agra 改进了他过去的努力,现在它比以前效果更好。对于长时间运行且容易造成 Jemalloc 碎片的工作负载非常有用。

资料来源2:AWS发布Redis 5

上一版本的亮点之一是 Redis 获得了在线进行内存碎片整理的功能。它的工作方式非常聪明:Redis 扫描键空间,对于每个指针,询问分配器将其移动到新地址是否有助于减少碎片。此版本附带了所谓的主动碎片整理 2:它更快、更智能且延迟更低。此功能对于分配器无法将碎片保持得足够低的工作负载特别有用,因此策略是让 Redis 和分配器合作。为此,必须使用 Jemalloc 分配器。幸运的是,它是 Linux 上的默认分配器。

问题:假设您已经在使用 Jemalloc,有什么理由不总是设置activedefrag yes呢?

鉴于替代方案是重新启动实例来处理碎片(这是一个很大的问题),并且鉴于到目前为止我所看到的 activedefrag 的开销似乎相当低,该选项似乎太有用了,默认情况下无法禁用。

或者是否存在会损害性能的情况?

redis

0
推荐指数
1
解决办法
2515
查看次数