前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Eureka Server 的高可用

Eureka Server 的高可用

作者头像
微醺
发布2019-01-17 12:47:39
7170
发布2019-01-17 12:47:39
举报

1.Eureka Server 的高可用

代码语言:javascript
复制
有分布式应用开发经验的读者应该能够看出,前 文 编写的单节点 Eureka Server 并不适合线上 生产环境。Eureka Client 会定时连接 Eureka Server, 获取服务注册表中的信息并缓存在本地。
微服务在消费远程 API 时总是使用本地 缓存中的数据。因此一般来说,即使Eureka Server 发生宕机,也不会影响到服务之间的调用。
但如果 Eureka Server 宕机时, 某些微服务也出现了不可用的情况, Eureka Client 中的缓存若不被更新, 就可能会影响到微服务的调用, 甚至影响到整个应用系统的高可用性。
因此, 在生产环境中, 通常会部署一个高可用的Eureka Server 集群。
Eureka Server 可以通过运行 多个实例并相互注册的方式实现高可用部署, Eureka Server 实例会彼此增量地同步信息, 从而确保所有节点数据一致。
事实上, 节点之间相互注册是 EurekaServer 的默认行为,还记得前文编写单节点 Eureka Server 时,
额外配置了eureka.client.registerWithEureka=false 、eureka.client.fetchRegistry=false 吗? 
本节在前文的基础上, 构建一个双节点Eureka Server 集群。
1.	复制项目discovery-eureka 
2.	配置系统的hosts, Windows系统的hosts 文件路径是C:\Windows\System32\drivers\etc\hosts; 
	Linux 及 Mac OS 等系统的文件路径是 /etc/hosts。
	127.0.0.1                  peer1    
	127.0.0.1                  peer2
3.	将 application.yml修改如下:让两个节点的 Eureka Server 相互注册。
代码语言:javascript
复制
	#server:
		#  port: 8761                    # 指定该Eureka实例的端口
		#  enableSelfPreservation: false
		#eureka:
		#  client:
		#    registerWithEureka: false
		#    fetchRegistry: false
		#    serviceUrl:
		#      defaultZone: http://localhost:8761/eureka/
		
		spring:
		  application:
		    name: discovery-eureka
		eureka:
		    client:
		      registerWithEureka: true
		      fetchRegistry: true
		---
		spring:
		  profiles: peer1                                 # 指定profile=peer1
		server:
		  port: 8761
		eureka:
		  instance:
		    hostname: peer1                               # 指定当profile=peer1时,主机名是peer1
		  client:
		    serviceUrl:
		      defaultZone: http://peer2:8762/eureka/      # 将自己注册到peer2这个Eureka上面去
		    registerWithEureka: true
		    fetchRegistry: true
		---
		spring:
		  profiles: peer2
		server:
		  port: 8762
		eureka:
		  instance:
		    hostname: peer2
		  client:
		    registerWithEureka: true
		    fetchRegistry: true
		    serviceUrl:
		      defaultZone: http://peer1:8761/eureka/

测试

代码语言:javascript
复制
1.	打包项目,并使用 以下命令启动两个Eureka Server 节点。
	java  -jar  discovery-eureka-ha-0.0.1-SNAPSHOT.jar  --spring.profiles.actiVe=peer1
	java  -jar  discovery-eureka-ha-0.0.1-SNAPSHOT.jar  --spring.profiles.active=peer2
	通过spring.profiles.active 指定使用哪个profile 启动。
2.	访问http://peer1:8761 ,  会发现 "registered-replicas"  中巳有peer2 节点; 
3. 同理, 访问http://peer2:8762 , 也能发现其中的  "registered-replicas"  有 peerl  节点, 如图4-6 所示。

2.为Eureka Server 添加用户认证

在前面的示例中, Eureka Server 是允许匿名访问的, 本节来构建一个需要登录才能访问的 Eureka Server。

  1. 复制项目 discovery-eureka
  2. 在 pom.xml 中添加s pring-boot-starter-security的依赖,该依赖为 Eureka Server 提供用户认证的能力。
代码语言:javascript
复制
<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-security</artifactId>
		</dependency>
  1. 在 application.yml 中添加以下内容:
代码语言:javascript
复制
security:
			basic:
		 		enabled:true  #开启基 于HTTP basic的 认证
			user:
				name: user      #配置登录的账号是user
		 		password: password123    #配置登录的密码是 paswsord123

这样就为 Eureka Server 添加了基于HTTP basic 的认证。如果不设置这段内容 ,账号默认是 user , 密码是一个随机值, 该值会在启动时打印出来。

  1. 测试
    1. 启动 dscovery-eureka
    2. 访问http://localhost:8761/需要身份验证的对话框
  2. 输入账号 user、密码 passwordl 23, 就可登录并访问 Eureka Server。
  3. 将微服务注册到需认证的Eureka Server
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019年01月09日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.Eureka Server 的高可用
  • 2.为Eureka Server 添加用户认证
相关产品与服务
多因子身份认证
多因子身份认证(Multi-factor Authentication Service,MFAS)的目的是建立一个多层次的防御体系,通过结合两种或三种认证因子(基于记忆的/基于持有物的/基于生物特征的认证因子)验证访问者的身份,使系统或资源更加安全。攻击者即使破解单一因子(如口令、人脸),应用的安全依然可以得到保障。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档