注册中心

举报
tea_year 发表于 2023/12/10 17:13:50 2023/12/10
【摘要】 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/#sprin...

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:

<!--eureka server jar eureka服务端的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高可用服务端注册中心搭建

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


创建子项目:

 eureka_registryregistry_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:

<!--eureka客户端包-->

<dependency>

<groupId>org.springframework.cloud</groupId>

<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>

</dependency>

配置:

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(Dynamic Naming and Configuration Service) 致力于帮助您发现、配置和管理微服务。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)添加依赖:

<dependency>

    <groupId>com.alibaba.cloud</groupId>

    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>

</dependency>

注意:与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=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....)




【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。