springCloud搭建微服务集群+Zuul服务器端负载均衡
- 概述
最近研究了一下springCloud的微服务集群,主要用到了SpringCloud的服务发现和服务器端负载均衡,所有的项目都是用的springboot,
可以和springCloud无缝对接。 - 技术选型
服务发现:eureka
负载均衡:zuul - 实现
Eureka集群(eurekaServer):8001、8002、8003
服务提供方(eurekaClient):9001、9002
服务端负载均衡服务:91001、新建工程eureka服务器,用idea创建springboot项目,引入eureka依赖

下面是三台服务器的配置文件//第一台
server:
port: 8001 spring:
application:
name: eureka-server eureka:
server:
use-read-only-response-cache: false #禁用readOnlyMap,分为ReadWriteMap和ReadOnlyMap
eviction-interval-timer-in-ms: 3000 #主动失效检测时间
instance:
hostname: server8001
client:
# register-with-eureka: false #false表示不将自己也作为服务注册到eureka
# fetch-registry: false
service-url:
#集群设置,搭建eureka集群,用逗号分隔
defaultZone: http://localhost:8002/eureka/,http://localhost:8003/eureka/ //第二台
server:
port: 8002 spring:
application:
name: eureka-server eureka:
server:
use-read-only-response-cache: false
eviction-interval-timer-in-ms: 3000
instance:
hostname: server8002
client:
# register-with-eureka: false #表示不将自己作为服务注册进eureka
# fetch-registry: false
service-url:
#集群设置,搭建eureka集群,用逗号分隔,defaultZone是map类型,所以没有提示
defaultZone: http://localhost:8001/eureka/,http://localhost:8003/eureka/ //第三台
server:
port: 8003 spring:
application:
name: eureka-server eureka:
server:
use-read-only-response-cache: false
eviction-interval-timer-in-ms: 3000
instance:
hostname: server8003
client:
# register-with-eureka: false #表示不将自己作为服务注册进eureka
# fetch-registry: false
service-url:
#集群设置,搭建eureka集群,用逗号分隔,defaultZone是map类型,所以没有提示
defaultZone: http://localhost:8001/eureka/,http://localhost:8002/eureka/在入口处加上EnableEurekaServer注解

2、服务提供者
//第一台
server:
port: 9001 spring:
application:
name: eureka-client eureka:
client:
service-url:
# 指定集群服务器列表
defaultZone: http://localhost:8001/eureka/,http://localhost:8002/eureka/,http://localhost:8003/eureka/
instance:
instance-id: client9001.com
prefer-ip-address: true
lease-renewal-interval-in-seconds: 5 #发送心跳包服务刷新时间
lease-expiration-duration-in-seconds: 15 #服务过期时间 //第二台
server:
port: 9002
spring:
application:
name: eureka-client eureka:
client:
service-url:
# 指定集群服务器列表
defaultZone: http://localhost:8001/eureka/
instance:
instance-id: client9002.com
prefer-ip-address: true
lease-renewal-interval-in-seconds: 5 #发送心跳包服务刷新时间
lease-expiration-duration-in-seconds: 15 #服务过期时间添加EnableEurekaClient注解,并添加api业务测试接口

3、zuul负载均衡服务
server:
port: 9100 spring:
application:
name: zuul-gateway eureka:
client:
service-url:
defaultZone: http://localhost:8001/eureka,http://localhost:8002/eureka,http://localhost:8003/eureka
registry-fetch-interval-seconds: 5 #拉取服务列表时间
instance:
instance-id: gateway-9100.com
prefer-ip-address: true zuul:
prefix: /gateway
ignored-services: eureka-client
routes:
eureka-client.serviceId: eureka-client
eureka-client.path: /client/**依次启动Eureka服务器、服务提供者client,zull服务,访问其中一台Eureka服务器的控制台显示如下

问题:
1)、在配置eureka时,defaultZone是个map类型,不提供检测,所以会发现在配置时没有提示,直接写就行;
2)、eurekaServer的hostname起的作用暂不明确,在控制台显示的都是application的name,三台eureka集群和两台服务提供客户端的application.name分别是一样的;
3)、eureka服务器的服务清单分为ReadWriteMap和ReadOnlyMap,其他服务读取时是从ReadOnlyMap读取的,当有服务注册时,写入的是ReadWriteMap,然后会同步到
ReadOnlyMap,这是为了解决读写锁的问题。当一台服务提供应用宕机之后会发现控制台还是有这台服务器的信息,表示没有将服务下线,服务清单列表没有删除这台
服务器的信息,导致zuul在负载均衡时,有时会调用到宕机的那台应用导致返回异常,解决方法是禁用掉eureka服务器的ReadOnlyMap,设置主动失效检测时间,让服务器定时
去检测服务,服务提供者设置服务失效时间和发送心跳包的时间,zuul设置拉取服务清单的时间间隔
4)、zuul路由设置,设置路径前缀和服务的匹配关系 - 测试

不停刷新页面,会在9001和9002之间切换,证明配置成功,关闭9002应用,刷新页面,刚开始还会出现访问失败,过了一段时间后就稳定了,
会有一个时间差,也可以给zuul配置熔断器来进行服务降级或者转发请求到其他正常服务。
springCloud搭建微服务集群+Zuul服务器端负载均衡的更多相关文章
- Spring Cloud(Dalston.SR5)--Zuul 网关-微服务集群
通过 url 映射的方式来实现 zuul 的转发有局限性,比如每增加一个服务就需要配置一条内容,另外后端的服务如果是动态来提供,就不能采用这种方案来配置了.实际上在实现微服务架构时,服务名与服务实例地 ...
- Eclipse启动SpringCloud微服务集群的方法
1.说明 下面这篇文章介绍了Eureka Server集群的启动方法, SpringCloud创建Eureka模块集群 是通过jar包启动时指定配置文件的方式实现的. 现在只有Eureka Serve ...
- Spring Cloud Turbine微服务集群实时监控
本文代码下载地址: https://gitlab.com/mySpringCloud/turbine SpringBoot版本:1.5.9.RELEASE (稳定版) SpringCloud版本:Ed ...
- 一个C#开发者学习SpringCloud搭建微服务的心路历程
前言 Spring Cloud很火,很多文章都有介绍如何使用,但对于我这种初学者,我需要从创建项目开始学起,所以这些文章对于我的启蒙,帮助不大,所以只好自己写一篇文章,用于备忘. SpringClou ...
- Dubbo工作原理,集群容错,负载均衡
Remoting:网络通信框架,实现了sync-over-async和request-response消息机制. RPC:一个远程过程调用的抽象,支持负载均衡.容灾和集群功能. Registry:服务 ...
- 4.Dubbo2.5.3集群容错和负载均衡
转载请出自出处:http://www.cnblogs.com/hd3013779515/ 1.集群容错和负载均衡原理 各节点关系: 这里的Invoker是Provider的一个可调用Service的抽 ...
- Dubbo之旅--集群容错和负载均衡
当我们的系统中用到Dubbo的集群环境,由于各种原因在集群调用失败时,Dubbo提供了多种容错方案,缺省为failover重试. Dubbo的集群容错在这里想说说他是由于我们实际的项目中出现了此类的问 ...
- ASP.NET Core使用Docker-Swarm集群部署实现负载均衡实战演练
一.需求背景 人生苦短,我用.NET Core!阿笨对Docker是这样评价的:Docker在手,环境我有!Docker出手,集群我有!前面的Doc基础课程我们学习了如何使用Docker来部署搭建单机 ...
- Openfire 集群部署和负载均衡方案
Openfire 集群部署和负载均衡方案 一. 概述 Openfire是在即时通讯中广泛使用的XMPP协议通讯服务器,本方案采用Openfire的Hazelcast插件进行集群部署,采用Hapro ...
随机推荐
- [b0030] python 归纳 (十五)_多进程使用Pool
1 usePool.py #coding: utf-8 """ 学习进程池使用 multiprocessing.Pool 总结: 1. Pool 池用于处理 多进程,并不 ...
- 使用 shopfiy 模板语言,创建产品模板以搭配购物车实现一键购买
shopfiy 的 product 在添加产品时,如果要将产品详情页面与购物车关联,就是在详情页里面直接下单,而不是从详情页通过点击购买按钮,跳到 shopfy stroe ,再从这个位置再跳转到下单 ...
- lvm - Logical Volume Manager - 逻辑卷管理
下午突然感觉 lvm 相关的知识忘记了,恰好机房里的fedora服务器上 挂了4个500GB的HDD 硬盘没有使用,就拿来操作了一番: 下面有几篇关于lvm不错的文章,进行了链接,网上也有很多不错的博 ...
- layer重复弹出(layui弹层同时存在多个)的解决方法
layer.open() 同时存在多个;解决 layui 弹层 layer 同时存在多个页面层(iframe)的问题 这个问题其实是疏忽了一些 基础参数(仔细看文档,仔细看文档,仔细看文档) 一.ty ...
- Oracle存储过程(包:PACK_KPI_KERNEL For YS三度评价体系)
CREATE OR REPLACE PACKAGE PACK_KPI_KERNEL IS --定义多级数组 字符串 TYPE TSTRARRY ) INDEX BY BINARY_INTEGER; T ...
- jenkins添加TPS与服务器监控变化曲线图
第一步,首先在测试的脚本中添加你所需要查看的曲线图的监控路径 譬如我想查看TPS变化图 添加hps监控图 添加服务器监控图 把所有jtl文件保存到/opt/workspace/B_Stress_Tes ...
- Pwn-pwn-200
题目地址 ttp://www.whalectf.xin/files/47a658e388a0c505fc07b6ee48a4a2e2/binary_200 32位,开启了NX和Canary保护 存在字 ...
- luoguP3292 [SCOI2016]幸运数字(倍增做法)
题意 线性基套上树上倍增即可,注意边界. code: #include<bits/stdc++.h> using namespace std; typedef long long ll; ...
- Django 模版语言
传入变量 {{ 变量名 }} 在 view.py 的函数返回 render 时在html文件名后传入一个字典,字典的 key 对应html文件中的变量名,value 为传入的值 views.py: d ...
- FT_Get_Var error on comiling
[Julian@julian-linux-t450 gtk]$ gcc `pkg-config --cflags gtk+-.` -o exam00 exam00.c `pkg-config --li ...