架构
服务端配置
新增配置文件
application-8761.properties
server.port=8761
#与下面的服务地址的主机号没有关联
eureka.instance.hostname=Eureka8761
#是否注册到eureka
eureka.client.registerWithEureka=true
#是否从eureka中拉取注册信息
eureka.client.fetchRegistry=true
##暴露eureka服务的地址
eureka.client.serviceUrl.defaultZone=http://admin:admin@Eureka8762:8762/eureka/
#自我保护模式,当出现出现网络分区、eureka在短时间内丢失过多客户端时,会进入自我保护模式,即一个服务长时间没有发送心跳,eureka也不会将其删除,默认为true
eureka.server.enable-self-preservation=false
security.basic.enabled=true
spring.security.user.name=admin
spring.security.user.password=admin
application-8762.properties
server.port=8762
eureka.instance.hostname=Eureka8762
#是否注册到eureka
eureka.client.registerWithEureka=true
#是否从eureka中拉取注册信息
eureka.client.fetchRegistry=true
##暴露eureka服务的地址
eureka.client.serviceUrl.defaultZone=http://admin:admin@Eureka8761:8761/eureka/
#自我保护模式,当出现出现网络分区、eureka在短时间内丢失过多客户端时,会进入自我保护模式,即一个服务长时间没有发送心跳,eureka也不会将其删除,默认为true
eureka.server.enable-self-preservation=false
security.basic.enabled=true
spring.security.user.name=admin
spring.security.user.password=admin
这里面涉及到了 Eureka 用户认证,如果不需要认证可以去掉相关配置。
如果不熟悉服务端配置,可以先看看 Eureka 服务端配置。
系统文件配置
因为是在一台电脑上模拟2台服务器,所以要更改电脑的系统配置
进入文件夹 C:\Windows\System32\drivers\etc
更改 host 文件
添加行
127.0.0.1 localhost Eureka8761 Eureka8762
maven 打包
如果不会 maven 打包,可以参考 Maven 打包可执行 jar,各种报错怎么办?
启动 jar
在 jar 包位置下打开命令行
java -jar springcloud-eureka-1.0-SNAPSHOT.jar --spring.profiles.active=8761
同样的方法再打开一个
java -jar springcloud-eureka-1.0-SNAPSHOT.jar --spring.profiles.active=8762
查看结果
客户端配置
如果不熟悉基本的客户端配置,请看 Eureka 客户端配置
新增配置文件
bootstrap-cluster.properties
其它不变,只需改变
eureka.client.serviceUrl.defaultZone=http://admin:admin@Eureka8761:8761/eureka/,http://admin:admin@Eureka8762:8762/eureka/
maven 打包
启动 jar
java -jar micro-web-1.0-SNAPSHOT.jar --spring.profiles.active=cluster
查看结果
与 zookeeper 相比
建议先阅读文章 zookeeper 与分布式系统
CAP 理论指出,一个分布式系统不可能同时满足 Consistency (一致性)、Availability (可用性)和 Partition tolerance (分区容错性)。由于分区容错性在是分布式系统中必须要保证的,因此我们只能在一致性和可用性之间进行权衡。在此,zookeeper 保证的是 CP,而 eureka 则保证 AP。
zookeeper 保证一致性,放弃可用性
当 master 节点因为网络故障与其他节点失去联系时,剩余节点会重新进行 leader 选举。问题在于,选举 leader 的时间太长,30 ~ 120s, 且选举期间整个 zk 集群都是不可用的,这就导致在选举期间注册服务瘫痪。
zookeeper 由于 leader 选举的关系,至少 3 台机器才能做集群,且至少 2 台处于工作状态。
eureka 保证可用性,放弃一致性
eureka 服务器各个节点都是平等的,只要还有一个节点挂掉不会影响正常节点的工作。
eureka 2 台机器就可以做集群