部署 Rails 部署负载均衡代理

topswim · 2018年01月09日 · 最后由 pynix 回复于 2018年01月10日 · 2659 次阅读

最近想在我公司两个数据中心做一套 rails 应用的负载均衡,一说到软件负载均衡肯定想到的是 Nginx,所以在网上找到了很多关于 rails + passenger +Nginx 的部署。根据网上教程我在测试环境也完成部署并且可以使用。但是我发现这种部署和我想象不一样,这样部署 Nginx 和 rails 应用好像必须在一个主机上,访问关系是 nginx ->passwenger->rails。 我的问题是: 1.为什么 Nginx 不能直接负责均衡 rails 请求。 2.因为我公司之前的有用 F5,为什么不能像用 F5 一样,单独安装一台 Nginx 服务器,然后在装一台 rails 服务器,rails 服务器上可以启 N 个端口,然后用 Nginx 服务去负责请求到 rails. 3.如果我现在要实现问题 2 中的功能(一台负载均衡服务器两台应用服务器,Nginx 负载两台应用服务器的服务)。

1 能

所以没有 2,3 的问题

不太明白你说的意思。但是你的场景应该是前面一台 Nginx 做 LB, 后面两台 rails。 一般的处理印象中是 nginx 配置好 LB 规则,然后绑定两台 rails 的内网 ip:port 就完了,rails 端起好 puma。这个结构并不是一个复杂的东西。

可以啊,用 puma 或者 unicorn。passenger 的特点是作为 nginx 的模块编译,要想均衡负载可以在前面加。

对 Rei 回复

你的意思是 Nginx+ passenger 后再在前面加一个 Nginx?也可以?

对 topswim 回复

可以。

Nginx 是 7 层负载均衡,F5 是 4 层负载均衡。正常的使用场景是 4 层负载均衡挡在 7 层前面,也就是又多了一层负载均衡。

F5 的投入很高,所以使用 Nginx 可以撑的住的话,没有必要使用 F5(壕除外)。当然如果你想和之前使用 F5 时一样的架构,可以考虑部署 F5 的开源替代 LVS。

FYI

为什么总有人折腾 passenger 这个“毒瘤”,ruby 和 rails 的 io 模型就那样,再牛逼的 server 也不会带来数量级的并发提升。 现在比较容易部署的方式是。

nginx

|-------------> puma app1web1

|-------------> puma app1web2

|-------------> puma app2

|-------------> puma app3

nginx 作为 "router",把流量代理到跑在 docker 里的 app。

对 pynix 回复

好好的 passenger 居然被你称为毒瘤,部署太方便了,省很多事情。

对 nouse 回复

你搜一下论坛就知道了,passenger 报错堆。。。。吓死你。。。。

对 pynix 回复

我们有 7、8 个项目都用 passenger,访问量合起来每天一千万,按你这么说我早就应该吓死了

对 nouse 回复

me too,顶 passenger

对 nouse 回复

好吧,能折腾就好。。。。。我是比较懒。。。。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号