1.引言
Zuul的高可用非常关键,因为外部请求到后端微服务的流量都会经过Zuul。故而在生产环境中,我们一般都需要部署高可用的Zuul以避免单点故障。
两种场景讨论Zuul的高可用:
1.1.Zuul客户端也注册到了Eureka Server上
这种情况下,Zuul的高可用非常简单,只需将多个Zuul节点注册到Eureka Server上,就可实现Zuul的高可用。此时,Zuul的高可用与其他微服务的高可用没什么区别。
当Zuul客户端也注册到Eureka Server上时,只需部署多个Zuul节点即可实现其高可用。Zuul客户端会自动从Eureka Server中查询Zuul Server的列表,并使用Ribbon负载均衡地请求Zuul集群。
1.2.Zuul客户端未注册到Eureka Server上
现实中,这种场景往往更常见,例如,Zuul客户端是一个手机APP——我们不可能让所有的手机终端都注册到Eureka Server上。这种情况下,我们可借助一个额外的负载均衡器来实现Zuul的高可用,例如Nginx、HAProxy、F5等。
Zuul客户端将请求发送到负载均衡器,负载均衡器将请求转发到其代理的其中一个Zuul节点。这样,就可以实现Zuul的高可用。本文选择第二种高可用方式。
2.搭建步骤
2.1.整体架构
2.2.工程准备
准备2个ZUUL网关工程,或者启动两个网关实例方便测试
2.3.安装Ningx
此处省略Nginx的安装。Nginx可以安装Linux版本,或者安装Window学习用。
2.4.配置Nginx
Zuul网关集群使用Nginx反向代理即可,保证每台网关配置数据相同。
upstream backServer{
server 127.0.0.1:3333;
server 127.0.0.1:4444;
}
server {
listen 80;
server_name www.bruceliu.com;
location / {
### 指定上游服务器负载均衡服务器
proxy_pass http://backServer/;
index index.html index.htm;
}
}
配置域名映射hosts:
127.0.0.1 eureka7001.com
127.0.0.1 eureka7002.com
127.0.0.1 eureka7003.com
127.0.0.1 www.bruceliu.com
这是 把访问 http://www.bruceliu.com:80 的url 轮询方式导向 http://127.0.0.1:4444 和http://127.0.0.1:3333 而这两个网址就是spring zuul1 和zuul2 的服务网址端口
2.5.启动测试项目
2.6.启动测试项目
启动测试,访问 http://www.bruceliu.com/provider-consumer/test?access-token=bruce
会交替出现访问http://127.0.0.1:2222 和http://127.0.0.1:3333的效果
访问 zuul代理的 serviceA,只要zuul1,zuul2至少有一个服务开启,都能正常访问!
使用nginx的另外一个好处就是屏蔽了nuul内部服务的api显示,浏览器显示的都是nginx的url,在外面看到的好像是只有一个网站,而不是在一堆微服务中不断跳转。