1.说明

本文详细介绍Spring Cloud创建Eureka模块集群的方法,
基于已经创建好的Spring Cloud Eureka Server模块,
请参考SpringCloud创建Eureka模块,
通过配置文件启动多个Eureka Server模块,
演示Eureka Server集群的创建和使用方法,
包括2个Eureka Server服务作为集群,
以及1个Eureka Client服务作为客户端。

2.模块打包

使用如下Maven命令,打包Eureka Server模块:

mvn clean install -DskipTests

打包成功后,在模块target目录下,
可以找到jar包:
eureka-server-0.0.1-SNAPSHOT.jar
另外一个jar包没有用,不需要管:
eureka-server-0.0.1-SNAPSHOT.jar.original

3.配置文件

Eureka Server 1对应eureka-server-dev-1.yml:

server:
port: 7001
eureka:
instance:
hostname: eureka1
client:
register-with-eureka: false
fetch-registry: false
service-url:
defaultZone: http://eureka1:7001/eureka,http://eureka2:7002/eureka
server:
enable-self-preservation: false

Eureka Server 2对应eureka-server-dev-2.yml:

server:
port: 7002
eureka:
instance:
hostname: eureka2
client:
register-with-eureka: false
fetch-registry: false
service-url:
defaultZone: http://eureka1:7001/eureka,http://eureka2:7002/eureka
server:
enable-self-preservation: false

注意上面配置的eureka1,eureka2主机名,
不能和原来单机的时候相同,使用localhost了,
否则访问Eureka控制台页面的时候,
会无法看到集群中的其他Eureka Server。
另外eureka.client.service-url.defaultZone这个属性,
可以配置Eureka集群中所有可用的实例,
Eureka会自动排除掉与自身重复的实例:

http://eureka1:7001/eureka,http://eureka2:7002/eureka

4.配置主机名

在Windows一台主机上启动这两个服务,
需要修改C:\Windows\System32\drivers\etc\hosts,
增加对应的主机名:

127.0.0.1 eureka1
127.0.0.1 eureka2

这里为了演示,
在同一个主机上部署了两个Eureka Server,
eureka1和eureka2都对应本机的127.0.0.1,
所以他们的端口不能相同为7001、7002,
如果部署在不同的主机上面,
可以配置成同一个端口,
这样只需要主机名不同就行了。

5.启动Eureka集群

启动Eureka Server 1:

java -jar -Dspring.config.location=eureka-server-dev-1.yml eureka-server-0.0.1-SNAPSHOT.jar

启动Eureka Server 2:

java -jar -Dspring.config.location=eureka-server-dev-2.yml eureka-server-0.0.1-SNAPSHOT.jar

Eureka Server 1的启动日志,
可以看到启动时,找到了集群的备用节点eureka2,
同样Eureka Server 2的启动日志也是类似的:

.   ____          _            __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.3.1.RELEASE) 2020-09-22 17:51:43.902 INFO 16748 --- [ main] c.y.s.eureka.EurekaServerApplication : No active profile set, falling back to default profiles: default
2020-09-22 17:51:45.940 WARN 16748 --- [ main] o.s.boot.actuate.endpoint.EndpointId : Endpoint ID 'service-registry' contains invalid characters, please migrate to a valid format.
2020-09-22 17:51:46.124 INFO 16748 --- [ main] o.s.cloud.context.scope.GenericScope : BeanFactory id=c94dfcb8-a92b-3043-9fe7-9ab9d1567d69
2020-09-22 17:51:47.247 INFO 16748 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 7001 (http)
2020-09-22 17:51:47.262 INFO 16748 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
2020-09-22 17:51:47.262 INFO 16748 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.36]
2020-09-22 17:51:47.407 INFO 16748 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
2020-09-22 17:51:47.408 INFO 16748 --- [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 3470 ms
2020-09-22 17:51:47.506 WARN 16748 --- [ main] c.n.c.sources.URLConfigurationSource : No URLs will be polled as dynamic configuration sources.
2020-09-22 17:51:47.506 INFO 16748 --- [ main] c.n.c.sources.URLConfigurationSource : To enable URLs as dynamic configuration sources, define System property archaius.configurationSource.additionalUrls or make config.properties available on classpath.
2020-09-22 17:51:47.531 INFO 16748 --- [ main] c.netflix.config.DynamicPropertyFactory : DynamicPropertyFactory is initialized with configuration sources: com.netflix.config.ConcurrentCompositeConfiguration@5c80cf32
2020-09-22 17:51:48.152 INFO 16748 --- [ main] c.s.j.s.i.a.WebApplicationImpl : Initiating Jersey application, version 'Jersey: 1.19.1 03/11/2016 02:08 PM'
2020-09-22 17:51:48.295 INFO 16748 --- [ main] c.n.d.provider.DiscoveryJerseyProvider : Using JSON encoding codec LegacyJacksonJson
2020-09-22 17:51:48.297 INFO 16748 --- [ main] c.n.d.provider.DiscoveryJerseyProvider : Using JSON decoding codec LegacyJacksonJson
2020-09-22 17:51:48.561 INFO 16748 --- [ main] c.n.d.provider.DiscoveryJerseyProvider : Using XML encoding codec XStreamXml
2020-09-22 17:51:48.561 INFO 16748 --- [ main] c.n.d.provider.DiscoveryJerseyProvider : Using XML decoding codec XStreamXml
2020-09-22 17:51:49.245 WARN 16748 --- [ main] o.s.c.n.a.ArchaiusAutoConfiguration : No spring.application.name found, defaulting to 'application'
2020-09-22 17:51:49.246 WARN 16748 --- [ main] c.n.c.sources.URLConfigurationSource : No URLs will be polled as dynamic configuration sources.
2020-09-22 17:51:49.246 INFO 16748 --- [ main] c.n.c.sources.URLConfigurationSource : To enable URLs as dynamic configuration sources, define System property archaius.configurationSource.additionalUrls or make config.properties available on classpath.
2020-09-22 17:51:49.699 INFO 16748 --- [ main] o.s.s.concurrent.ThreadPoolTaskExecutor : Initializing ExecutorService 'applicationTaskExecutor'
2020-09-22 17:51:51.647 WARN 16748 --- [ main] ockingLoadBalancerClientRibbonWarnLogger : You already have RibbonLoadBalancerClient on your classpath. It will be used by default. As Spring Cloud Ribbon is in maintenance mode. We recommend switching to BlockingLoadBalancerClient instead. In order to use it, set the value of `spring.cloud.loadbalancer.ribbon.enabled` to `false` or remove spring-cloud-starter-netflix-ribbon from your project.
2020-09-22 17:51:51.694 INFO 16748 --- [ main] o.s.c.n.eureka.InstanceInfoFactory : Setting initial instance status as: STARTING
2020-09-22 17:51:51.730 INFO 16748 --- [ main] com.netflix.discovery.DiscoveryClient : Initializing Eureka in region us-east-1
2020-09-22 17:51:51.730 INFO 16748 --- [ main] com.netflix.discovery.DiscoveryClient : Client configured to neither register nor query for data.
2020-09-22 17:51:51.740 INFO 16748 --- [ main] com.netflix.discovery.DiscoveryClient : Discovery Client initialized at timestamp 1600768311739 with initial instances count: 0
2020-09-22 17:51:51.791 INFO 16748 --- [ main] c.n.eureka.DefaultEurekaServerContext : Initializing ...
2020-09-22 17:51:51.793 INFO 16748 --- [ main] c.n.eureka.cluster.PeerEurekaNodes : Adding new peer nodes [http://eureka2:7002/eureka/]
2020-09-22 17:51:52.373 INFO 16748 --- [ main] c.n.d.provider.DiscoveryJerseyProvider : Using JSON encoding codec LegacyJacksonJson
2020-09-22 17:51:52.373 INFO 16748 --- [ main] c.n.d.provider.DiscoveryJerseyProvider : Using JSON decoding codec LegacyJacksonJson
2020-09-22 17:51:52.373 INFO 16748 --- [ main] c.n.d.provider.DiscoveryJerseyProvider : Using XML encoding codec XStreamXml
2020-09-22 17:51:52.373 INFO 16748 --- [ main] c.n.d.provider.DiscoveryJerseyProvider : Using XML decoding codec XStreamXml
2020-09-22 17:51:52.477 INFO 16748 --- [ main] c.n.eureka.cluster.PeerEurekaNodes : Replica node URL: http://eureka2:7002/eureka/
2020-09-22 17:51:52.484 INFO 16748 --- [ main] c.n.e.registry.AbstractInstanceRegistry : Finished initializing remote region registries. All known remote regions: []
2020-09-22 17:51:52.484 INFO 16748 --- [ main] c.n.eureka.DefaultEurekaServerContext : Initialized
2020-09-22 17:51:52.493 INFO 16748 --- [ main] o.s.b.a.e.web.EndpointLinksResolver : Exposing 2 endpoint(s) beneath base path '/actuator'
2020-09-22 17:51:52.514 INFO 16748 --- [ main] o.s.c.n.e.s.EurekaServiceRegistry : Registering application UNKNOWN with eureka with status UP
2020-09-22 17:51:52.516 INFO 16748 --- [ Thread-383] o.s.c.n.e.server.EurekaServerBootstrap : Setting the eureka configuration..
2020-09-22 17:51:52.516 INFO 16748 --- [ Thread-383] o.s.c.n.e.server.EurekaServerBootstrap : Eureka data center value eureka.datacenter is not set, defaulting to default
2020-09-22 17:51:52.517 INFO 16748 --- [ Thread-383] o.s.c.n.e.server.EurekaServerBootstrap : Eureka environment value eureka.environment is not set, defaulting to test
2020-09-22 17:51:52.538 INFO 16748 --- [ Thread-383] o.s.c.n.e.server.EurekaServerBootstrap : isAws returned false
2020-09-22 17:51:52.539 INFO 16748 --- [ Thread-383] o.s.c.n.e.server.EurekaServerBootstrap : Initialized server context
2020-09-22 17:51:52.539 INFO 16748 --- [ Thread-383] c.n.e.r.PeerAwareInstanceRegistryImpl : Got 1 instances from neighboring DS node
2020-09-22 17:51:52.539 INFO 16748 --- [ Thread-383] c.n.e.r.PeerAwareInstanceRegistryImpl : Renew threshold is: 1
2020-09-22 17:51:52.539 INFO 16748 --- [ Thread-383] c.n.e.r.PeerAwareInstanceRegistryImpl : Changing status to UP
2020-09-22 17:51:52.549 INFO 16748 --- [ Thread-383] e.s.EurekaServerInitializerConfiguration : Started Eureka Server
2020-09-22 17:51:52.576 INFO 16748 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 7001 (http) with context path ''
2020-09-22 17:51:52.576 INFO 16748 --- [ main] .s.c.n.e.s.EurekaAutoServiceRegistration : Updating port to 7001
2020-09-22 17:51:53.160 INFO 16748 --- [ main] c.y.s.eureka.EurekaServerApplication : Started EurekaServerApplication in 11.497 seconds (JVM running for 12.053)

6.查看Eureka服务

访问http://eureka1:7001/

访问http://eureka2:7002/

可以从上面看出集群信息,
Eureka Server 1对应的DS Replicas是eureka2;
Eureka Server 2对应的DS Replicas是eureka1。

7.配置Eureka Client

Eureka Client访问Eureka Sever集群配置:

eureka:
instance:
hostname: localhost
prefer-ip-address: true
client:
service-url:
register-with-eureka: true
fetch-registry: true
defaultZone: http://eureka1:7001/eureka,http://eureka2:7002/eureka

只需要指定eureka.client.service-url.defaultZone这个属性,
为所有Eureka Server集群信息即可,
区别在于单机的时候配置一个Eureka Server即可。

8.参考文章

Eureka集群搭建
SpringCloud服务注册中心双节点集群(Eureka集群)

SpringCloud创建Eureka模块集群的更多相关文章

  1. SpringCloud创建Eureka模块

    1.说明 本文详细介绍Spring Cloud创建Eureka模块的方法, 基于已经创建好的Spring Cloud父工程, 请参考SpringCloud创建项目父工程, 在里面创建Eureka模块, ...

  2. springcloud(四)-Eureka Server集群

    Eureka Server的高可用 这一节我们接着上一节说. 有分布式应用开发经验的朋友应该发现,前文编写的单节点Eureka Server并不适合线上生产环境.Eureka Client会定时连接E ...

  3. SpringCloud之Eureka:集群搭建

    上篇文章<SpringCloud之Eureka:服务发布与调用例子>实现了一个简单例子,这次对其进行改造,运行两个服务器实例.两个服务提供者实例,服务调用者请求服务,使其可以进行集群部署. ...

  4. SpringCloud创建Config模块

    1.说明 本文详细介绍Spring Cloud创建Config模块的方法, 基于已经创建好的Spring Cloud父工程, 请参考SpringCloud创建项目父工程, 创建Config模块这个子工 ...

  5. SpringCloud创建Gateway模块

    1.说明 本文详细介绍Spring Cloud创建Gateway模块的方法, 基于已经创建好的Spring Cloud父工程, 请参考SpringCloud创建项目父工程, 和已经创建好的Eureka ...

  6. SpringCloud的入门学习之Netflix-eureka(Eureka的集群版搭建)

    1.Eureka单机版的话,可能会出现单点故障,所以要保障Eureka的高可用,那么可以进行搭建Eureka的集群版. 高可用的Eureka的注册中心,将注册中心服务部署到多台物理节点上,形成一个集群 ...

  7. SpringCloud升级之路2020.0.x版-20. 启动一个 Eureka Server 集群

    本系列代码地址:https://github.com/HashZhang/spring-cloud-scaffold/tree/master/spring-cloud-iiford 我们的业务集群结构 ...

  8. SpringCloud系列四:实现Eureka Server的高可用并将应用注册到Eureka Sever集群上

    1. 回顾 上一篇博客中,实现了单节点的Eureka Server.Eureka Client会定时连接Eureka Server,获取注册表中的信息并缓存到本地.微服务在消费远程API时总是使用本地 ...

  9. Spring Cloud Eureka的集群配置(六)

    1.再次创建2个Eureka工程 工程名:microservicecloud-eureka-7002 工程名:microservicecloud-eureka-7003 2.pom.xml文件 < ...

随机推荐

  1. 颜色RGB值对照表

    转载自 http://www.91dota.com/?p=49# 常用颜色的RGB值及中英文名称   颜  色    RGB值 英文名 中文名   #FFB6C1 LightPink 浅粉红   #F ...

  2. Output of C++ Program | Set 14

    Predict the output of following C++ program. Difficulty Level: Rookie Question 1 1 #include <iost ...

  3. PhoneGap打包webApp

    因为我只弄了Andriod的环境,所以在此只以Andriod为例. 使用PhoneGap搭建Android开发的项目整体步骤如下: 安装java环境. 安装ant构建工具. 安装android的开发环 ...

  4. 动态规划系列(零)—— 动态规划(Dynamic Programming)总结

    动态规划三要素:重叠⼦问题.最优⼦结构.状态转移⽅程. 动态规划的三个需要明确的点就是「状态」「选择」和「base case」,对应着回溯算法中走过的「路径」,当前的「选择列表」和「结束条件」. 某种 ...

  5. 【Matlab】xticks/xticklabels的用法

    先说一下我自己的理解,这东西就是把原来的有的标签位置换成自己的标签名称,一般都是要手动设置看物理意义. https://ww2.mathworks.cn/help/matlab/ref/xticks. ...

  6. 索引以及Mysql中的索引

    一.什么是索引 索引是表的目录,会保存在额外的文件中,针对表中的指定列建立,专门用于帮助用户快速查询数据的一种数据结构.类似于字典中的目录,查找字典内容时可以根据目录查找到数据的存放位置,然后直接获取 ...

  7. js--生成器总结

    前言 生成器gengrator是es6 新增的函数功能,它允许你定义一个包含自有迭代算法的函数, 同时它可以自动维护自己的状态. 本文来总结一下JavaScript 中生成器的相关知识点. 正文 1. ...

  8. Log4j2 Jndi 漏洞原理解析、复盘

    " 2021-12-10一个值得所有研发纪念的日子." 一波操作猛如虎,下班到了凌晨2点25. 基础组件的重要性,在此次的Log4j2漏洞上反应的淋漓尽致,各种"核弹级漏 ...

  9. Mysql资料 视图

    目录 一.简介 二.例子 三.好处 四.工作机制 一.简介 视图是数据库中的一个虚拟的表是一个虚拟表,其内容由查询定义.同真实的表一样,视图包含一系列带有名称的列和行数据. 但是,视图并不在数据库中以 ...

  10. Nginx配置重定向

    目录 一.简介 二.配置 访问a页面重定向到b页面 访问当前nginx,重定向到其他网址 一.简介 据相关变量重定向和选择不同的配置,从一个 location 跳转到另一个 location,不过这样 ...