部署 Rails 部署负载均衡代理

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

最近想在我公司两个数据中心做一套 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 回复

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

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