先简单描述一下试验:
试验在一台机器上进行,假设有host文件中配置了以下内容
127.0.0.1 left 127.0.0.1 center 127.0.0.1 right
试验中搭建三个注册中心实例分别命名为left(1111端口)、center(1110端口)、right(1112端口),构成集群,他们的 spring.application.name均为eureka-server,但是端口不同。
为了方便说明,再定义个名词:“注册到”
假如本文提及A注册到了B,那就是在说服务A的eureka.client.service-url.defaultZone里写上了注册中心B的地址。
试验也证明了一旦某个服务A注册到了某个注册中心B,那么A会把自己的相关信息报给B。
试验得到的结论:
1、任意两个节点A和B想要构成真正的集群,必须互相注册对方的主机名(或者ip)地址,即A注册到了B,且B也同时注册到了A。
2、使用ip注册会在eureka管理页面上显示 unavailable-replicas,但这并不妨碍使用,属于误报
3、如果left注册到了center,而center 没有注册到left,那么注册到left的服务,会同步到center上,而注册到center的服务不会同步到left上。
4、想在eureka的管理页面上不显示 unavailable-replicas,则注册中心的地址必须使用主机名而非ip地址,即hosts文件中配置的left、center、right之类。
5、服务的信息的同步不会链式传递,只能同步一个节点。即:如果left注册到了center,center注册到了right,那么如果某个服务A只注册到了left上,left会同步A服务的信息给center,但是center不会同步给right
6、一个服务无法同时注册到多个未做集群的注册中心上的
7、如果【eureka.client.service-url.defaultZone】中的地址直接用的IP,那么一定不要配【eureka.instance.prefer-ip-address=true】,不然你的Eureka集群将无法正常工作。
8、第七条主要时因为在多网卡环境中eureka无法正确的选择网络环境(网卡),在使用docker之后才发现。
#在docker中运行的时候,为了控制网络环境,除了使用host外还需要指定网络,可以通过忽略网卡或者选择网段的方式进行
#忽略网卡spring.cloud.inetutils.ignored-interfaces[0]=eth0 # 正则表达式
#选择网络spring.cloud.inetutils.preferredNetworks[0]=^192.168
测试使用的版本:Dalston.SR1