微服务架构实战学习(七):Eureka 高可使用

作者 : 开心源码 本文共4918个字,预计阅读时间需要13分钟 发布时间: 2022-05-12 共212人阅读

上一篇最后提到我们的 Eureka Server 只有一个进程在运行,一旦发生不可意料的问题,进程中止,服务也就中止。

而 Eureka 的处理方案就是为 Eureka Server 构建一个集群,用多个服务来同时提供服务,这样可保证当某一个服务异常中止,不影响整个集群的正常用

一、集群规划

既然是集群,那么我们的服务至少也得是两个吧(不然你跟我说啥?)。此处,我们模拟一个 3 个节点的集群。其中三个服务各分布于三台不同的服务器上(三台 CentOS 6.x 虚拟机)。地址分别为:

192.168.174.200192.168.174.201192.168.174.202

我们计划分别在三台服务器上部署端口均为 8000 的三个服务。并且将 192.168.174.200 的 Eureka 注册到 192.168.174.201/202 中, 将 192.168.174.201 的 Eureka 注册到 192.168.174.200/202 中,将 192.168.174.202 的 Eureka 注册到 192.168.174.200/201 中。

这里我们能看出,Eureka Server 的高可使用方案是通过交叉注册的方式实现的。

Eureka Server 的高可使用方案简略图

二、项目配置

我们为三台服务器上运行的 Eureka Server 程序 (即前面创立的 eureka 的项目) 配置如下配置文件:

Eureka Server 配置文件

application-200.yml

spring:  application:    name: eureka  profiles:    active: 200server:  port: 8000eureka:  client:    service-url:      defaultZone: http://hadoop2:8000/eureka/,http://hadoop3:8000/eureka/    register-with-eureka: true    fetch-registry: true  instance:    hostname: hadoop1

application-201.yml

spring:  application:    name: eureka  profiles:    active: 201server:  port: 8000eureka:  client:    service-url:      defaultZone: http://hadoop1:8000/eureka/,http://hadoop3:8000/eureka/    register-with-eureka: true    fetch-registry: true  instance:    hostname: hadoop2

application-202.yml

spring:  application:    name: eureka  profiles:    active: 202server:  port: 8000eureka:  client:    service-url:      defaultZone: http://hadoop1:8000/eureka/,http://hadoop2:8000/eureka/    register-with-eureka: true    fetch-registry: true  instance:    hostname: hadoop3

注:

  • 确保集群中的所有服务中的 spring.application.name 或者者 eureka.instance.appname 的属性值相同
  • eureka.client.register-with-eureka 与 eureka.client.fetch-registry 均需要设置为 true,表示允许 eureka server 服务之间相互注册。
  • 设置 eureka.instance.hostname,eureka.client.defaultZone 中配置的注册地址别使用 IP 用 hostname。特别注意第三点,由于此问题非常有可可以出现 unavailable replicas (UI 后端显示我们的复本不可使用),假如你用的是 IP,则有可可以出现如下的问题(甚至你用 localhost 也不行):

    unavailable replicas

  • 上面的 hadoop1/hadoop2/hadoop3 分别对应于三台虚拟机 192.168.174.200/201/202。为了方便本机访问三台虚拟机,我在 C:\Windows\System32\drivers\etc\hosts 文件中配置了如下映射 (用管理员权限打开文件,在文件末尾增加如下信息就可)
192.168.174.200 hadoop1192.168.174.201 hadoop2192.168.174.202 hadoop3
  • hostname 只是我们为服务主机取的名字,至于取什么名字,根据自己情况来定。

三、部署过程

  • 用 Maven 编译打包 eureka 项目为 jar 文件,具体的打包方式请参考上一篇文章。在此不作赘述。
  • 将打包好的文件分别上传到服务器上的某一目录下(如 /data/eureka/),如不会上传文件的,请自行百度 ftp 上传文件到 Linux 服务器。
  • 在三台服务器上分别用如下的对应命令运行

hadoop1:

[root@hadoop1 eureka]# pwd/data/eureka[root@hadoop1 eureka]# lltotal 43744-rw-r--r--. 1 root root 44675073 Jun 23 08:30 eureka-0.0.1-SNAPSHOT.jar[root@hadoop1 eureka]# nohup java -jar eureka-0.0.1-SNAPSHOT.jar --spring.profiles.active=200 &

hadoop2:

[root@hadoop1 eureka]# pwd/data/eureka[root@hadoop1 eureka]# lltotal 43744-rw-r--r--. 1 root root 44675073 Jun 23 08:30 eureka-0.0.1-SNAPSHOT.jar[root@hadoop1 eureka]# nohup java -jar eureka-0.0.1-SNAPSHOT.jar --spring.profiles.active=201 &

hadoop3:

[root@hadoop1 eureka]# pwd/data/eureka[root@hadoop1 eureka]# lltotal 43744-rw-r--r--. 1 root root 44675073 Jun 23 08:30 eureka-0.0.1-SNAPSHOT.jar[root@hadoop1 eureka]# nohup java -jar eureka-0.0.1-SNAPSHOT.jar --spring.profiles.active=202 &

注:

  • 服务器上必需已经安装 jdk 并且配置好环境变量。
  • 假如有防火墙,请将服务的端口在防火墙配置规则中增加放行。

四、验证服务

  • 查看进程状态
[root@hadoop1 eureka]# ps -ef | grep eurekaroot      32687  15540  8 08:31 pts/0    00:01:14 java -jar eureka-0.0.1-SNAPSHOT.jar --spring.profiles.active=200root      34292  15540  0 08:45 pts/0    00:00:00 grep eureka
  • 查看启动日志
[root@hadoop1 eureka]# pwd/data/eureka[root@hadoop1 eureka]# tail -10f nohup.out  2018-06-23 08:37:56.307  INFO 32687 --- [a-EvictionTimer] c.n.e.registry.AbstractInstanceRegistry  : Running the evict task with compensationTime 4ms2018-06-23 08:38:56.306  INFO 32687 --- [a-EvictionTimer] c.n.e.registry.AbstractInstanceRegistry  : Running the evict task with compensationTime 0ms2018-06-23 08:39:56.308  INFO 32687 --- [a-EvictionTimer] c.n.e.registry.AbstractInstanceRegistry  : Running the evict task with compensationTime 2ms2018-06-23 08:40:56.309  INFO 32687 --- [a-EvictionTimer] c.n.e.registry.AbstractInstanceRegistry  : Running the evict task with compensationTime 0ms2018-06-23 08:41:23.383  INFO 32687 --- [trap-executor-0] c.n.d.s.r.aws.ConfigClusterResolver      : Resolving eureka endpoints via configuration2018-06-23 08:41:56.311  INFO 32687 --- [a-EvictionTimer] c.n.e.registry.AbstractInstanceRegistry  : Running the evict task with compensationTime 2ms2018-06-23 08:42:56.311  INFO 32687 --- [a-EvictionTimer] c.n.e.registry.AbstractInstanceRegistry  : Running the evict task with compensationTime 0ms2018-06-23 08:43:56.312  INFO 32687 --- [a-EvictionTimer] c.n.e.registry.AbstractInstanceRegistry  : Running the evict task with compensationTime 0ms2018-06-23 08:44:56.315  INFO 32687 --- [a-EvictionTimer] c.n.e.registry.AbstractInstanceRegistry  : Running the evict task with compensationTime 2ms2018-06-23 08:45:56.316  INFO 32687 --- [a-EvictionTimer] c.n.e.registry.AbstractInstanceRegistry  : Running the evict task with compensationTime 1ms2018-06-23 08:46:23.386  INFO 32687 --- [trap-executor-0] c.n.d.s.r.aws.ConfigClusterResolver      : Resolving eureka endpoints via configuration2018-06-23 08:46:24.796  INFO 32687 --- [hresholdUpdater] c.n.e.r.PeerAwareInstanceRegistryImpl    : Current renewal threshold is : 5
  • 查看 UI 后端

在浏览器中输入分别如下网址能查看各 Eureka Server 的服务情况

http://hadoop1:8000/http://hadoop2:8000/http://hadoop3:8000/

hadoop1 服务状态hadoop2 服务状态hadoop3 服务状态

至此,我们的 Eureka Server 的高可使用集群便搭建完成了,基本模拟了接近生产环境的搭建,只是配置文件以及部署及运行方式可可以与生产环境不同,后面我们会加入自动化部署以及容器技术来更方便的发布和管理我们的服务。

下一篇我们将关注如何将 Client 注册到集群中以及相关注意事项。

说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » 微服务架构实战学习(七):Eureka 高可使用

发表回复