精华内容
下载资源
问答
  • 文章目录前言高可用介绍客户端重试一致性协议 distro本地缓存文件 Failover 机制心跳同步服务集群部署模式高可用节点数量多可用区部署部署模式MSE Nacos高可用最佳实践总结 简介: 我今天介绍的 Nacos 高可用,是...


    简介: 我今天介绍的 Nacos 高可用,是 Nacos 为了提升系统稳定性而采取的一系列手段。Nacos 的高可用不仅仅存在于服务端,同时也存在于客户端,以及一些与可用性相关的功能特性中,这些点组装起来,共同构成了 Nacos 的高可用。

    前言

    服务注册发现是一个经久不衰的话题,Dubbo 早期开源时默认的注册中心 ZooKeeper 最早进入人们的视线,并且在很长一段时间里,人们将注册中心和 ZooKeeper 划上了等号,可能 ZooKeeper 的设计者都没有想到这款产品对微服务领域造成了如此深厚的影响,直到 Spring Cloud 开始流行,其自带的 Eureka 进入了人们的视野,人们这才意识到原来注册中心还可以有其他的选择。再到后来,热衷于开源的阿里把目光也聚焦在了注册中心这个领域, Nacos 横空出世。

    image.png

    Kirito 在做注册中心选型时的思考:曾经我没得选,现在我只想选择一个好的注册中心,它最好是开源的,这样开放透明,有自我的掌控力。不仅要开源,它还要有活跃的社区,以确保特性演进能够满足日益增长的业务需求,出现问题也能即使修复,功能还要很强大。除了满足注册服务、推送服务外,还要有完善的微服务体系中所需的功能。最重要的,它还要稳定,最好有大厂的实际使用场景背书,证明这是一个经得起实战考验的产品。当然,云原生特性,安全特性也是很重要的······

    似乎 Kirito 对注册中心的要求实在是太高了,但这些五花八门的注册中心呈现在用户眼前,总是免不了一番比较。正如上面所言,功能特性、成熟度、可用性、用户体验度、云原生特性、安全都是可以拿出来做比较的话题。今天这篇文章重点介绍的是 Nacos 在可用性上的体现,希望借助于这篇文章,能够让你对 Nacos 有一个更加深刻的认识。

    高可用介绍

    当我们在聊高可用时,我们在聊什么?

    • 系统可用性达到 99.99%
    • 在分布式系统中,部分节点宕机,依旧不影响系统整体运行
    • 服务端集群化部署多个节点

    这些都可以认为是高可用,而我今天介绍的 Nacos 高可用,则是 Nacos 为了提升系统稳定性而采取的一系列手段。Nacos 的高可用不仅仅存在于服务端,同时也存在于客户端,以及一些与可用性相关的功能特性中,这些点组装起来,共同构成了 Nacos 的高可用。

    客户端重试

    先统一一下语义,在微服务架构中一般会有三个角色:Consumer、Provider 和 Registry,在今天注册中心的主题中,Registry 是 nacos-server,而 Consumer 和 Provider 都是 nacos-client。

    在生产环境,我们往往需要搭建 Nacos 集群,在 Dubbo 也需要显式地配置上集群地址:

    <dubbo:registry protocol="nacos" address="192.168.0.1:8848,192.168.0.2:8848,192.168.0.3:8848"/>
    

    当其中一台机器宕机时,为了不影响整体运行,客户端会存在重试机制。

    image.png

    逻辑非常简单,拿到地址列表,在请求成功之前逐个尝试,直到成功为止。

    该可用性保证存在于 nacos-client 端。

    一致性协议 distro

    首先给各位读者打个强心剂,不用看到”一致性协议“这几个字就被劝退,本节不会探讨一致性协议的实现过程,而是重点介绍其与高可用相关的特性。有的文章介绍 Nacos 的一致性模型是 AP + CP,这么说很容易让人误解,其实 Nacos 并不是支持两种一致性模型,也并不是支持两种模型的切换,介绍一致性模型之前,需要先了解到 Nacos 中的两个概念:临时服务和持久化服务。

    • 临时服务(Ephemeral):临时服务健康检查失败后会从列表中删除,常用于服务注册发现场景。
    • 持久化服务(Persistent):持久化服务健康检查失败后会被标记成不健康,常用于 DNS 场景。

    临时服务使用的是 Nacos 为服务注册发现场景定制化的私有协议 distro,其一致性模型是 AP;而持久化服务使用的是 raft 协议,其一致性模型是 CP。所以以后不要再说 Nacos 是 AP + CP 了,更建议加上服务节点状态或者使用场景的约束。

    distro 协议与高可用有什么关系呢?上一节我们提到 nacos-server 节点宕机后,客户端会重试,但少了一个前提,即 nacos-server 少了一个节点后依旧可以正常工作。Nacos 这种有状态的应用和一般无状态的 Web 应用不同,并不是说只要存活一个节点就可以对外提供服务的,需要分 case 讨论,这与其一致性协议的设计有关。distro 协议的工作流程如下:

    • Nacos 启动时首先从其他远程节点同步全部数据。
    • Nacos 每个节点是平等的都可以处理写入请求,同时把新数据同步到其他节点。
    • 每个节点只负责部分数据,定时发送自己负责数据的校验值到其他节点来保持数据一致性。

    image.png

    如上图所示,每个节点负责一部分服务的写入,但每个节点都可以接收到写入请求,这时就存在两种情况:

    • 当该节点接收到属于该节点负责的服务时,直接写入。
    • 当该节点接收到不属于该节点负责的服务时,将在集群内部路由,转发给对应的节点,从而完成写入。

    读取操作则不需要路由,因为集群中的各个节点会同步服务状态,每个节点都会有一份最新的服务数据。

    而当节点发生宕机后,原本该节点负责的一部分服务的写入任务会转移到其他节点,从而保证 Nacos 集群整体的可用性。

    image.png

    一个比较复杂的情况是,节点没有宕机,但是出现了网络分区,即下图所示:

    image.png

    这个情况会损害可用性,客户端会表现为有时候服务存在有时候服务不存在。

    综上,Nacos 的 distro 一致性协议可以保证在大多数情况下,集群中的机器宕机后依旧不损害整体的可用性。该可用性保证存在于 nacos-server 端。

    本地缓存文件 Failover 机制

    注册中心发生故障最坏的一个情况是整个 Server 端宕机,这时候 Nacos 依旧有高可用机制做兜底。

    一道经典的 Dubbo 面试题:当 Dubbo 应用运行时,Nacos 注册中心宕机,会不会影响 RPC 调用。这个题目大多数应该都能回答出来,因为 Dubbo 内存里面是存了一份地址的,一方面这样的设计是为了性能,因为不可能每次 RPC 调用时都读取一次注册中心,另一面,注册中心宕机后内存会有一份数据,这也起到了可用性的保障(尽管可能 Dubbo 设计者并没有考虑这个因素)。

    那如果,我在此基础上再抛出一个问题:Nacos 注册中心宕机,Dubbo 应用发生重启,会不会影响 RPC 调用。如果了解了 Nacos 的 Failover 机制,应当得到和上一题同样的回答:不会。

    Nacos 存在本地文件缓存机制,nacos-client 在接收到 nacos-server 的服务推送之后,会在内存中保存一份,随后会落盘存储一份快照。snapshot 默认的存储路径为:{USER_HOME}/nacos/naming/ 中:

    image.png

    这份文件有两种价值,一是用来排查服务端是否正常推送了服务;二是当客户端加载服务时,如果无法从服务端拉取到数据,会默认从本地文件中加载。

    前提是构建 NacosNaming 时传入了该参数:namingLoadCacheAtStart=true
    Dubbo 2.7.4 及以上版本支持该 Nacos 参数;开启该参数的方式:dubbo.registry.address=nacos://127.0.0.1:8848?namingLoadCacheAtStart=true

    在生产环境,推荐开启该参数,以避免注册中心宕机后,导致服务不可用,在服务注册发现场景,可用性和一致性 trade off 时,我们大多数时候会优先考虑可用性。

    细心的读者还注意到
    {USER_HOME}/nacos/naming/{namespace} 下除了缓存文件之外还有一个 failover 文件夹,里面存放着和 snapshot 一致的文件夹。这是 Nacos 的另一个 failover 机制,snapshot 是按照某个历史时刻的服务快照恢复恢复,而 failover 中的服务可以人为修改,以应对一些极端场景。

    该可用性保证存在于 nacos-client 端。

    心跳同步服务

    心跳机制一般广泛存在于分布式通信领域,用于确认存活状态。一般心跳请求和普通请求的设计是有差异的,心跳请求一般被设计的足够精简,这样在定时探测时可以尽可能避免性能下降。而在 Nacos 中,出于可用性的考虑,一个心跳报文包含了全部的服务信息,这样相比仅仅发送探测信息降低了吞吐量,而提升了可用性,怎么理解呢?考虑以下的两种场景:

    • nacos-server 节点全部宕机,服务数据全部丢失。nacos-server 即使恢复运作,也无法恢复出服务,而心跳包含全部内容可以在心跳期间就恢复出服务,保证可用性。
    • nacos-server 出现网络分区。由于心跳可以创建服务,从而在极端网络故障下,依旧保证基础的可用性。

    以下是对心跳同步服务的测试,使用阿里云 MSE 提供 Nacos 集群进行测试:

    image.png

    调用 OpenApi 依次删除各个服务:

    curl -X "DELETE mse-xxx-p.nacos-ans.mse.aliyuncs.com:8848/nacos/v1/ns/service?serviceName=providers:com.alibaba.edas.boot.EchoService:1.0.0:DUBBO&groupName=DEFAULT_GROUP"
    

    image.png

    过 5s 后刷新,服务又再次被注册了上来,符合我们对心跳注册服务的预期。

    集群部署模式高可用

    最后给大家分享的 Nacos 高可用特性来自于其部署架构。

    节点数量

    我们知道在生产集群中肯定不能以单机模式运行 Nacos,那么第一个问题便是:我应该部署几台机器?前面我们提到 Nacos 有两个一致性协议:distro 和 raft,distro 协议不会有脑裂问题,所以理论来说,节点数大于等于 2 即可;raft 协议的投票选举机制则建议是 2n+1 个节点。综合来看,选择 3 个节点是起码的,其次处于吞吐量和更高可用性的考量,可以选择 5 个,7 个,甚至 9 个节点的集群。

    多可用区部署

    组成集群的 Nacos 节点,应该尽可能考虑两个因素:

    • 各个节点之间的网络时延不能很高,否则会影响数据同步。
    • 各个节点所处机房、可用区应当尽可能分散,以避免单点故障。

    以阿里云的 ECS 为例,选择同一个 Region 的不同可用区就是一个很好的实践。

    部署模式

    主要分为 K8s 部署和 ECS 部署两种模式。

    ECS 部署的优点在于简单,购买三台机器即可搭建集群,如果你熟练 Nacos 集群部署的话,这不是难事,但无法解决运维问题,如果 Nacos 某个节点出现 OOM 或者磁盘问题,很难迅速摘除,无法实现自运维。

    K8s 部署的有点在于云原生运维能力强,可以在节点宕机后实现自恢复,保障 Nacos 的平稳运行。前面提到过,Nacos 和无状态的 Web 应用不同,它是一个有状态的应用,所以在 K8s 中部署,往往要借助于 StatefulSet 和 Operator 等组件才能实现 Nacos 集群的部署和运维。

    MSE Nacos 的高可用最佳实践

    阿里云微服务引擎 MSE 提供了 Nacos 集群的托管能力,实现了集群部署模式的高可用。

    • 当创建多个节点的集群时,系统会默认分配在不同可用区。同时,这对于用户来说又是透明的,用户只需要关心 Nacos 的功能即可,MSE 替用户兜底可用性。
    • MSE 底层使用 K8s 运维模式部署 Nacos。历史上出现过用户误用 Nacos 导致部分节点宕机的问题,但借助于 K8s 的自运维模式,宕机节点迅速被拉起,以至于用户可能都没有意识到自己发生宕机。

    下面模拟一个节点宕机的场景,来看看 K8s 如何实现自恢复。

    一个三节点的 Nacos 集群:

    image.png

    执行kubectl delete pod mse-7654c960-1605278296312-reg-center-0-2 以模拟部分节点宕机的场景。

    image.png

    大概 2 分钟后,节点恢复,并且角色发生了转换,Leader 从杀死的 2 号节点转给 1 号节点。

    image.png

    总结

    本文从多个角度出发,总结了一下 Nacos 是如何保障高可用的。高可用特性绝不是靠服务端多部署几个节点就可以获得的,而是要结合客户端使用方式、服务端部署模式、使用场景综合来考虑的一件事。

    特别是在服务注册发现场景,Nacos 为可用性做了非常多的努力,而这些保障,ZooKeeper 是不一定有的。在做注册中心选型时,可用性保障上,Nacos 绝对是优秀的。

    本系列目录


    🍎QQ群【837324215】
    🍎关注我的公众号【Java大厂面试官】,一起学习呗🍎🍎🍎
    🍎个人vxlakernote

    img

    展开全文
  • SpringCloud 微服务注册中心 - Nacos高可用.md
  • # nacos高可用集群搭建

    2020-11-11 14:03:49
    nacos高可用集群搭建 文章目录nacos高可用集群搭建0 架构介绍0.1 官方指导文档0.2 个人推荐0.3 架构图1 下载nacos 我这里演示的是1.14版本1.1 github地址1.2 下载地址1.3 上传并解压1.4 安装nginx1.5 修改nginx 配置...

    nacos高可用集群搭建

    0 架构介绍

    0.1 官方指导文档

    https://nacos.io/zh-cn/docs/cluster-mode-quick-start.html

    0.2 个人推荐

    如果生产环境至少需要2个nignx +3个nacos+1个mysql集群环境,如果小厂或者小公司那就随意了。

    0.3 架构图

    在这里插入图片描述

    1 下载nacos 我这里演示的是1.14版本

    1.1 github地址

    https://github.com/alibaba/Nacos

    1.2 下载地址

    https://github.com/alibaba/nacos/releases/tag/1.4.0

    在这里插入图片描述

    Nginx下载地址;http://nginx.org/en/download.html

    1.3 上传并解压

    
    
    [root@localhost ~]# yum install lrzsz
    已加载插件:fastestmirror, langpacks
    Loading mirror speeds from cached hostfile
     * base: mirrors.163.com
     * extras: mirrors.163.com
     * updates: mirrors.aliyun.com
    base                                                                                                                                             | 3.6 kB  00:00:00     
    extras                                                                                                                                           | 2.9 kB  00:00:00     
    updates                                                                                                                                          | 2.9 kB  00:00:00     
    软件包 lrzsz-0.12.20-36.el7.x86_64 已安装并且是最新版本
    无须任何处理
    [root@localhost ~]# rz
    
    [root@localhost ~]# ll
    总用量 50904
    -rw-------. 1 root root     1601 11月 10 10:42 anaconda-ks.cfg
    -rw-r--r--. 1 root root     1649 11月 10 11:05 initial-setup-ks.cfg
    -rw-r--r--. 1 root root 52115827 11月 11 10:57 nacos-server-1.1.4.tar.gz
    drwxr-xr-x. 2 root root        6 11月 10 11:09 公共
    drwxr-xr-x. 2 root root        6 11月 10 11:09 模板
    drwxr-xr-x. 2 root root        6 11月 10 11:09 视频
    drwxr-xr-x. 2 root root        6 11月 10 11:09 图片
    drwxr-xr-x. 2 root root        6 11月 10 11:09 文档
    drwxr-xr-x. 2 root root        6 11月 10 11:09 下载
    drwxr-xr-x. 2 root root        6 11月 10 11:09 音乐
    drwxr-xr-x. 2 root root        6 11月 10 11:09 桌面
    [root@localhost ~]# rz
    
    [root@localhost ~]# ll
    总用量 51916
    -rw-------. 1 root root     1601 11月 10 10:42 anaconda-ks.cfg
    -rw-r--r--. 1 root root     1649 11月 10 11:05 initial-setup-ks.cfg
    -rw-r--r--. 1 root root 52115827 11月 11 10:57 nacos-server-1.1.4.tar.gz
    -rw-r--r--. 1 root root  1032630 11月 11 11:07 nginx-1.16.1.tar.gz
    drwxr-xr-x. 2 root root        6 11月 10 11:09 公共
    drwxr-xr-x. 2 root root        6 11月 10 11:09 模板
    drwxr-xr-x. 2 root root        6 11月 10 11:09 视频
    drwxr-xr-x. 2 root root        6 11月 10 11:09 图片
    drwxr-xr-x. 2 root root        6 11月 10 11:09 文档
    drwxr-xr-x. 2 root root        6 11月 10 11:09 下载
    drwxr-xr-x. 2 root root        6 11月 10 11:09 音乐
    drwxr-xr-x. 2 root root        6 11月 10 11:09 桌面
    [root@localhost ~]# mkdir mynacos
    [root@localhost ~]# cp nacos-server-1.1.4.tar.gz  nginx-1.16.1.tar.gz  mynacos/
    [root@localhost ~]# cd mynacos/
    [root@localhost mynacos]# ll
    总用量 51908
    -rw-r--r--. 1 root root 52115827 11月 11 11:08 nacos-server-1.1.4.tar.gz
    -rw-r--r--. 1 root root  1032630 11月 11 11:08 nginx-1.16.1.tar.gz
    [root@localhost mynacos]# tar -zxvf nacos-server-1.1.4.tar.gz 
    nacos/LICENSE
    nacos/NOTICE
    nacos/target/nacos-server.jar
    nacos/conf/
    nacos/conf/schema.sql
    nacos/conf/nacos-mysql.sql
    nacos/conf/application.properties.example
    ...
    [root@localhost mynacos]# tar -zxvf nginx-1.16.1.tar.gz 
    nginx-1.16.1/
    nginx-1.16.1/auto/
    nginx-1.16.1/conf/
    nginx-1.16.1/contrib/
    nginx-1.16.1/src/
    nginx-1.16.1/configure
    nginx-1.16.1/LICENSE
    nginx-1.16.1/README
    
    ...
    [root@localhost mynacos]# ll
    总用量 51908
    drwxr-xr-x. 5 root root       72 11月 11 11:08 nacos
    -rw-r--r--. 1 root root 52115827 11月 11 11:08 nacos-server-1.1.4.tar.gz
    drwxr-xr-x. 8 1001 1001      158 8月  13 2019 nginx-1.16.1
    -rw-r--r--. 1 root root  1032630 11月 11 11:08 nginx-1.16.1.tar.gz
    [root@localhost mynacos]# cd nginx-1.16.1/
    
    [root@localhost nginx-1.16.1]# 
    
    
    

    1.4 安装nginx

    #先安装环境
    #yum -y install make zlib zlib-devel gcc-c++ libtool  openssl openssl-devel
    #编译安装
    #./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
    #make && install
    [root@localhost conf]# cd ..
    [root@localhost nginx]# cd sbin/
    [root@localhost sbin]# ll
    总用量 7472
    -rwxr-xr-x. 1 root root 3825512 11月 11 11:18 nginx
    
    [root@localhost sbin]# ./nginx
    [root@localhost sbin]# systemctl stop firewalld
    [root@localhost sbin]# ./nginx stop
    nginx: invalid option: "stop"
    [root@localhost sbin]# ./nginx stop
    
    
    

    在这里插入图片描述

    1.5 修改nginx 配置文件

    
           upstream nacos {
                server 192.168.85.10:3333;
                server 192.168.85.10:4444;
                server 192.168.85.10:5555;
        }
        
        
            location / {
                #root   html;
               # index  index.html index.htm;
               proxy_pass http://nacos;
            }
        #修改配置后记得重启nginx    
        #./nginx -s stop 
        #./nginx -c ../conf/nginx.conf
      
    

    1.6 nacos安装

    1.6.1 创建mysql 数据库

    首先将nacos/conf/nacos—mysql.sql文件下载:然后放到数据库中执行

    
    [root@localhost nacos]# cd conf
    [root@localhost conf]# sz nacos-mysql.sql 
    

    在这里插入图片描述

    1.6.2 nacos配置数据库 application.properties
    [root@localhost nacos]# cd conf/
    [root@localhost conf]# vim application.properties
    
    # 在配置文件底部添加如下文件
    spring.datasource.platform=mysql
     
    db.num=1
    db.url.0=jdbc:mysql://192.168.85.198:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
    db.user=root
    db.password=123456
    
    1.6.7 nacos 修改集群文件
    [root@localhost conf]# cp cluster.conf.example  cluster.conf
    [root@localhost conf]# vim cluster.conf
    
    
    #it is ip
    #example
    192.168.85.10:3333
    192.168.85.10:4444
    192.168.85.10:5555
    
    
    1.6.8 nacos 修改启动文件

    在这里插入图片描述

    在这里插入图片描述

    修改地方用红色圈出来了

    1.6.9 启动
    [root@localhost bin]# ./startup.sh -p 3333
    /usr/local/jdk/bin/java  -server -Xms2g -Xmx2g -Xmn1g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m -XX:-OmitStackTraceInFastThrow -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/root/mynacos/nacos/logs/java_heapdump.hprof -XX:-UseLargePages -Djava.ext.dirs=/usr/local/jdk/jre/lib/ext:/usr/local/jdk/lib/ext:/root/mynacos/nacos/plugins/cmdb:/root/mynacos/nacos/plugins/mysql -Xloggc:/root/mynacos/nacos/logs/nacos_gc.log -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=100M -Dnacos.home=/root/mynacos/nacos -Dloader.path=/root/mynacos/nacos/plugins/health -jar /root/mynacos/nacos/target/nacos-server.jar  --spring.config.location=classpath:/,classpath:/config/,file:./,file:./config/,file:/root/mynacos/nacos/conf/ --logging.config=/root/mynacos/nacos/conf/nacos-logback.xml --server.max-http-header-size=524288
    nacos is starting with cluster
    nacos is starting,you can check the /root/mynacos/nacos/logs/start.out
    [root@localhost bin]# ./startup.sh -p 4444
    /usr/local/jdk/bin/java  -server -Xms2g -Xmx2g -Xmn1g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m -XX:-OmitStackTraceInFastThrow -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/root/mynacos/nacos/logs/java_heapdump.hprof -XX:-UseLargePages -Djava.ext.dirs=/usr/local/jdk/jre/lib/ext:/usr/local/jdk/lib/ext:/root/mynacos/nacos/plugins/cmdb:/root/mynacos/nacos/plugins/mysql -Xloggc:/root/mynacos/nacos/logs/nacos_gc.log -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=100M -Dnacos.home=/root/mynacos/nacos -Dloader.path=/root/mynacos/nacos/plugins/health -jar /root/mynacos/nacos/target/nacos-server.jar  --spring.config.location=classpath:/,classpath:/config/,file:./,file:./config/,file:/root/mynacos/nacos/conf/ --logging.config=/root/mynacos/nacos/conf/nacos-logback.xml --server.max-http-header-size=524288
    nacos is starting with cluster
    nacos is starting,you can check the /root/mynacos/nacos/logs/start.out
    [root@localhost bin]# ./startup.sh -p 5555
    /usr/local/jdk/bin/java  -server -Xms2g -Xmx2g -Xmn1g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m -XX:-OmitStackTraceInFastThrow -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/root/mynacos/nacos/logs/java_heapdump.hprof -XX:-UseLargePages -Djava.ext.dirs=/usr/local/jdk/jre/lib/ext:/usr/local/jdk/lib/ext:/root/mynacos/nacos/plugins/cmdb:/root/mynacos/nacos/plugins/mysql -Xloggc:/root/mynacos/nacos/logs/nacos_gc.log -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=100M -Dnacos.home=/root/mynacos/nacos -Dloader.path=/root/mynacos/nacos/plugins/health -jar /root/mynacos/nacos/target/nacos-server.jar  --spring.config.location=classpath:/,classpath:/config/,file:./,file:./config/,file:/root/mynacos/nacos/conf/ --logging.config=/root/mynacos/nacos/conf/nacos-logback.xml --server.max-http-header-size=524288
    nacos is starting with cluster
    nacos is starting,you can check the /root/mynacos/nacos/logs/start.out
    [root@localhost bin]# 
    
    

    1.7 启动报错

    [root@localhost logs]# cat start.out 
    
    Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Could not create connection to database server. Attempted reconnect 3 times. Giving up.
    	at sun.reflect.GeneratedConstructorAccessor75.newInstance(Unknown Source)
    	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    	at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    	at com.mysql.jdbc.Util.handleNewInstance(Util.java:377)
    	at com.mysql.jdbc.Util.getInstance(Util.java:360)
    	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)
    	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:935)
    	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:924)
    	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:870)
    	at com.mysql.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:2144)
    	at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2069)
    	at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:790)
    	at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:44)
    	at sun.reflect.GeneratedConstructorAccessor73.newInstance(Unknown Source)
    
    

    发现启动不了,后来查了下,因为我用的数据库版本问题。导致nacos不能连接数据库;

    解决方案:

    nacos/plugins/mysql目录下放入mysql8.0的驱动包问题解决;

    1.8 启动访问

    http://192.168.85.10:1111/nacos

    在这里插入图片描述

    展开全文
  • Nacos 高可用特性

    2020-12-30 13:50:27
    知乎:一文详解 Nacos 高可用特性 客户端重试:当其中一台机器宕机时,为了不影响整体运行,客户端会存在重试机制 临时服务(Ephemeral):临时服务健康检查失败后会从列表中删除,常用于服务注册发现场景。 临时...

    高可用特性绝不是靠服务端多部署几个节点就可以获得的,而是要结合客户端使用方式、服务端部署模式、使用场景综合来考虑的一件事。
    知乎:一文详解 Nacos 高可用特性

    1. 客户端重试:当其中一台机器宕机时,为了不影响整体运行,客户端会存在重试机制
    2. 临时服务(Ephemeral):临时服务健康检查失败后会从列表中删除,常用于服务注册发现场景。
      临时服务使用的是 Nacos 为服务注册发现场景定制化的私有协议 distro,其一致性模型是 AP;
    3. 持久化服务(Persistent):持久化服务健康检查失败后会被标记成不健康,常用于 DNS 场景。
      持久化服务使用的是 raft 协议,其一致性模型是 CP
    4. 本地缓存文件 Failover 机制
    5. 心跳同步服务
      nacos-server 节点全部宕机,服务数据全部丢失。nacos-server 即使恢复运作,也无法恢复出服务,而心跳包含全部内容可以在心跳期间就恢复出服务,保证可用性。
      nacos-server 出现网络分区。由于心跳可以创建服务,从而在极端网络故障下,依旧保证基础的可用性。
    6. 集群部署模式高可用
      我们提到 Nacos 有两个一致性协议:distro 和 raft,distro 协议不会有脑裂问题,所以理论来说,节点数大于等于 2 即可;raft 协议的投票选举机制则建议是 2n+1 个节点。
      综合来看,选择 3 个节点是起码的,其次处于吞吐量和更高可用性的考量,可以选择 5 个,7 个,甚至 9 个节点的集群。
    展开全文
  • Nacos注册中心高可用集群搭建及开机启动 参考该博客: Nacos高可用注册中心搭建(Nacos HA)

    Nacos注册中心高可用集群搭建及开机启动

    参考该博客:

    Nacos高可用注册中心搭建(Nacos HA)

    展开全文
  • keepalived搭建Nacos高可用集群

    千次阅读 2020-08-20 15:39:23
    keepalived搭建nacos高可用集群 JDK 使用 jdk8 系统使用linux的Centos7.6版本(keepalived已经是系统基本的软件,业界广泛接受) 集群架构 官方给出的集群部署架构图 因此开源的时候推荐用户把所有服务列表放到一...
  • Nacos高可用集群搭建+MySQL持久化

    千次阅读 2020-03-25 18:26:15
    Nacos高可用集群搭建+MySQL持久化 之前讲述了Nacos单机版的简单安装,详情请参阅 Nacos之单机版安装 或者参考 官网,本文将进一步搭建一个生产可用级别的Nacos高可用集群,并使用MySQL数据库实现数据的持久化。 ...
  • 文章目录SpringCloud 微服务注册中心 - Nacos高可用前言一、重试机制二、一致性协议Distro协议distro协议的关键点distro 协议的工作流程如下Raft协议节点角色选举时间点:三、本地缓存文件 Failover 机制四、心跳同步...
  • Nacos高可用集群解决方案-Docker版本
  • Nacos高可用集群搭建

    2020-07-30 17:08:42
    nacos官方给出的集群架构图不太明确,下面我自己绘了一个图,接下来一步步安装测试: 安装准备 centos7环境 nacos-1.3.1 nginx-1.19.1 mysql-8.0.20 jdk-1.8+ 1.我这里安装时是先安装了一个虚拟机,然后再克隆两个...
  • 前言 ...直到 Spring Cloud 开始流行,其自带的 Eureka 进入了人们的视野,人们这才意识到原来注册中心还可以有其他的选择...再到后来,热衷于开源的阿里把目光也聚焦在了注册中心这个领域, Nacos 横空出世。 Kir.
  • Nacos集群版安装一、下载地址二、安装步骤1.解压后安装2.启动测试3.运行测试4.关闭三、集群配置1、将sql脚本拷贝放入自己linux的MySQL数据库中2、创建好持久化数据库3、备份配置文件4、备份cluster配置文件5、编辑...
  • 上篇博文我们介绍如何使用mysql做Nacos的数据持久化,在生产环境中,如果我们想让Nacos实现性能、高可用、可持续性的对外提供服务,我们要冗余服务,实现集群化,这篇博文我们就重点介绍如何使用docker来部署Nacos...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,240
精华内容 2,896
关键字:

nacos高可用