高可用eureka server搭建

     作爲一個註冊中心,爲了確保微服務能夠正常的註冊和發現,單機的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/

     分享一個項目:https://github.com/JThink/SkyEye對java、scala等運行於jvm的程序進行實時日誌採集、索引和可視化,對系統進行進程級別的監控,對系統內部的操作進行策略性的報警、對分佈式的rpc調用進行trace跟蹤以便於進行性能分析。歡迎對分佈式跟蹤感興趣的交流~~,交流羣:624054633
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章