背景:
公司测试环境的网关一直不能正常工作,每天都需要被前端催重启,测试催重启,移动端开发催重启,简直了。虽然只需要一行命令就可以重启完成,但是内心还是觉得无比烦闷。要不把网关部署为高可用的??
解决
这是一个不太大胆的想法,说搞就搞,把网关服务的代码部署到测试环境的另一台服务器上,然后让两个网关服务同时注册到两个Eureka。心里想到,Eureka 是互相注册,高可用的,现在两个网关注册到高可用的注册中心,理论上高可用的网关不就轻松实现了吗?
问题发现
在部署完成之后,简单的测试了一下,发现如果我杀一个网关进程,整个服务还是不能正常工作,意味着高可用全是骗人的。一波操作猛如虎,一看战绩0-5。
解决问题
既然我可以在Eureka的控制台看到两个网关的实例,但是还是不能实现高可用,说明,我一开始就错了。重新捋一捋网关这个东西。前端请求一个域名,然后网关吧这个链接转发到相应的服务器。问题应该就出在这个域名这里了,域名先被阿里云解析,然后转发到相应的服务器,然后在服务器上通过Nginx 转发到相应的端口,那么只要在nginx 那里做一个负载均衡就可以了。
upstream mygateway{
server 172.16.*.**:10200 weight=1;
server 172.16.*.**:10200 weight=1;
}
server {
listen 80;
server_name testapi.sayyoo.cn;
large_client_header_buffers 4 16k;
client_max_body_size 300m;
client_body_buffer_size 128k;
proxy_connect_timeout 600;
proxy_read_timeout 600;
proxy_send_timeout 600;
proxy_buffer_size 64k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://mygateway;
}
}
重启NGINX,然后杀掉其中一个网关服务,终于实现了网管的高可用。