Eureka Server高可用集群
Eureka Client会定时连接Eureka Server,获取服务注册表中的信息并缓存到本地,微服务在消费远程API的时候不用每次去Server端查询,而是使用本地缓存的数据,一般来讲即使Server宕机,也不会影响微服务之间的调用,但肯定会影响Client端服务的更新,所以生产环境中,高可用的Eureka Server是必不可少的。
Eureka Server可以通过运行多个实例并相互注册的方式来实现高可用。 Eureka Server实例会彼此增量的同步信息,确保所有节点数据一致。
集群环境下,需要保持默认值,即 true
2个Eureka Server节点高可用集群搭建步骤
1、新建子模块 microservice-discovery-eureka-ha
2、引入依赖
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
3、hosts配置
linux : /etc/hosts
windows : C:\Windows\System32\drivers\etc\hosts
4、application.yml注册两个Eureka Server
spring: # 注册到eureka上的微服务名称 application: name: discovery-eureka-ha spring: # 指定profiles为peer1 profiles: peer1 server: port: 8761 eureka: instance: # 当profiles为peer1,hostname是peer1 ,以jar包的形式启动的时候通过spring.profiles.active参数指定使用哪个配置文件启动 hostname: peer1 instance-id: ${spring.application.name}:${spring.application.instance_id:${server.port}} client: service-url: # 将自己注册到peer2这个Eureka上 defaultZone: http://peer2:8762/eureka spring: # 指定profiles为peer2,以jar包的形式启动的时候通过spring.profiles.active参数指定使用哪个配置文件启动 profiles: peer2 #端口 server: port: 8762 eureka: instance: hostname: peer2 instance-id: ${spring.application.name}:${spring.application.instance_id:${server.port}} client: service-url: #将注册到peer1的eureka defaultZone: http://peer1:8761/eureka/
application.yml中使用连字符 ---
将配置文件分为三段,第二段和第三段分别为spring. profiles指定了名称,该名称表示它所在的那段内容应该在哪个profile中。
启动测试
方法一: 在STS中配置Run Configurations
主类右键 Run As — Run Configurations --Spring Boot App
或者 打包成jar,运行jar
主类右键 Run As — Run Configurations – Maven Build ,通过maven clean package 组合命令,打成jar包
然后通过
java -jar microservice-discovery-eureka-ha-0.0.1-SNAPSHOT.jar --spring.profiles.active=peer1
java -jar microservice-discovery-eureka-ha-0.0.1-SNAPSHOT.jar --spring.profiles.active=peer2
通过spring.profiles.active指定使用哪个profile启动。
分别启动peer1 和 peer2 , 首先启动peer1会报错java.net.ConnectException: Connection refused: connect, 因为peer2 还未启动,等一会即可。
查看服务注册中心
3个Eureka Server节点高可用集群搭建步骤
Eureka Server不向ZK必须奇数个节点,便于选举。 Eureka Server对节点的个数只要2个以上即可
方式一
spring: # 注册到eureka上的微服务名称 application: name: microservice-discovery-eureka-ha-3nodes eureka: client: serviceUrl: defaultZone: http://peer1:8787/eureka/,http://peer2:8788/eureka/,http://peer3:8789/eureka/ --- spring: # 指定profiles为peer1 profiles: peer1 server: port: 8787 eureka: instance: # 当profiles为peer1,hostname是peer1 ,以jar包的形式启动的时候通过spring.profiles.active参数指定使用哪个配置文件启动 hostname: peer1 --- spring: # 指定profiles为peer2,以jar包的形式启动的时候通过spring.profiles.active参数指定使用哪个配置文件启动 profiles: peer2 # 端口 server: port: 8788 # Eureka eureka: instance: # 当profiles为peer2,hostname是peer2 hostname: peer2 --- spring: # 指定profiles为peer3,以jar包的形式启动的时候通过spring.profiles.active参数指定使用哪个配置文件启动 profiles: peer3 # 端口 server: port: 8789 # Eureka eureka: instance: # 当profiles为peer3,hostname是peer3 hostname: peer3
在公共的配置中指定defaultZone,配置三个 ,peer1 peer2 peer3中不相互注册
方式二
spring: # 注册到eureka上的微服务名称 application: name: microservice-discovery-eureka-ha-3nodes --- spring: # 指定profiles为peer1 profiles: peer1 server: port: 8787 eureka: instance: # 当profiles为peer1,hostname是peer1 ,以jar包的形式启动的时候通过spring.profiles.active参数指定使用哪个配置文件启动 hostname: peer1 prefer-ip-address: true instance-id: ${spring.application.name}:${spring.application.instance_id:${server.port}} client: serviceUrl: # 将自己注册到peer2这个Eureka上 defaultZone: http://peer2:8788/eureka/,http://peer3:8789/eureka/ --- spring: # 指定profiles为peer2,以jar包的形式启动的时候通过spring.profiles.active参数指定使用哪个配置文件启动 profiles: peer2 # 端口 server: port: 8788 # Eureka eureka: instance: # 当profiles为peer2,hostname是peer2 hostname: peer2 prefer-ip-address: true instance-id: ${spring.application.name}:${spring.application.instance_id:${server.port}} client: serviceUrl: # 将自己注册到peer1这个Eureka上 defaultZone: http://peer1:8787/eureka/,http://peer3:8789/eureka/ --- spring: # 指定profiles为peer3,以jar包的形式启动的时候通过spring.profiles.active参数指定使用哪个配置文件启动 profiles: peer3 # 端口 server: port: 8789 # Eureka eureka: instance: # 当profiles为peer3,hostname是peer3 hostname: peer3 prefer-ip-address: true instance-id: ${spring.application.name}:${spring.application.instance_id:${server.port}} client: serviceUrl: # 将自己注册到peer1这个Eureka上 defaultZone: http://peer1:8787/eureka/,http://peer2:8788/eureka/
不在公共的配置中指定defaultZone,在peer1 peer2 peer3中相互注册
将服务注册到Eureka Server集群上及服务调用
使用micorservice-provider-user作为演示,修改下defaultZone的地址
启动micorservice-provider-user,同时也修改下 消费者工程 micorservice-consumer-movie-fegin