1. 共有三个服务 discovery服务,domain服务,gateway服务。前端
discovery服务是用来注册其余服务的,做为服务治理用。nginx
domain服务是主业务服务。服务器
gateway服务是全部服务的一个入口,用来作一些服务的判断和过滤用。app
2. 有三台机器分别为192.168.1.1,192.168.1.2,192.168.1.3运维
3. 三台服务器上分别部署各个服务。dom
4. domain服务的须要注册到每一个disscover服务上。curl
8002 是 discover服务的端口。fetch
client:
registerWithEureka: true
fetchRegistry: true
serviceUrl:
defaultZone: http://192.168.1.1:8002/lcs-discover/eureka/,http://192.168.1.2:8002/lcs-discover/eureka/,http://192.168.1.3:8002/lcs-discover/eureka/
5. 前端访问用nginx,配置以下:url
这段在server外面code
upstream gateway {
server 192.168.1.1:8001;
server 192.168.1.2:8001;
server 192.168.1.3:8001;
}
这段在server里面
location /lcs-gateway {
proxy_pass http://gateway;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 1;
proxy_read_timeout 1;
proxy_send_timeout 1;
}
6. 前端请求说明:
http://localhost:8090/lcs-gateway
7. 实现说明:
当前端请求到8090 端口下面的lcs-gateway的时候,gateway拦截住并作了一个转发,转发的时候负载到不一样的服务器(轮询机制)。
当一台gateway接收到请求后,去找对应的服务发现eureka,全部的服务都注册在discover上面了,discover会随机找一个domain服务提供方法。
当一个服务的domain挂掉后,discover会找其余的domain顶替,这个是discover的选举原理。
当一台服务器的gateway挂掉后,在nginx 请求转发的时候作了一个链接超时的判断,若是1s内不通,他会自动链接另外的服务器。
8. 问题汇总
1. 当把一个节点的服务kill掉,必定记得要给discover发消息通知。消息接口
http://localhost:8002/lcs-discover/eureka/apps/appID/instanceID delete 请求
能够经过http://localhost:8002/lcs-discover/eureka/apps 这个查询当前discover 下面有哪些服务。
2. 发布说明
在高可用的系统部署中,发布很重要,由于发布的时候要考虑这个节点下面的服务是否正在使用。
因此有三种发布方案:灰度发布,轮询发布,平滑发布,具体发布细节,后面实战了补上。
9. 在多个节点发布说明
当业务量特别大的时候,发布服务须要不影响业务的状况下进行发布。怎么能作到不影响业务呢,当经过discover的时候,你能够看到当前有哪些服务注册到这个节点上了,而后用命令
curl -X PUT -i http://10.118.218.151:8002/lcs-discover/eureka/apps/DATAIMP-SERVICE/LCS218151:dataimp-service:8005/status?value=OUT_OF_SERVICE
DATAIMP-SERVICE 这个为服务名称
LCS218151:dataimp-service:8005 这个为discover中看到的服务节点名称
当执行完这个命令以后,在discover 中看到的服务状态为 out_of_service这个红色的显示。
这样当前端访问到网关的时候,网关就不会给这个服务上发送请求了。
而后运维就能够在这个服务上进行换包,上线等操做,当上线完成后,重启服务,discover自动会发送心跳给每一个服务,检查服务状态,若是服务状态正常就能够正常使用了。