Eureka集群高可用配置

在我们平时的生产环境中,很难保证单节点的eureka服务能提供百分百不间断的服务,如果eureka无响应了,整个项目应用都会出现问题,因此要保证eureka随时都能提供服务的情况下,最好的方式就是采用eureka的集群模式,也就是搭建eureka的高可用,在eureka的集群模式下,多个eureka server之间可以同步注册服务,因此,在一个eureka宕掉的情况下,仍然可以提供服务注册和服务发现的能力,从而达到注册中心的高可用。

主要讲一下搭建Eureka集群的方法和可能遇到的坑。
环境:spring boot 2.1.3 、eclipse

  1. 创建项目
    创建一个父Maven项目(项目名:springcloud),模板选择快速开始就可以,因为父module不需要放代码就删掉了src目录。然后父项目pom文件:


	4.0.0

	com.roy
	springcloud
	0.0.1-SNAPSHOT
	pom

	springcloud
	http://maven.apache.org

	
	
		org.springframework.boot
		spring-boot-starter-parent
		2.1.3.RELEASE
	

	
	
		UTF-8
		UTF-8
		1.8
	

	
	
		
			
				org.springframework.cloud
				spring-cloud-dependencies
				Finchley.RELEASE
				pom
				import
			
		
	

	
		
		
			org.springframework.boot
			spring-boot-starter-actuator
		
		
		
			org.springframework.cloud
			spring-cloud-starter
		
		
		
			org.springframework.cloud
			
			spring-cloud-starter-netflix-eureka-server
		
		
		
			org.springframework.boot
			spring-boot-starter-web
		
		
		
			org.springframework.boot
			spring-boot-starter-test
			test
		
	

	
		
			
				org.springframework.boot
				spring-boot-maven-plugin
			
		
	

	
	eureka
    eureka-hi
  	

再新建一个子module(模板选择快速开始就ok)作为服务注册中心,命名为eureka,因为依赖都在父module里了,这里的pom文件默认就可以。新建一个yml文件:

---
# 高可用节点1的配置
server:
  port: 8761
spring:
  # 节点1的标签
  profiles: peer1
  # 服务名保持一致
  application:
    name: eureka
eureka:
  instance:
    hostname: peer1
    prefer-ip-address: false
  client:
    # 进行注册(高可用配置、默认配置)
    # registerWithEureka: true
    # 获取注册信息(高可用配置、默认配置)
    # fetchRegistry: true
    service-url:
      # 节点1向节点2/3进行服务注册
      defaultZone: http://peer2:8762/eureka/,http://peer3:8763/eureka/

---
# 高可用节点2的配置
server:
  port: 8762
spring:
  # 节点2的标签
  profiles: peer2
  # 服务名保持一致
  application:
    name: eureka
eureka:
  instance:
    prefer-ip-address: false
    hostname: peer2
    
  client:
    # 进行注册(高可用配置、默认配置)
    # registerWithEureka: true
    # 获取注册信息(高可用配置、默认配置)
    # fetchRegistry: true
    service-url:
      # 节点2向节点1/3进行服务注册
      defaultZone: http://peer1:8761/eureka/,http://peer3:8763/eureka/

---
# 高可用节点3的配置
server:
  port: 8763
spring:
  # 节点3的标签
  profiles: peer3
  # 服务名保持一致
  application:
    name: eureka
eureka:
  instance:
    hostname: peer3
    prefer-ip-address: false
  client:
    # 进行注册(高可用配置、默认配置)
    # registerWithEureka: true
    # 获取注册信息(高可用配置、默认配置)
    # fetchRegistry: true
    service-url:
      # 节点3向节点1/2进行服务注册
      defaultZone: http://peer1:8761/eureka/,http://peer2:8762/eureka/

到此高可用的服务注册中心就完成了
2. Eclipse中Run Configuration的配置
在run configuration中新建三个Spring Boot App。配置项目名(相同)、mainclass(相同),还有Arguments=>Program arguments配置--spring.profiles.active=peer1(peer1、peer2、peer3为yml文件里设置的节点标签)然后分别运行三个Spring Boot App

3.盘点一下遇到的坑
所有服务显示在了unavailable-replicas之下,可能原因有以下几点:

  1. defaultZone配置项
    eureka.client.serviceUrl.defaultZone配置项的地址,不能使用localhost,要使用域名,DNS解析请自行配置。
    host文件添加域名映射:
127.0.0.1   peer1
127.0.0.1   peer2
127.0.0.1   peer3
  1. spring.application.name要一致(这个个人测试默认不配也可以)
spring:
  # 服务名保持一致
  application:
    name: eureka
  1. 配置eureka.instance.hostname(好像看到过正常eureka会自动拉取设备host,但各节点在同一机器下时请务必添加,注意各节点配置自己节点的host)
eureka:
  instance:
    hostname: peer2
  1. 千折腾万折腾还是不好使的时候,请去掉下面这个参数或者改为false(神坑),未找到官方原因。。
eureka:
  instance:
    prefer-ip-address: false

你可能感兴趣的:(SpringCloud)