最近在部署一个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,就正常了。
个人搭建的肿瘤社区http://www.h2cancer.com/希望能为肿瘤患者提供一个交流互助的平台