Spring Cloud Alibaba搭建(二):Nacos注册中心

官方文档地址:https://nacos.io/zh-cn/docs/quick-start-spring-cloud.html

一、核心功能:

  • 服务注册:Nacos Client会通过发送REST请求的方式向Nacos Server注册自己的服务,提供自身的元数据,比如ip地址、端口等信息。Nacos Server接收到注册请求后,就会把这些元数据信息存储在一个双层的内存Map中。
  • 服务心跳:在服务注册后,Nacos Client会维护一个定时心跳来持续通知Nacos Server,说明服务一直处于可用状态,防止被踢除,默认5s发送一次心跳。
  • 服务同步:Nacos Server集群之间会互相同步服务实例,用来保证服务信息的一致性。
  • 服务发现:服务消费者(Nacos Client)在调用服务提供者的服务时,会发送一个REST请求给Nacos Server,获取上面注册的服务清单,并且缓存在Nacos Client本地,同时会在Nacos Client本地开启一个定时器任务定时拉取服务端最新的注册表信息更新到本地缓存。
  • 服务健康检查:Nacos Server会开启一个定时任务来检查注册服务实例的健康情况,对于超过15s没有收到客户端心跳的实例会将它的healthy属性设置为false,如果某个实例超过30s没有收到心跳,直接剔除该实例(被踢除的实例如果恢复发送心跳则会重新注册)。

二、主流注册中心功能对比

NacoseEurekaConsulCoreDnsZookeeper
一致性协议CP+AP(默认AP)APCPCP
健康检查TCP/HTTP/MYSQL/Client BeatClient BeatTCP/HTTP/gRPC/CMDKeep Alive
负载均衡策略权重/Metadata/SelectorRibbonFabioRoundRobin
雪崩保护
自动注销实例支持支持支持不支持支持
访问协议HTTP/DNSHTTPHTTP/DNSDNSTCP
监听支持支持支持支持不支持支持
多数据中心支持支持支持不支持不支持
跨注册中心同步支持不支持支持不支持不支持
Spring Cloud集成支持支持支持不支持支持
Dubbo集成支持不支持支持不支持支持
K8s集成支持不支持支持支持不支持

CAP理论和BASE理论【引用文档

  • CAP定理:Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性); 这三个特性在任何分布式系统中都不能同时满足,最多同时满足两个
    在这里插入图片描述

    -1-. CA:优先保证一致性和可用性,放弃分区容错。这也意味着放弃系统的扩展性,系统不再是分布式的,有违设计的初衷。
    -2-. CP:优先保证一致性和分区容错性,放弃可用性。在数据一致性要求比较高的场合(譬如:zookeeper,Hbase)是比较常见的做法,一旦发生网络故障或者消息丢失,就会牺牲用户体验,等恢复之后用户才逐渐能访问。
    -3-. AP:优先保证可用性和分区容错性,放弃一致性。NoSQL中的Cassandra就是这种架构。跟CP一样,放弃一致性,不是说一致性就不保证了,而是逐渐的变得一致

  • BASE定理:Basically Available(基本可用)、Soft state(软状态)和Eventually consistent(最终一致性)三个短语的简写,BASE是对CAP中一致性和可用性权衡的结果,其来源于对大规模互联网系统分布式实践的结论,是基于CAP定理逐步演化而来的,其核心思想是即使无法做到强一致性(Strong consistency),但每个应用都可以根据自身的业务特点,采用适当的方式来使系统达到最终一致性(Eventual consistency)。

三、Nacos中AP模式源码分析

在这里插入图片描述

四、Nacos版本选择

对应版本可参考Spring Cloud Alibaba搭建(一):依赖版本选择
在这里插入图片描述

由上图可知nacos应下载1.4.2版本 ,下载地址:Nacos官方(GitHub)下载地址Nacos码云下载地址(更快)
在这里插入图片描述

tips:加速插件是“GitHub加速”,浏览器是edge浏览器;也可以复制链接使用迅雷下载,速度更快。

五、安装Nacos

Nacos官方文档:快速开始

1.预备环境准备

Nacos 依赖 Java 环境来运行。如果您是从代码开始构建并运行Nacos,还需要为此配置 Maven环境,请确保是在以下版本环境中安装使用:

  • 64 bit OS,支持 Linux/Unix/Mac/Windows,推荐选用 Linux/Unix/Mac。
  • 64 bit JDK 1.8+;下载 & 配置
  • Maven 3.2.x+;下载 & 配置

2.下载编译后压缩包方式

unzip nacos-server-$version.zip 或者 tar -xvf nacos-server-$version.tar.gz
cd nacos/bin

3.Nacos相关配置

在这里插入图片描述

4.Nacos支持三种部署模式

  • 单机模式 - 用于测试和单机试用。
    在0.7版本之前,在单机模式时nacos使用嵌入式数据库实现数据的存储,不方便观察数据存储的基本情况。0.7版本增加了支持mysql数据源能力,具体的操作步骤:
  1. 安装数据库,版本要求:5.6.5+
  2. 初始化mysql数据库,数据库初始化文件:nacos-mysql.sql
  3. 修改conf/application.properties文件,增加支持mysql数据源配置(目前只支持mysql),添加mysql数据源的url、用户名和密码。
spring.datasource.platform=mysql

db.num=1
db.url.0=jdbc:mysql://11.162.196.16:3306/nacos_devtest?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=nacos_devtest
db.password=youdontknow

再以单机模式启动nacos,nacos所有写嵌入式数据库的数据都写到了mysql

  • 集群模式 - 用于生产环境,确保高可用。
  • 多集群模式 - 用于多数据中心场景。
    Nacos支持NameServer路由请求模式,通过它您可以设计一个有用的映射规则来控制请求转发到相应的集群,在映射规则中您可以按命名空间或租户等分片请求…

5.启动Nacos(nacos默认有内置存储)

# 启动命令(standalone代表着单机模式运行,非集群模式):
startup.[sh|cmd] -m standalone 等价于将startup文件里面的export MODE="cluster" 为 export MODE="standalone "
  
sh startup.sh -m standalone
# 如果您使用的是ubuntu系统,或者运行脚本报错提示[[符号找不到,可尝试如下运行:
bash startup.sh -m standalone

# Windows
startup.cmd -m standalone

启动成功:
在这里插入图片描述

六. 访问:http://[IP]:[端口]/nacos/

application.properties可以更改默认的端口8848
在这里插入图片描述
默认的账号和密码都是nacos,进入后效果:
在这里插入图片描述

在这里插入图片描述

七、常见错误以及解决方案

  • 删除data目录后,重新运行
    在这里插入图片描述
    在这里插入图片描述

  • 必须配置JAVA_HOME,且需要JDK的版本为JDK8及其以上
    在这里插入图片描述

  • 更换JDK
    在这里插入图片描述

八、注册服务到Nacos

1.添加依赖

        <!--	Nacos 注册服务功能	-->
        <dependency>
			<groupId>com.alibaba.cloud</groupId>
			<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
		</dependency>

2.启动类配置

在这里插入图片描述

Spring Cloud最早是从2014年推出的,在推出的前期更新迭代速度非常快,频繁发布新版本,目前更趋于稳定,变化稍慢一些;
Spring Cloud的版本并不是传统的使用数字的方式标识,而是使用诸如:Angel、Brixton、Camden、Dalston、Edgware、Finchley、GreenWich、Hoxton…等伦敦的地名来命名版本

3.添加配置

spring:
  application:
    name: service-clint1 # 应用名称(nacos会将该名称当作服务名称),注意:不能使用“—”(下划线)
  cloud:
    nacos:
      server-addr: 127.0.0.1:8848 # Nacos 配置中心地址
      discovery:
        username: nacos # Nacos用户名,默认为 nacos
        password: nacos # Nacos密码,默认为 nacos
        namespace: public # 名称空间,默认为 public

关于 Nacos Starter 更多的配置项信息
在这里插入图片描述

3.启动项目查看注册结果

在这里插入图片描述
在这里插入图片描述

九、通过服务名调用接口

此处利用RestTemp测试调用

1.创建两个项目(nacon_client1、nacons_client2),编写两个control层方法

创建两个项目
在这里插入图片描述
nacon_client1项目control
nacon_client1项目control
nacon_client2项目control
在这里插入图片描述

2.直接访问报错,需要使用带有负载均衡的RestTemplate

  • java.net.unknownhostexception 错误
    在这里插入图片描述
    解决方法:改造RestTemplate,使其具有负载均衡的效果(加上@LoadBalanced注解)
    在这里插入图片描述
    @LoadBalanced注解 还报错,还需要引用loadbalancer依赖(没报错就不用添加)
		<!--	支持 RestTemplate 开启负载均衡的功能	-->
	   	<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-loadbalancer</artifactId>
		</dependency>
  • java.lang.IllegalStateException: Request URI does not contain a valid hostname
    在这里插入图片描述
    解决办法:服务名称不能用下划线,换成中划线。
    在这里插入图片描述

3.访问成功

在这里插入图片描述

十、Nacos界面功能介绍

1.服务详情

位置:服务管理 -> 服务列表 -> 服务详情
在这里插入图片描述

十一、Nacos集群

文档地址【运维指南->集权部署说明】:https://nacos.io/zh-cn/docs/cluster-mode-quick-start.html

任务:使用centos部署Nacos伪集群(在一台服务器中模拟)
前提条件:安装jdk 1.8+maven 3.0+nginxmysql(5.7+)安装教程

下载nacos

1.下载Nacos 1.4.2(版本选择看前面)

2.使用mysql数据库,sql初始化脚本在conf目录的nacos-mysql.sql

在这里插入图片描述
在这里插入图片描述

3.将下载的nacos解压,并修改conf目录下的application.properties配置,使用外置数据源

在这里插入图片描述

5.将conf\cluster.conf.example改为cluster.conf,添加节点配置

# 建议不要使用127.0.0.1
172.21.16.4:8849
172.21.16.4:8850
172.21.16.4:8851

7.如果出现内存不足:修改启动脚本(bin\startup.sh)的jvm参数

JAVA_OPT="${JAVA_OPT} -server -Xms2g -Xmx2g -Xmn1g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"

在这里插入图片描述

8.将一份nacos拷贝三份,并修改端口(conf目录下的application.properties文件的server.port=8848)

server.port=8848

在这里插入图片描述

9.官方推荐,nginx反向代理


upstream nacoscluster {
        server 172.21.16.4:8849;
        server 172.21.16.4:8850;
        server 172.21.16.4:8851;
}

server {

        listen           8848; 

        access_log /var/log/nginx/nacos/access.log main;

        #配置请求规则
        location /nacos/{
                proxy_pass http://nacoscluster/nacos/;
        }


}

10.启动三个nacos服务,并访问

启动成功(先判断内存是否够用 free -h;内存不够会导致之前的服务挂掉,而且没有错误日志信息)在这里插入图片描述

使用nginx访问在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值