python flask nginx keepalived 实现负载均衡

最近在部署一个flask服务,要了两台服务器尝试了一下负载均衡

环境:Centos,python3,flask,nginx,keepalived,

确保上述包安装成功

首先实现nginx的负载均衡140.143.66.123:90是我的主机,端口90是因为flask服务监听的是90端口,权重为2/3,意思是每三次请求有两次会发送到这台机器上。

listen   8000;是值nginx监听8000端口

location   下的proxy_pass  http://flask_server;是指定nginx将请求分发到的地址,之后重启nginx服务

service nginx stop

service nginx start

这是成功后的效果。红箭头请求服务器nginx监听的8000端口,黄箭头是处理请求的服务器地址,蓝箭头是发送请求的地址。

这时可以看到nginx会把请求分发到两台服务器做处理。

那接下来就会有一个问题,如果我主机挂了,那服务也将随之停止,备用机是无法提供服务的。为了解决这一问题我使用了keepalived实现主备模式。(两台服务器都需配置nginx,keepalived)

先解释一下keepalived设计思路。首先keepalived会将两台服务器区分主备,并且主备服务器都将提供一个或者几个相同的虚拟ip,这时用户访问地址会解析到主机的虚拟ip,请求也将到达主机的nginx上,nginx再把请求分发到不同的处理请求的服务器上。

主机正常工作时,备用机会持续监听主机“心跳”,一旦主机“心跳”停止,keepalived会将虚拟ip解析到备用机上,用户感受不到主机宕机,而备用机的nginx配置和主机相同,会继续分发请求。

下面是主机备机keepalived配置箭头注意主备不同的地方,etho网卡标识,用ifconfig查看

我们来看一下效果,当两台服务器keepalived都开启时。我们可以看到主机网卡绑定了设置的虚拟ip,而备用机还是自己的内网ip

当主机keepalived的“心跳”停止时。我们可以看到主机绑定恢复了自己内网ip,而备用机绑定到了虚拟ip。这就实现了主备模式。

ps:在配置keepalived过程中出现的问题,当两台服务器keepalived都正常时,主机备用机都绑定了虚拟ip。网上很多人说是防火墙的原因需要配置防火墙。我没有配置而是修改了默认的virtual_router_id。再重启keepalived,就正常了。

猜你喜欢

转载自blog.csdn.net/qq_37107304/article/details/84579570