SpringCloud注册中心高可用搭建

Spring Cloud的注册中心能够由Eureka、Consul、Zookeeper、ETCD等来实现,这里推荐使用Spring Cloud Eureka来实现注册中心,它基于Netfilix的Eureka作了二次封装,完成分布式服务中服务治理的功能,微服务系统中的服务注册与发现都经过这个注册中心来进行管理。spring

引入Eureka Server依赖

以前的文章基础上加入Spring Cloud的依赖,如今再加入注册中心Eureka Server的依赖。服务器

<dependencies>
	<dependency>
		<groupId>org.springframework.cloud</groupId>
		<artifactId>spring-cloud-starter-eureka-server</artifactId>
	</dependency>
</dependencies>

添加启动类,开启Eureka Server功能

在包根目录下加入启动类:微信

@EnableEurekaServer
@SpringBootApplication
public class RegisterApplication {

	public static void main(String[] args) {
		new SpringApplicationBuilder(RegisterApplication.class).bannerMode(Banner.Mode.LOG)
				.run(args);
	}
}

@EnableEurekaServer注解即开启注册中心服务器的功能。网络

添加Eureka配置

在application.yml中加入以下配置:app

spring: 
  application: 
    name: register-center
  profiles: 
    active: register-center1
    
eureka:
  instance: 
    prefer-ip-address: true
    instance-id: ${spring.cloud.client.ipAddress}:${server.port}
    lease-expiration-duration-in-seconds: ${lease-expiration-duration-in-seconds}
    lease-renewal-interval-in-seconds: ${lease-renewal-interval-in-seconds}
  server: 
    enable-self-preservation: ${enable-self-preservation}  
    eviction-interval-timer-in-ms: ${eviction-interval-timer-in-ms}
  client:
    register-with-eureka: true
    fetch-registry: true
    serviceUrl: 
      defaultZone: ${register-center.urls}
      
---  
spring: 
  profiles: register-center1
      
server: 
  port: ${register-center1.server.port}
      
---
spring: 
  profiles: register-center2
  
server: 
  port: ${register-center2.server.port}

这里作了两台注册中心的高可用配置register-center1,register-center2,也能够作多台,既然是高可用,每一个注册中心都向别的注册中心注册本身。maven

Maven filter配置

${}里面的配置由maven resource filter来打包进行控制,不一样的环境使用不一样的配置文件。分布式

如filter-dev.properties的配置参考以下:spring-boot

#url
register-center1.server.ip=192.168.1.22
register-center2.server.ip=192.168.1.23
register-center.urls=http://${register-center1.server.ip}:${register-center1.server.port}/eureka/,http://${register-center2.server.ip}:${register-center2.server.port}/eureka/

#port
register-center1.server.port=7001
register-center2.server.port=7002
      
#config
enable-self-preservation=false
eviction-interval-timer-in-ms=5000
lease-expiration-duration-in-seconds=20
lease-renewal-interval-in-seconds=6

Spring Cloud配置详解

Spring Boot的配置参考Spring Boot系列文章,这里只对Spring Cloud用到的配置解释。微服务

spring.application.name:配置应用名称,在注册中心中显示的服务注册名称。fetch

spring.cloud.client.ipAddress:获取客户端的IP地址。

eureka.instance.prefer-ip-address:配置为true为喜欢IP,即链接注册中心使用IP地址形式,也可使用HOSTNAME,但生产环境不推荐。

eureka.instance.instance-id:配置在注册中心注册的惟一实例ID。

eureka.instance.lease-expiration-duration-in-seconds:指示eureka服务器在接收到最后一个心跳以后等待的时间(秒),而后才能今后视图中删除此实例,并禁止此实例的流量。将此值设置得太长可能意味着流量能够路由到实例,即便实例不存在。设置此值过小可能意味着,因为临时网络故障,实例可能会被取消流量。此值将设置为至少高于lease-renewal-interval-in-seconds中指定的值。

eureka.instance.lease-renewal-interval-in-seconds:指示eureka客户端须要向eureka服务器发送心跳以指示它仍然存在的频率(以秒为单位)。若是在lease-expiration-duration-in-seconds中指定的时间段内未收到心跳线,则eureka服务器将从其视图中删除该实例,所以不容许此实例的流量。请注意,若是该实例实现HealthCheckCallback,而后决定使其自己不可用,则该实例仍然可能没法访问流量。

eureka.server.enable-self-preservation:配置注册中心是否开启服务的自我保护功能。

eureka.server.eviction-interval-timer-in-ms:配置注册中心清理无效节点的时间间隔,默认60000毫秒,即60秒。

eureka.client.register-with-eureka:配置为true指示此实例将其信息注册到eureka服务器以供其余人发现。在某些状况下,您不但愿发现实例,而您只想发现其余实例配置为false。

eureka.client.fetch-registry:指示该客户端是否应从eureka服务器获取eureka注册表信息。。

eureka.client.serviceUrl.defaultZone:Eureka服务器地址。

启动注册中心

这样一个两个注册心的Eureka Server就搭好了,启动的时候使用不一样的Profile来指定不一样的端口。

spring-boot:run -Drun.profiles=register-center1  -P dev
spring-boot:run -Drun.profiles=register-center2  -P dev

推荐:Spring Boot & Cloud 最强技术教程

扫描关注咱们的微信公众号,干货天天更新。

image