Spring Cloud 封装了 Netflix 公司开发的 Eureka 模块来实现服务注册和发现。Eureka 采用了 C-S 的设计架构。Eureka Server 作为服务注册功能的服务器,它是服务注册中心。而系统中的其他微服务,使用 Eureka 的客户端连接到 Eureka Server,并维持心跳连接。这样系统的维护人员就可以通过 Eureka Server 来监控系统中各个微服务是否正常运行。Spring Cloud 的一些其他模块(比如Zuul)就可以通过 Eureka Server 来发现系统中的其他微服务,并执行相关的逻辑。

综上所述,在一个分布式系统中,服务注册中心是最重要的基础部分,理应随时处于可以提供服务的状态。为了维持其可用性,使用集群是很好的解决方案。

这篇文章给出了一个 Eureka Server 双节点集群的例子。并且最后部署到 Docker,并在 linux 服务器上运行。linux 系统使用的是 ubuntu 14.04。

假设节点1的服务器的内网IP是 192.168.1.1 ,外网IP是 160.5.5.1。
假设节点2的服务器的内网IP是 192.168.1.2 ,外网IP是 160.5.5.2。

节点 1 的 JAVA 项目

节点1的 java 项目名称是 F-EurekaServer1。我使用了 Maven 管理项目。

pom.xml:

<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.0</modelVersion><groupId>zhangchao</groupId><artifactId>F-EurekaServer1</artifactId><version>0.0.1-SNAPSHOT</version><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version></properties><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.4.4.RELEASE</version></parent><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>Camden.SR5</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-eureka-server</artifactId></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

src/main/resources/application.properties:

spring.application.name=eureka-server
server.port=8761eureka.client.register-with-eureka=true
eureka.client.fetch-registry=true
eureka.client.serviceUrl.defaultZone=http://192.168.1.1:8761/eureka/,http://192.168.1.2:8761/eureka/eureka.instance.ipAddress=192.168.1.1
eureka.instance.preferIpAddress=true# Make sure eureka server can detect whether this app is up or down. Add by Zhang Chao.
eureka.instance.lease-renewal-interval-in-seconds=5
eureka.instance.lease-expiration-duration-in-seconds=5

其中 eureka.instance.preferIpAddress=true 表示使用IP进行配置。
eureka.instance.ipAddress=192.168.1.1 指定本节点的IP。

新建一个名为 zhangchao 的包,然后新建zhangchao.Application1 类,代码如下:

package zhangchao;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;@SpringBootApplication
@EnableEurekaServer
public class Application1 {public static void main(String[] args) {SpringApplication.run(Application1.class, args);}
}

节点 2 的 JAVA 项目

节点2的 java 项目名称是 F-EurekaServer2。同样使用 Maven管理项目。

pom.xml:把节点 1 的 pom.xml 复制粘贴过来,把 <artifactId>F-EurekaServer1</artifactId> 修改成 <artifactId>F-EurekaServer2</artifactId> 即可。

src/main/resources/application.properties:

spring.application.name=eureka-server
server.port=8761eureka.client.register-with-eureka=true
eureka.client.fetch-registry=true
eureka.client.serviceUrl.defaultZone=http://192.168.1.2:8761/eureka/,http://192.168.1.1:8761/eureka/eureka.instance.ipAddress=192.168.1.2
eureka.instance.preferIpAddress=true# Make sure eureka server can detect whether this app is up or down. Add by Zhang Chao.
eureka.instance.lease-renewal-interval-in-seconds=5
eureka.instance.lease-expiration-duration-in-seconds=5

新建一个名为 zhangchao 的包,然后新建zhangchao.Application2 类,代码如下:

package zhangchao;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;@SpringBootApplication
@EnableEurekaServer
public class Application2 {public static void main(String[] args) {SpringApplication.run(Application2.class, args);}
}

打包

eclipse 中,在项目上右键 → Run As → Maven build … → Edit Configuration 对话框中的 Goals 文本框中输入 clean package → 点击对话框中的 Run 按钮。等两个节点的 java 项目打包完毕。可以在 项目文件夹/target 路径下找到打包好的 jar 文件。

节点 1 Docker 部署

新建 EurekaServer1-v1 文件夹。文件夹内容如下所示:

EurekaServer1-v1│├─ Dockerfile│├─ F-EurekaServer1-0.0.1-SNAPSHOT.jar│└─ jre-8u111-linux-x64.tar.gz

Dockerfile:

FROM ubuntu:14.04
# Set timezone as china/shanghai
RUN cp /usr/share/zoneinfo/PRC /etc/localtime
RUN mkdir /usr/java
# Copy jre install file
COPY jre-8u111-linux-x64.tar.gz /usr/java/
WORKDIR /usr/java/
RUN tar zxvf /usr/java/jre-8u111-linux-x64.tar.gz
RUN rm -rf /usr/java/jre-8u111-linux-x64.tar.gz
# Eureka server directory
RUN mkdir /eureka
# Copy app jar file
COPY F-EurekaServer1-0.0.1-SNAPSHOT.jar /eureka/
EXPOSE 8761
CMD ["/usr/java/jre1.8.0_111/bin/java", "-jar", "/eureka/F-EurekaServer1-0.0.1-SNAPSHOT.jar"]

把文件夹上传至 ubuntu 服务器,cd 命令进入EurekaServer1-v1目录,执行 docker build -t zc/eureka1:v1 . 编译成 Docker 镜像。
再执行 docker run --name eureka1 -p 8761:8761 -d zc/eureka1:v1 创建容器并运行。

节点 2 Docker 部署

新建 EurekaServer2-v1 文件夹。文件夹内容如下:

EurekaServer2-v1│├─ Dockerfile│├─ F-EurekaServer2-0.0.1-SNAPSHOT.jar│└─ jre-8u111-linux-x64.tar.gz

Dockerfile:

FROM ubuntu:14.04
# Set timezone as china/shanghai
RUN cp /usr/share/zoneinfo/PRC /etc/localtime
RUN mkdir /usr/java
# Copy jre install file
COPY jre-8u111-linux-x64.tar.gz /usr/java/
WORKDIR /usr/java/
RUN tar zxvf /usr/java/jre-8u111-linux-x64.tar.gz
RUN rm -rf /usr/java/jre-8u111-linux-x64.tar.gz
# Eureka server directory
RUN mkdir /eureka
# Copy app jar file
COPY F-EurekaServer2-0.0.1-SNAPSHOT.jar /eureka/
EXPOSE 8761
CMD ["/usr/java/jre1.8.0_111/bin/java", "-jar", "/eureka/F-EurekaServer2-0.0.1-SNAPSHOT.jar"]

把文件夹上传至 ubuntu 服务器,cd 命令进入EurekaServer2-v1目录,执行 docker build -t zc/eureka2:v1 . 编译成 Docker 镜像。
再执行 docker run --name eureka2 -p 8761:8761 -d zc/eureka2:v1 创建容器并运行。

效果

如果你的电脑不在服务器的内网,你可以访问外网ip。我们假设节点 1 和节点 2 的外网 IP 分别是 160.5.5.1 和 160.5.5.2。直接用浏览器访问访问 http://160.5.5.1:8761/ 或者 http://160.5.5.2:8761/ 就能看到管理页面。如果你可以访问到内网,直接把上面的 IP 替换成内网 IP 即可。
下面是访问节点 1 的监控页面:

节点 2 的页面和节点 1 的类似,只不过把 IP 地址做了一下互换。

【065】Spring Cloud服务注册中心双节点集群,使用Eureka实现,以IP方式配置,基于Spring Cloud的Camden SR5版本相关推荐

  1. Spring Cloud 服务注册中心Eureka

    Eureka介绍 在Spring Cloud Netflix 整合技术栈中,Eureka既可以作为服务注册中心也可以用于服务发现对整个微服务架构起着最核心的整合作用. Eureka是基于REST(Re ...

  2. java服务注册中心有哪些_Spring Cloud服务注册中心简述

    概念 当一个大型系统拥有很多服务时,往往需要一个服务注册中心来管理这些服务,它可以提供如下功能: 登记每个服务提供的功能 检测每个服务是否可用,不可用的服务剔除 服务间互相调用时,通过服务注册中心很容 ...

  3. SpringCloud的服务注册中心(三) - 进一步了解 Eureka

    一.服务治理参与者 服务注册中心: eureka-server 服务提供者:HELLO-SERVICE 服务消费者 :HELLO-CONSUMER 很多时候,客户端既是服务提供者又是服务消费者,-&g ...

  4. 微服务注册中心为什么要使用Consul替代Eureka?

    ---------------- 版权声明:本文为CSDN博主「fishinhouse」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明. 原文链接:https://b ...

  5. EureKa服务注册与发现(集群部署Eureka与支付模块集群部署、订单模块访问负载均衡调用支付服务实现)

    上一遍文章完成了,聚合父工程.消费模块.支付模块.公共模块的搭建.RestTemplate调用支付模块 该篇项目创建gitv2.0的管理分子完成学习 1.Eureka基础知识 1.1. 什么是服务治理 ...

  6. Oracle 10.2.0.5 + OFS 3.4.2 双节点集群

    由于公司系统升级需要,所有win2003服务器都必需升级到win2008,旧的数据库需要进行迁移.由于之前没接触过Oracle,为配置集群折腾了一星期有余,总算将最简单的双节点冷备集群弄出来了.现如下 ...

  7. kubeadm安装K8S单master双节点集群

    宿主机: master:172.16.40.97 node1:172.16.40.98 node2:172.16.40.99 # 一.k8s初始化环境:(三台宿主机) 关闭防火墙和selinux sy ...

  8. Spring Cloud(F版)搭建高可用服务注册中心

    上一篇文章[Spring Cloud搭建注册中心]成功搭建了一个Eureka Server服务注册中心,不过相信细心的朋友都会发现,这个服务注册中心是一个单节点服务注册中心,万一发生故障或者服务器宕机 ...

  9. eureka 之前的服务如何关闭_干货分享 | 服务注册中心Spring Cloud Eureka部分源码分析...

    友情提示:全文13000多文字,预计阅读时间10-15分钟 Spring Cloud Eureka作为常用的服务注册中心,我们有必要去了解其内在实现机制,这样出现问题的时候我们可以快速去定位问题.当我 ...

最新文章

  1. 超强1000个jquery极品插件!(连载中。。。。最近更新20090710)
  2. 使用VMware桥接模式组建局域网测试MSMQ(二)
  3. fflush(stdin)与fflush(stdout)
  4. [ARC055D]隠された等差数列
  5. mysql create table 语法详解
  6. 利用存储函数,查询某个员工的年薪
  7. 2013\National _C_C++_A\2.骰子迷题
  8. Pensando Distributed Services Architecture [Pensando 分布式服务架构] - 翻译
  9. 架构师的英文缩写_架构师必备的20个英文缩写!看你知道几个?
  10. 全网独家分享,软件测试就该这么学,3个月进大厂!
  11. 正点原子STM32F429阿波罗板,固件库工程搭建
  12. 以下是一段歌词,请从这段歌词中统计出朋友出现的次数。 这些年一个人,风也过,雨也走,有过泪,有过错, 还记得坚持甚么,真爱过才会懂,会寂寞会回首,终有梦终有你在心中。 朋友一生一起走,那些日子不再
  13. 60w风扇用多大电容_家里的40W电风扇怎么接电容?该用多大电容?怎么判断好坏?...
  14. word英文大写问题解决方案
  15. ES5-ES6-ES7_字符串与JOSN格式的数据相互转换以及深度克隆新对象
  16. 计算机页面里的坚果云删不了怎么回事,我的坚果云文件夹为什么无法删除
  17. 八百呼的手机录音系统,一个划时代的进步
  18. java后端返回二进制图片 前端进行展示 详解
  19. 互联网时代如何维护网络安全
  20. 新酷卡mysql_新酷卡(猫池工具)

热门文章

  1. 当3万座加油站遇到京东无人科技,3亿车主生活或迎新变化
  2. 计算机控制独立点火结构图,独立点火线圈检测方法 独立点火线圈结构线路图...
  3. 老板带头反内卷,阿尔卑斯滑雪团建。。。别错过这一波上车机会
  4. 高性价比成磷酸铁锂杀手锏
  5. Python爬虫之Selenium
  6. 家庭宽带真的还有意义么?
  7. LaTeX公式(对小白十分友好的线上公式生成神器)
  8. 颜色类中英文词汇大全(5)
  9. html标签设置正方形,css 如何设置带有正方形项目的列表
  10. 复工“神器”华为云WeLink是怎样炼成的?