sringcloud2.0学习-5-Eureka高可用集群

Eureka高可用集群

1.注册中心的重要性

在微服务中,注册中心非常核心,可以实现服务治理,如果一旦注册出现故障的时候,可能会导致整个微服务无法访问,在这时候就需要对注册中心实现高可用集群模式。

2. Eureka高可用原理

默认情况下Eureka是让服务注册中心,不注册自己,配置如下:

###因为该应用为注册中心,不会注册自己
    register-with-eureka: true
###不需要去注册中心上检索服务
    fetch-registry: true

Eureka高可用实际上将服务中心将自己作为服务向其他服务注册中心注册,这样就可以形成一组相互注册的服务注册中心,从而实现服务列表的互相同步,达到高可用效果。

3.Eureka集群环境搭建

3.1 以双注册中心为例(多注册中心的搭建与双注册中心的原理相同),新建一个注册中心项目springcloud2.0-eureka-server2

sringcloud2.0学习-5-Eureka高可用集群_第1张图片

  • pom依赖
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0modelVersion>
  <groupId>com.lchtestgroupId>
  <artifactId>springcloud2.0-eureka-server2artifactId>
  <version>0.0.1-SNAPSHOTversion>
   <parent>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starter-parentartifactId>
        <version>2.0.3.RELEASEversion>
    parent>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloudgroupId>
                <artifactId>spring-cloud-dependenciesartifactId>
                <version>Finchley.RELEASEversion>
                <type>pomtype>
                <scope>importscope>
            dependency>
        dependencies>
    dependencyManagement>

    <dependencies>
        <dependency>
            <groupId>org.springframework.cloudgroupId>
            <artifactId>spring-cloud-starter-netflix-eureka-serverartifactId>
        dependency>
    dependencies>
project>
  • 配置文件

搭建eureka集群,需要定义集群服务名称,各节点的名称定义要一致
搭建eureka集群,需要将注册中心自己注册到其他的注册中心 ,因此
eureka.client.register-with-eureka和 eureka.client.fetch-registry的值都改为true,把自己注册到注册中心,并从注册中心获取服务列表

server:
  port: 9100
# 定义eureka集群时,需要定义集群服务名称,各节点的名称定义要一致
spring:
  application:
    name: app-eureka-cluster
eureka:
  instance:
  #注册中心ip地址
    hostname: 127.0.0.1
    #注册到服务注册中心的实例显示的是ip
   # prefer-ip-address: true
  client:
    service-url:
      # server9100注册到8100上 
      defaultZone: http://127.0.0.1:8100/eureka
    # 搭建eureka集群时,需要将自己注册到注册中心 
    register-with-eureka: true
    fetch-registry: true
    
  • 启动类
package com.lchtest.springcloud;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

/**
 * eureka集群搭建
 * springcloud eureka注册中心2
 */
@SpringBootApplication
// @EnableEureakServer表示开启注册中心
@EnableEurekaServer
public class AppEureka9100 {
	
	public static void main(String[] args) {
		SpringApplication.run(AppEureka9100.class, args);
	}
}

3.2 修改原来注册中心springcloud2.0-eureka-server的配置文件
# 注册中心端口号
server:
  port: 8100
eureka:
  instance:
    hostname: 127.0.0.1
        #注册到服务注册中心的实例显示的是ip
   # prefer-ip-address: true
  client:
    service-url:
      # 8100注册到9100上
      defaultZone: http://127.0.0.1:9100/eureka
    # 搭建注册中心集群时,需要将自己注册到注册中心去,设置为true
    register-with-eureka: true
    fetch-registry: true
# 定义eureka集群时,需要定义集群服务名称,各节点的名称定义要一致,单个注册中心可以不定义
spring:
  application:
    name: app-eureka-cluster

先后启动两个注册中心实例,可以看到已经相互注册成功!
sringcloud2.0学习-5-Eureka高可用集群_第2张图片
sringcloud2.0学习-5-Eureka高可用集群_第3张图片

4.客户端调用Eureka集群

修改springcloud2.0-order 和springcloud2.0-member的配置文件,将注册中心地址改为集群地址即可
sringcloud2.0学习-5-Eureka高可用集群_第4张图片

5. 客户端注册到Eureka集群

修改springcloud2.0-order 和springcloud2.0-member的配置文件的注册中心地址为集群地址之后,分别启动注册中心9100和8100,然后启动member服务的两个实例,以及order服务,此时注册中心如下:
sringcloud2.0学习-5-Eureka高可用集群_第5张图片
在这里插入图片描述
可以看到注册中心8100已经注册到了9100上,并且9100上有三个已经注册的服务,9100也注册到了8100上,但是8100上没有可用 的服务列表,这是因为注册过程中只会保证有一台注册中心有对应 的服务列表数据,当9100宕机后,会自动同步数据到另外一台注册中心上。我们来测试一下:
order调用member正常:
在这里插入图片描述
停掉9100注册中心,等待若干秒,可以看到8100上面已经有服务列表了
sringcloud2.0学习-5-Eureka高可用集群_第6张图片

6.疑惑

在上面的测试中,eureka注册中心 eureka.instance.prefer-ip-address=true 这个配置是注释掉的, 当放开之后,注册中心变成了下面这样,两个注册中心都会显示全部可用服务的列表,不明白为什么会这样
sringcloud2.0学习-5-Eureka高可用集群_第7张图片
经过实测:将注册中心的ip地址从127.0.0.1改成Eureak Instance Info中的ipAddr地址后,虽然只有主节点显示服务列表,但是当主节点挂了,服务列表信息并没有同步到从节点去,不知道为何?

sringcloud2.0学习-5-Eureka高可用集群_第8张图片sringcloud2.0学习-5-Eureka高可用集群_第9张图片
修改后:先启动的注册中心节点自动成为主节点,后启动的注册中心节点成为从节点,从节点仅显示主节点的注册信息,如下两图所示:
sringcloud2.0学习-5-Eureka高可用集群_第10张图片
在这里插入图片描述

你可能感兴趣的:(SpringCloud2.0)