springcloud2-注册中心eureka及nacos

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://uploader.shimo.im/f/WIZ7z5PmPTBkL7Cn.png

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: localhost
  client:
    #是否向注册中心注册,默认值为true 因为这里本身就是注册中心,自己不用向自己注册
    registerWithEureka: false
    #从注册中心获取其他服务注册内容 默认值为true  因为这里本身就是注册中心,自己不用向自己取数据
    fetchRegistry: false
    serviceUrl:
      #其他服务向注册中心注册时,注册地址域  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高可用服务端注册中心搭建
图片: https://uploader.shimo.im/f/iW1cEx0FOWsicunf.png

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 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。
图片: https://uploader.shimo.im/f/B2EE8A5c9cqLiN3R.png

3.2.2 基本架构和概念
图片: https://uploader.shimo.im/f/xDB5wZZ0K4UwVu42.png

服务 (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
图片: https://uploader.shimo.im/f/QfYweamUSBFnxKiN.png

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

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)查看效果:
图片: https://uploader.shimo.im/f/OzmHMDMMI7OsFv9A.png

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

SLB= server loadbalance = nginx 服务器
前面配置过3台linux服务器 cluster1 cluster2 cluster3
图片: https://uploader.shimo.im/f/xeMxQ31mRwcecgIX.png

         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,数据库名称,用户名和密码都是自己的
图片: https://uploader.shimo.im/f/gWI7SDnDcXQKLqh9.png

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
图片: https://uploader.shimo.im/f/VTkX1aEWxnbHFdJ9.png
/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 
     保证3nacos 服务器正常
    /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=1
 ExpectedClientRenewalIntervalSeconds: 客户端续约间隔,心跳时长,不配置时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…)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

teayear

读后有收获可以获取更多资源

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值