1,课程回顾
2,本章重点
eureka注册中心
nacos注册中心
3,具体内容

3.1 eureka注册中心
https://www.springcloud.cc/spring-cloud-brixton.html#spring-cloud-eureka-server
https://docs.spring.io/spring-cloud-netflix/docs/current/reference/html/#spring-cloud-eureka-server
3.1.1 简介
Eureka 是一种 RESTful(代表性状态传输)服务,主要用于 AWS 云中,用于中间层服务器的发现、负载平衡和故障转移。它在 Netflix 中层基础设施中发挥着关键作用。
3.1.2 原理

                           https://www.springcloud.cc/

https://docs.spring.io/spring-cloud-netflix/docs/current/reference/html/#netflix-eureka-server-starter
作为一个实例还涉及到注册表的周期性心跳(通过客户端的serviceUrl),默认持续时间为 30 秒。直到实例、服务器和客户端在其本地缓存中都具有相同的元数据(因此可能需要 3 个心跳),客户端才能发现服务。您可以通过设置更改期间eureka.instance.leaseRenewalIntervalInSeconds。将其设置为小于 30 的值会加快让客户端连接到其他服务的过程。在生产中,最好坚持使用默认值,因为服务器中的内部计算会假设租约续订期。
3.1.3 单机服务端注册中心
创建项目:创建子项目 eureka_registry
引入JAR:

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
启动类:@SpringBootApplication@EnableEurekaServer //开启注册中心服务配置文件:
server:#访问端口号port: 14110
eureka:instance:#当前eureka名称hostname: localhostclient:#是否向注册中心注册,默认值为true 因为这里本身就是注册中心,自己不用向自己注册registerWithEureka: false#从注册中心获取其他服务注册内容 默认值为true  因为这里本身就是注册中心,自己不用向自己取数据fetchRegistry: falseserviceUrl:#其他服务向注册中心注册时,注册地址域  http://localhost:14111/eureka/defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/#orderZone:#goodsZone:

3.1.4 启动页面详细解释:
Environment : 环境,默认为test, 该参数在实际使用过程中,可以不用更改
Data center : 数据中心,使用的是默认的是 “MyOwn”
Current time:当前的系统时间
Uptime : 已经运行了多少时间
Lease expiration enabled :是否启用租约过期 , 自我保护机制关闭时,该值默认是true, 自我保护机制开启之后为false。
Renews threshold : 每分钟最少续约数
Renews (last min) : 最后一分钟的续约数量(不含当前,1分钟更新一次)

系统在三种情况下会出现红色加粗的字体提示:
1.在配置上,自我保护机制关闭
RENEWALS ARE LESSER THAN THE THRESHOLD. THE SELF PRESERVATION MODE IS TURNED OFF.THIS MAY NOT PROTECT INSTANCE EXPIRY IN CASE OF NETWORK/OTHER PROBLEMS.
2.自我保护机制开启了
EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY’RE NOT. RENEWALS ARE LESSER THAN THRESHOLD AND HENCE THE INSTANCES ARE NOT BEING EXPIRED JUST TO BE SAFE.
3.在配置上,自我保护机制关闭了,但是一分钟内的续约数没有达到85% , 可能发生了网络分区,会有如下提示
THE SELF PRESERVATION MODE IS TURNED OFF.THIS MAY NOT PROTECT INSTANCE EXPIRY IN CASE OF NETWORK/OTHER PROBLEMS.
DS Replicas
这个下面的信息是这个Eureka Server相邻节点,互为一个集群。

total-avail-memory : 总共可用的内存
environment : 环境名称,默认test
num-of-cpus : CPU的个数
current-memory-usage : 当前已经使用内存的百分比
server-uptime : 服务启动时间
registered-replicas : 相邻集群复制节点
unavailable-replicas :不可用的集群复制节点,如何确定不可用? 主要是server1 向 server2和server3 发送接口查询自身的注册信息,
如果查询不到,则默认为不可用 , 也就是说如果Eureka Server自身不作为客户端注册到上面去,则相邻节点都会显示为不可用。
available-replicas :可用的相邻集群复制节点

自我保护阀值 = 服务总数(总数+1) * 每分钟续约数(60/心跳间隔30) * 自我保护续约百分比阀值因子(0.85)。
每分钟续约数 =(60S/客户端续约间隔)
最后自我保护阀值的计算公式为:
自我保护阀值 = 服务总数 * (60S/客户端续约间隔) * 自我保护续约百分比阀值因子。

3.1.5 HA高可用服务端注册中心搭建

peer 每一个节点都是对等的,没有leader和follower之分。每一个节点启动时都向其他注册中心节点注册,达到数据共享。

创建子项目:
在 eureka_registry 下registry_a,registry_b,registry_c三个项目。
启动类:
@SpringBootApplication
@EnableEurekaServer //开启eureka服务端功能

application.yml配置:
server:
#访问端口号
port: 14111
eureka:
instance:
#当前eureka名称 在本地域名配置文件C:\Windows\System32\drivers\etc\hosts 和linux /ect/hosts 一样的
#在文件中配置该名称对应的IP
hostname: registryA
client:
#是否向注册中心注册,默认值为true 因为这里本身就是注册中心,自己不用向自己注册
registerWithEureka: false
#从注册中心获取其他服务注册内容 默认值为true 因为这里本身就是注册中心,自己不用向自己取数据
fetchRegistry: false
serviceUrl:
#其他服务向注册中心注册时,注册地址域 http://localhost:14111/eureka/
defaultZone: http://registryB:14112/eureka/,http://registryC:14113/eureka/
#orderZone:
#goodsZone:
server:
# 本地开发和测试环境,最好关闭 生产环境一定不要关闭
enable-self-preservation: false

server:

# 默认心跳间隔

expected-client-renewal-interval-seconds: -40

#阈值因子

renewal-percent-threshold: 0.85

配置hosts文件(C:\Windows\System32\drivers\etc)
127.0.0.1 registryA
127.0.0.1 registryB
127.0.0.1 registryC
registry_b和registry_c和registry_a类似,不再重复
启动测试:
三个项目都启动
访问任意一个地址
http://localhost:14111
http://localhost:14112
http://localhost:14113
3.1.6 客户端的使用
当客户端注册Eureka时,它提供有关自身的元数据,例如主机和端口,运行状况指示符URL,主页等。Eureka从属于服务的每个实例接收心跳消息。如果心跳失败超过可配置的时间表,则通常将该实例从注册表中删除。
jar:

org.springframework.cloud spring-cloud-starter-netflix-eureka-client 配置: eureka: client: #eureka客户端注册域地址 service-url: defaultZone: http://localhost:14111/eureka/ spring: application: #当前应用的名称 注册后,注册中心会显示该名称,其他服务调用时,也是使用该名称 name: orderService 启动类: //开启eureka客户端 当注册中心为eureka时,使用该注解 //@EnableEurekaClient //开启客户端发现 任何注册中心都可以使用该注解 @EnableDiscoveryClient 运行效果:

3.2 nacos 注册中心
https://nacos.io/zh-cn/docs/quick-start.html
3.2.1 概念和简介:
Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。
Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。

3.2.2 基本架构和概念

服务 (Service)
服务是指一个或一组软件功能(例如特定信息的检索或一组操作的执行),其目的是不同的客户端可以为不同的目的重用(例如通过跨进程的网络调用)。Nacos 支持主流的服务生态,如 Kubernetes Service、gRPC|Dubbo RPC Service 或者 Spring Cloud RESTful Service。
服务注册中心 (Service Registry)
服务注册中心,它是服务,其实例及元数据的数据库。服务实例在启动时注册到服务注册表,并在关闭时注销。服务和路由器的客户端查询服务注册表以查找服务的可用实例。服务注册中心可能会调用服务实例的健康检查 API 来验证它是否能够处理请求。
服务元数据 (Service Metadata)
服务元数据是指包括服务端点(endpoints)、服务标签、服务版本号、服务实例权重、路由规则、安全策略等描述服务的数据。
服务提供方 (Service Provider)
是指提供可复用和可调用服务的应用方。
服务消费方 (Service Consumer)
是指会发起对某个服务调用的应用方。
配置 (Configuration)
在系统开发过程中通常会将一些需要变更的参数、变量等从代码中分离出来独立管理,以独立的配置文件的形式存在。目的是让静态的系统工件或者交付物(如 WAR,JAR 包等)更好地和实际的物理运行环境进行适配。配置管理一般包含在系统部署的过程中,由系统管理员或者运维人员完成这个步骤。配置变更是调整系统运行时的行为的有效手段之一。
配置管理 (Configuration Management)
在数据中心中,系统中所有配置的编辑、存储、分发、变更管理、历史版本管理、变更审计等所有与配置相关的活动统称为配置管理。
名字服务 (Naming Service)
提供分布式系统中所有对象(Object)、实体(Entity)的“名字”到关联的元数据之间的映射管理服务,例如 ServiceName -> Endpoints Info, Distributed Lock Name -> Lock Owner/Status Info, DNS Domain Name -> IP List, 服务发现和 DNS 就是名字服务的2大场景。
配置服务 (Configuration Service)
在服务或者应用运行过程中,提供动态配置或者元数据以及配置管理的服务提供者。
3.2.3 下载配置服务端
下载地址:
https://nacos.io/zh-cn/docs/quick-start.html
nacos-server-2.0.4.zip
解压,启动:
startup.cmd -m standalone
注意:路径中不能含有中文,否则会报文件找不到异常
测试访问:
http://192.168.0.104:8848/nacos/index.html
注意:ip为当前主机的IP,用户名和密码默认都是nacos

3.2.4 配置使用客户端
https://nacos.io/zh-cn/docs/quick-start-spring-cloud.html
服务发现示意图:

1)添加依赖:

com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-discovery

注意:与eureka客户端包不能一起使用,否则服务启动时会报错,不知道注册哪一个
2)添加配置:
application.yml
spring:
#应用名称,向注册中心注册时非常有用
application:
name: orderService
cloud:
nacos:
discovery:
server-addr: 192.168.0.104:8848
application.properties
server.port=8070
spring.application.name=service-provider
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848

3)启动类配置:
//开启客户端发现 任何注册中心都可以使用该注解
@EnableDiscoveryClient

4)查看效果:

3.3 nacos生产环境集群配置
https://nacos.io/zh-cn/docs/cluster-mode-quick-start.html

SLB= server loadbalance = nginx 服务器
前面配置过3台linux服务器 cluster1 cluster2 cluster3

         211                       222                       233

克隆3台服务器,启动,修改IP,主机名称,选择桥接启动,使用xshell连接。

3.3.1 下载解压包
在第一台机子上配置完成,发送到其他机子
下载tar.gz包上传并解压
在cluster1上操作:
tar -xzvf /root/software/nacos-server-2.0.3.tar.gz -C /usr/

3.3.2 配置外置数据源
查看配置文件包:
ls /usr/nacos/conf/
存在 /usr/nacos/conf/nacos-mysql.sql
创建库导入sql:
把该文件导出 在navicat下创建数据库db_qy142_nacos 并导入sql文件
配置数据库:
vim /usr/nacos/conf/application.properties

If use MySQL as datasource:

spring.datasource.platform=mysql

Count of DB:

db.num=1

Connect URL of DB:

db.url.0=jdbc:mysql://192.168.41.174:3306/db_qy141_nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=root
db.password.0=root
打开修改 33-41行 注意: ip,数据库名称,用户名和密码都是自己的

3.3.3 配置集群
vim /usr/nacos/conf/application.properties
:21 修改端口号为18841 注意,一会推送到其他服务器要修改
复制文件该名称
cp /usr/nacos/conf/cluster.conf.example /usr/nacos/conf/cluster.conf
vim /usr/nacos/conf/cluster.conf
修改为:
#集群节点配置
192.168.170.41:18841
192.168.170.42:18842
192.168.170.43:18843
vim /usr/nacos/bin/startup.sh :93 -Xms2G -Xmx2G 改为1G
-X execute m = memory s =start jvm最小堆内存配置 -Xms
-X execute m = memory x =max jvm最大堆内存配置 -Xms
复制已经配置好nacos到另外两台服务器
scp -r /usr/nacos/ cluster2:/usr/
scp -r /usr/nacos/ cluster3:/usr/
修改其他两台配置:
vim /usr/nacos/conf/application.properties
:21 改端口 18842 18843
测试:
/usr/nacos/bin/startup.sh //在allsession中执行 官网 sh startup.sh
访问任意地址:
http://192.168.170.41:18841/nacos
http://192.168.170.42:18842/nacos
http://192.168.170.43:18843/nacos

/usr/nacos/bin/shutdown.sh 关闭操作
3.3.4 安装配置nginx 配置反向代理
nginx安装参考过去课件
在cluster1 操作:
关闭子安全系统 允许nginx访问底层文件

 vim /etc/sysconfig/selinux   :7     SELINUX=disabled
reboot  重启安装c编译器yum -y install   gcc-c++
安装 pcre 支持url重写tar -xzvf /root/software/pcre-8.44.tar.gz  -C /usr/cd /usr/pcre-8.44/./configure   检查并确认安装路径make && make install   编译安装pcre-config --version
安装zlib  支持gzip压缩yum -y install  zlib-devel
安装nginx tar -xzvf /root/software/nginx-1.18.0.tar.gz -C /usr/cd /usr/nginx-1.18.0/./configure   检查并确认安装路径make && make install   编译安装配置nacos反向代理+负载均衡vim /usr/local/nginx/conf/nginx.conf#设置nacos反向代理        location /qy141/ {proxy_pass http://nacosservers/;}# 配置nacos负载均衡列表upstream nacosservers{server  192.168.170.41:18841;server  192.168.170.42:18842;server  192.168.170.43:18843;}
启动nginx 保证3台nacos 服务器正常/usr/local/nginx/sbin/nginx

3.3.5 测试
保证3台nacos启动
http://192.168.170.166:14811/nacos/index.html
http://192.168.170.177:14812/nacos/index.html
http://192.168.170.188:14813/nacos/index.html
/usr/local/nginx/sbin/nginx
http://192.168.170.166/nacoslb/nacos

  客户端配置换成
spring:cloud:nacos:discovery:server-addr: 192.168.170.41:80/qy141/如果  上面不加http://   不可以用,就使用http://192.168.170.166/qy141/

4,知识点总结
5,本章面试题

5.1,Eureka自我保护机制

   在一定时间内(15分钟),向注册中心注册的服务超过85%没有心跳,注册中心会认为是自己出现故障或者网络出现故障,宁可放过一千,不可以错杀一个,不会把大量服务从注册中心剔除,而是保护,起来,让整个微服务分布式集群可以正常运行。自我保护机制开启条件:当Eureka服务器每分钟收到心跳续租的数量低于一个阈值,就会触发自我保护模式。当它收到的心跳数重新恢复到阈值以上时,该Eureka服务器节点才会自动退出自我保护模式。心跳阀值计算公式如下:

(服务实例总数量+1)×(60/每个实例心跳间隔秒数)×自我保护系数(0.85)
当新服务注册时:register 148行 171行 987行
https://blog.csdn.net/weixin_40969698/article/details/88546553
http://www.majunwei.com/view/201808131015366640.html
续约类:AbstractInstanceRegistry idea 点击ctrl+N
阈值:numberOfRenewsPerMinThreshold

    当前注册中心的总服务数 :expectedNumberOfClientsSendingRenews=1ExpectedClientRenewalIntervalSeconds: 客户端续约间隔,心跳时长,不配置时30
renewalPercentThreshold:续约百分比阀值因子,默认值为0.85有1个服务在线时:   2*2 *0.85      3

this.numberOfRenewsPerMinThreshold = (int)((double)this.expectedNumberOfClientsSendingRenews * (60.0D / (double)this.serverConfig.getExpectedClientRenewalIntervalSeconds()) * this.serverConfig.getRenewalPercentThreshold());

关闭自我保护模式
#eureka.server.enable-self-preservation=false

5.2,zookeeper,eureka两个注册中心的区别:
重点: dubbo 注册中心 zookeeper
springcloud 注册中心 eureka
分布式框架:
1,CAP原则(C数据一致性,A高可用性,P分区容错性) 两个注册中心只能满足两个原则。zk 满足CP,eureka满足AP。
2,zk有leader和follower, eureka peer所有节点都是对等的
3,zk在选举期间,不能对外提供服务,必须有leader,保证数据一致,选举期间但不能保证集群一定可以用。eureka自我保护机制,不能保证节点数据同步,还可以注册新的服务,可用的
4, eureka是一个项目,而zk是个进程 (jps quorumpeermain…)

springcloud2-注册中心eureka及nacos相关推荐

  1. eureka多台注册中心_微服务实战系列(五)-注册中心Eureka与nacos区别

    1. 场景描述 nacos最近用的比较多,介绍下nacos及部署吧,刚看了下以前写过类似的,不过没写如何部署及与eureka区别,只展示了效果,补补吧. 2.解决方案 2.1 nacos与eureka ...

  2. SpringCloud系列(一)、服务注册中心Eureka基础

    启动Eureka服务注册中心 1.微服务的注册中心 1.1.注册中心的主要作用 1.2.常见的注册中心 1.3.常见注册中心的异同点 2.Eureka概述 2.1.Eureka的基础知识 2.2.Eu ...

  3. 理解nacos 服务治理(注册中心)、Nacos简介、下载与配置持久化到Mysql

    Nacos简介 什么是Nacos Nacos致力于帮助您发现.配置和管理微服务.Nacos提供了一组简单易用的特性集,帮助您快速实现动态服务发现.服务配置.服务元数据及流且管理. Nacos帮助您更敏 ...

  4. springCloud的注册中心Eureka和Zookeper的区别

    1.Eureka 简介: Eureka 是 Netflix 出品的用于实现服务注册和发现的工具. Spring Cloud 集成了 Eureka,并提供了开箱即用的支持.其中, Eureka 又可细分 ...

  5. Srpingcloud之eureka,微服架构之注册中心eureka

    微服架构为什么需要注册中心,它解决了什么问题? 为什么要用? 管理服务以及服务之间的依赖关系. eureka:微服服务注册与发现,负载均衡,故障转移的能力. 类似服务:zookeeper+dubbo ...

  6. SpringCloud | 第二章: 注册中心 Eureka

    前言 前一章节 初识SpringCloud 简单介绍了什么是SpringCloud,以及微服务的架构,这一章节则来说说SpringCloud的基石,注册中心Eureka. 背景介绍 Eureka是Ne ...

  7. SpringCloud简介及注册中心Eureka

    一.SpringCloud简介 1.简介 Spring Cloud是一系列框架的有序集合.它利用Spring Boot的开发便利性巧妙地简化了分布式系统基 础设施的开发,如服务发现注册.配置中心.消息 ...

  8. eureka java_SpringCloud注册中心Eureka

    本篇概论 在上一篇中我们介绍了微服务相关的内容.微服务的本质就是让服务与服务之间进行互相调用.那么在调用之前需要有一个前提.就是不同的服务与服务之间怎么知道彼此的存在的呢?因为服务都是独立部署的,根本 ...

  9. 无敌的服务注册中心Spring CloudAlibaba Nacos不进来看一看吗?

    目录​​​​​​​ 1.Nacos概述 2.Nacos安装运行 安装 运行 3.Nacos作为服务注册中心 服务提供者order-service 服务消费者user-service 4.Nacos作为 ...

最新文章

  1. ssh跳板登陆太麻烦,使用expect每次自动登录 利用expect 模拟键盘动作,在闲置时间之内模拟地给个键盘响应...
  2. 主流WEB开发语言简单对比(转)
  3. idea 2019.2.4 maven默认配置
  4. 158.5. manifests
  5. 微信公众号自定义菜单设置管理
  6. 利用SAP 0day,四分钟内黑掉华尔街
  7. python多进程运行死机_python多进程假死
  8. Cisco *** 完全配置指南-连载-***概述
  9. QImage互转cv::Mat
  10. 机器学习中最重要的公式——贝叶斯公式
  11. 《遥感原理与应用》总结—遥感图像几何处理
  12. [视频相关2]网址解析接口
  13. java.lang.NoClassDefFoundError:org.ksoap2.seri...
  14. 《男孩别哭》海龟先生
  15. 解决“the security certificate for this site has been revoked.the site should not be trusted.”
  16. 真实场景的双目立体匹配(Stereo Matching)获取深度图详解
  17. jpi多表联查_MyBatis多表间级联查询
  18. 虎年屠虎:巨亏下的IPO,你也太虎了吧
  19. ASP.NET-AJAX笔记总结
  20. Python报数游戏的另一种思路

热门文章

  1. 【转】Linux服务器性能评估与优化(一)
  2. NCH WavePad Mater for Mac(音乐编辑器)
  3. 软件测试面试常见的题目(内含答案)
  4. 【改进粒子群优化算法】相量普氏群优化(PPSO)算法(matlab代码实现)
  5. 《精进:如何成为一个很厉害的人》读书笔记(转载)
  6. 【操作系统】虚拟地址和页表项的关系
  7. 未来计算机游戏,未来可追 ROG光刃G15游戏电脑首发登场
  8. PyCharm安装教程和第三方库安装方法
  9. 怎么压缩图片,压缩图片轻松搞定
  10. 织梦Dedecms制作"关于我们"等单页面的实现方法