本篇紧接着上一篇, 在搭好了我们微服务整体体系的情况下, 将Eureka增加为集群的工作模式, 以及加入Ribbon的客户端负载均衡配置以及进行自定义负载均衡策略的操作.
回顾上篇我们是如何搭建微服务架构的
:SpringCloud之Eureka初接触
为何需要配置Eureka集群,这里有我们需要掌握的一些知识点:
首先要了解CAP原则,即: 强一致性 可用性 分区容错性
我们之前聊过Zookeeper,这是一种专注AP(强一致性和分区容错性)服务治理与发现工具,而Eureka则是一种专注于CP(可用性和分区容错性)的工具,简单的说就是,Zookeeper在主从模式中, 主机一旦宕机, 整个服务都会拉胯, 需要类似Redis集群的哨兵模式去选择新主机, 这会导致一段时间的服务不可用, 能够明显的发现Zookeeper没有达到高可用的需求, 而Eureka可以很好地应对因为网络故障而导致失去部分节点的情况,保证了服务的高可用.
ok,在对Eureka有了一定了解之后, 开始搭建我们的 Eureka集群, 集群顾名思义, 是一堆Eureka服务的意思,因此,我们再额外增加两个Eureka服务, 简单的复制出两份新的Eureka服务,
三个Eureka服务端口号分别是:7001,7002,7003
导入和7001端口的Eureka服务一样的pom依赖
在修改各自yml文件前,我们先修改一下本机127.0.0.1 ip配置 以便接下来更简单的编写我们需要的配置,在这个目录下的hosts文件
增加
紧接着 继续修改新创建的两个Eureka的yml文件
server:
port: 7001
#eureka配置
eureka:
instance:
hostname: eureka7001.com #eureka服务端的实例名字
client:
register-with-eureka: false #表示是否向eureka中心注册自己 服务器自己不用注册
fetch-registry: false #false 表示自己为注册中心
service-url: #监控页面
#单机的情况下是这样子的 defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
#集群(配置多个关联) 在7001中挂在7002 7003
defaultZone: http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/
以7001的Eureka配置文件为例, 我们要让7001的defaultZone持有7002和7003的url, 7002和7003一样, 都配置自己缺少的url
ok 启动三个Eureka服务,查看是否成为了一个集群.
可以看到三个Eureka服务相互都有各自的DS 副本,说明集群创建好了
接下来我们配置负载均衡,首先了解一下Ribbon, 这是一款为客户端提供负载均衡的工具, 消费者就是我们的客户端, 所以说要在消费者微服务上去配置Ribbon的相关内容, 它主要为客户提供一些常见的负载均衡算法, 比如轮询, hash, 随机等loadBalanced算法.
那么, 什么是负载均衡呢? 负载均衡简单地说就是: 将用户的请求通过均摊的方式发到各个服务器上,从而达到高可用的目的. 常见的还有像Nginx和lvs, 我们的SpringCloud的支持负载均衡策略的自定义.
ok, 此时我们用ribbon来实现微服务的负载均衡, 因为上篇, 我们只有一个服务提供者, 消费者选来选去也就只有一个提供者可以使用, 体现不了负载均衡的特点, 也没有体现微服务的各个服务都对应各自的数据库,因此,我们还需要增加服务提供者的数量,并且建立其各自的数据库.
我们再创建两个新的数据库db02, db03
表的内容和db01一样,只不过Database我们让其各自都选为各自的db,方便我们分辨是由那个提供者提供的服务
ok 创建好了新的数据库之后,我们创建和提供者1一样的服务各两个
记得更改各自的端口号和数据库名等一些配置信息即可
#eureka的配置 服务注册到哪里? 配一个地址就好了
eureka:
client:
service-url:
defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/
instance: #改eureka 服务的默认描述
instance-id: springcloud-provider-dept8001
这里的defaultZone也要配置成三个Eureka的地址,能够都注册进去,
ok 这时我们启动三个Eureka集群,三个提供者,进入治理页面查看情况
可以看到三个提供者都被注册了进来
这里没问题了之后就可以为我们的消费者配置ribbon负载均衡功能了
<!-- ribbon-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-ribbon</artifactId>
<version>1.4.6.RELEASE</version>
</dependency>
<!-- 需要eureka-->
<dependency>