背景:

公司测试环境的网关一直不能正常工作,每天都需要被前端催重启,测试催重启,移动端开发催重启,简直了。虽然只需要一行命令就可以重启完成,但是内心还是觉得无比烦闷。要不把网关部署为高可用的??

解决

这是一个不太大胆的想法,说搞就搞,把网关服务的代码部署到测试环境的另一台服务器上,然后让两个网关服务同时注册到两个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,然后杀掉其中一个网关服务,终于实现了网管的高可用。

参考

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐