作为一个注册中心,为了确保微服务能够正常的注册和发现,单机的eureka server肯定不能满足这样的需求,如果注册中心挂掉,那么线上的所有服务都会有影响,那么需要有一个高可用的eureka server来支撑,本文主要介绍高可用的eureka server的搭建。
在eureka的服务治理设计中,所有的节点既是服务提供方,也是服务消费方,服务注册中心也是,那么eureka server的高可用实际上是将自己作为服务注册到其他的注册中心,这样可以形成一组相互注册的服务注册中心,可以实现服务清单的同步,达到高可用的目的。
下面介绍下如何在3个节点上分别搭建一台eureka server,并将它们作为高可用的eureka server对外提供服务注册、发现等服务。
新建一个spring boot的项目,引入相关的依赖,这里使用的是gradle,具体如下:
apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'idea'
apply plugin: 'maven'
apply plugin: 'spring-boot'
apply plugin: 'application'
apply plugin: 'io.spring.dependency-management'
group = 'spring-cloud-demo'
applicationName = 'eureka-server'
version = '0.0.1'
sourceCompatibility = 1.7
targetCompatibility = 1.7
compileJava.options.encoding = 'UTF-8'
buildDir = 'target'
repositories {
mavenLocal()
maven { url "http://192.168.88.8:8081/nexus/content/groups/public" }
maven { url "http://192.168.88.8:8081/nexus/content/repositories/releases" }
mavenCentral()
}
ext {
}
dependencyManagement {
imports {
mavenBom 'org.springframework.cloud:spring-cloud-dependencies:Dalston.SR1'
}
}
dependencies {
compile "org.springframework.boot:spring-boot-starter"
compile "org.springframework.cloud:spring-cloud-starter-eureka-server"
testCompile "org.springframework.boot:spring-boot-starter-test"
}
configurations {
compile.exclude group: "log4j", module: "log4j"
compile.exclude group: "org.slf4j", module: "slf4j-log4j12"
}
mainClassName = 'com.jthink.spring.cloud.demo.eureka.server.application.Application'
buildscript {
ext {
springBootVersion = '1.5.3.RELEASE'
}
repositories {
mavenLocal()
maven { url "http://192.168.88.8:8081/nexus/content/groups/public" }
mavenCentral()
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
classpath("io.spring.gradle:dependency-management-plugin:1.0.2.RELEASE")
}
}
startScripts {
doLast {
unixScript.text = unixScript.text.replaceAll("lib/(.*)\n", "lib/\\*")
}
}
这里使用的是最新版的spring cloud(时间点:2017年6月6日):Dalston.SR1,项目主要依赖spring-cloud-starter-eureka-server。
接下去主要是看配置,application.properties下:
# server
server.address=${serverAddress}
server.port=${serverPort}
# application
spring.application.name=eureka-server
# HA
eureka.instance.hostname=${eureka.hostname}
eureka.client.serviceUrl.defaultZone=${eureka.ha.server}
假设3个节点hostname分别为host1、host2、host3,那么在host1上部署的时候eureka.hostname=host1,eureka.ha.server=http://host2:${serverPort}/eureka/,http://host3:${serverPort}/eureka/,其他的节点以此类推,目的就是讲当前节点的eureka server注册到其他2台节点上去,最终组成一组互相注册的服务注册中心从而做到服务高可用,这样挂掉一个或者两个节点,其他的节点依旧可以完成服务的注册、发现以及服务治理。
具体的代码见:https://github.com/JThink/spring-cloud-demo/tree/master/eureka-server,测试的代码见:https://github.com/JThink/spring-cloud-demo/tree/master/eureka-client-test
如果想搭建一个需要认证的eureka server,那么需要引入spring-boot-starter-security,然后在application.properties中加入相关的用户名密码,security.basic.enabled=true;security.user.name=admin;security.user.password=xxx,使用的时候:http://admin:xxx@host:port/eureka/
如果想搭建一个需要认证的eureka server,那么需要引入spring-boot-starter-security,然后在application.properties中加入相关的用户名密码,security.basic.enabled=true;security.user.name=admin;security.user.password=xxx,使用的时候:http://admin:xxx@host:port/eureka/
分享一个项目:https://github.com/JThink/SkyEye,对java、scala等运行于jvm的程序进行实时日志采集、索引和可视化,对系统进行进程级别的监控,对系统内部的操作进行策略性的报警、对分布式的rpc调用进行trace跟踪以便于进行性能分析。欢迎对分布式跟踪感兴趣的交流~~,交流群:624054633