SpringCloud搭建Eureka高可用

川长思鸟来 2021-12-05 14:53 400阅读 0赞

高可用是CAP理论中的A,也就是集群部署,其中一个出故障了,另外一个还能接着使用,不影响用户访问。

这里简单介绍下CAP理论:

  1. C:数据一致性(Consistent),分布式系统中,当用户访问其中一个节点,提交某个数据到上面,那么该节点会把数据同步到其他的节点上,让各个节点达到数据一致。
  2. A:高可用(Availability),分布式系统中,当用户访问某个节点时,该节点挂掉了,会自动转到另一个节点,并不影响用户体验,让用户随时都能访问系统。
  3. P:分区容错(Partition tolerance),也就是网络分区,也就是分布式,你都是分布式项目了,肯定得有P啊,不然怎么叫分布式。

其中P一般是都必须满足的,C和A不能同时满足,因为在满足数据一致性时,需要进行数据同步,当数据同步时,各个节点之间会进行数据传输,然后节点之间就会锁住不让访问,当同步完成后才能访问,这样就违背了A(高可用)理论,反之亦然。所以一般要了CP,要么CA。

Eureka就是强调AP原则,和zookeeper不同,zookeeper强调的是CP原则。这都是根据业务需求来的,好比银行,就必须满足数据一致性,必须满足AP。

开始搭建:

首先在hosts文件中修改一下配置,让127.0.0.1转换成域名访问。

C:\Windows\System32\drivers\etc\hosts 目录下打开文件。

添加如下代码:127.0.0.1 pre1 pre2

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM5NjQ4MDI5_size_16_color_FFFFFF_t_70

导入依赖和启动类注解就不说了,看我另一篇文章,Eureka注册端的依赖:https://blog.csdn.net/qq_39648029/article/details/95312934

直接看application.yml

  1. server:
  2. port: 8890
  3. spring:
  4. application:
  5. name: eureka
  6. profiles:
  7. active: pre1
  8. #spring:
  9. # security:
  10. # basic:
  11. # enable: true
  12. # user:
  13. # name: admin
  14. # password: 1234
  15. # profiles: 127.0.0.1
  16. eureka:
  17. instance:
  18. hostname: pre1
  19. client:
  20. registerWithEureka: false
  21. fetchRegistry: false
  22. service-url:
  23. # defaultZone: http://${spring.security.user.name}:${spring.security.user.password}@${eureka.instance.hostname}:${server.port}/eureka/
  24. defaultZone: http://pre2:8891/eureka/

配置文件先是这样,启动项目。然后在换成下面这样,再次启动。(怎么启动2次项目看我上面那篇文章,里面讲的有)

  1. server:
  2. port: 8891
  3. spring:
  4. application:
  5. name: eureka
  6. profiles:
  7. active: pre2
  8. #spring:
  9. # security:
  10. # basic:
  11. # enable: true
  12. # user:
  13. # name: admin
  14. # password: 1234
  15. # profiles: 127.0.0.1
  16. eureka:
  17. instance:
  18. hostname: pre2
  19. client:
  20. registerWithEureka: false
  21. fetchRegistry: false
  22. service-url:
  23. # defaultZone: http://${spring.security.user.name}:${spring.security.user.password}@${eureka.instance.hostname}:${server.port}/eureka/
  24. defaultZone: http://pre1:8890/eureka/

代码的意思就是,启动两个Eureka,然后相互注册。。这样就是一个Eureka集群了,同样也可以多弄几个。

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM5NjQ4MDI5_size_16_color_FFFFFF_t_70 1 watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM5NjQ4MDI5_size_16_color_FFFFFF_t_70 2

然后启动一个客户端,用于注册到服务上:

代码如下,注册中心指向之前启动的2个Eureka服务。这样就完成了同时注册

  1. server:
  2. port: 8001
  3. spring:
  4. application:
  5. name: spring-cloud-common
  6. #注册中心指向start
  7. eureka:
  8. # instance:
  9. # instance-id: spring-cloud-common
  10. # appname: ${spring.application.name}
  11. client:
  12. service-url:
  13. # defaultZone: http://admin:1234@127.0.0.1:8890/eureka/,http://admin:1234@127.0.0.1:8891/eureka/
  14. defaultZone: http://pre1:8890/eureka/,http://pre2:8891/eureka/
  15. #注册中心指向end

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM5NjQ4MDI5_size_16_color_FFFFFF_t_70 3watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM5NjQ4MDI5_size_16_color_FFFFFF_t_70 4

注册成功。。这个时候关闭其中一个Eureka服务端,剩下那个也能继续访问。。这样就保证了Eureka的高可用,挂掉一个不影响其他的服务。

发表评论

表情:
评论列表 (有 0 条评论,400人围观)

还没有评论,来说两句吧...

相关阅读