Spring Cloud 微服务项目实战
姚秋辰(姚半仙)
PayPal 研发经理
15861 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 38 讲
结束语 (1讲)
Spring Cloud 微服务项目实战
15
15
1.0x
00:00/00:00
登录|注册

08 | 服务治理:Nacos集群环境搭建

你好,我是姚秋辰。
上节课我们对 Nacos 功能体系有了全面的认识。今天我们就来动手搭建 Nacos 服务注册中心。通过这节课,你可以知道如何搭建一个高可用的 Nacos 服务集群,以及如何使用 MySQL 作为 Nacos 的底层数据存储方案。这些内容可以帮助你理解什么是“高可用架构”。
我们在做系统架构的时候,首要目标就是保障系统的高可用性。不管你的系统架构多么精妙,用的技术多么先进,如果系统的可用性无法得到保障,那么你做什么都是白忙活。
这就像我们的人生一样,事业、家庭、地位都是 0,健康才是一串 0 前面的那个 1,没有 1 则一切皆无。所以,系统的高可用性,就是系统架构层面的那个 1。
保障系统的高可用性有两个大道至简的方向。
避免单点故障:在做系统架构的时候,你应该假设任何服务器都有可能挂掉。如果某项任务依赖单一服务资源,那么这就会成为一个“单点”,一旦这个服务资源挂掉就表示整个功能变为不可用。所以你要尽可能消灭一切“单点”;
故障机器状态恢复:尽快将故障机器返回到故障前的状态。对于像 Nacos 这类中心化注册中心来说,因故障而下线的机器在重新上线后,应该有能力从某个地方获取故障发生前的服务注册列表。
那 Nacos 是如何解决上面这两个问题,来保证自己的高可用性的呢?很简单,就是构建服务集群。集群环境不仅可以有效规避单点故障引发的问题,同时对于故障恢复的场景来说,重新上线的机器也可以从集群中的其他节点同步数据信息,恢复到故障前的状态。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文详细介绍了如何搭建Nacos服务注册中心的集群环境,强调了系统架构中高可用性的重要性。通过下载Nacos Server、修改启动项参数、创建DB Schema和Table、添加集群机器列表以及启动Nacos Server等步骤,读者可以了解如何搭建一个高可用的Nacos服务集群,以及如何使用MySQL作为Nacos的底层数据存储方案。文章还提到了在实际项目中,如何正确配置微服务Client连接到Nacos集群的做法,以及提供虚拟IP的技术手段。最后,文章提出了思考题,鼓励读者在评论区留下自学笔记,以便更好地理解Nacos的功能特性和集成方案。整体而言,本文内容详实,适合想要深入了解Nacos服务注册中心搭建的读者。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Spring Cloud 微服务项目实战》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(53)

  • 最新
  • 精选
  • Unknown
    置顶
    这边windows本地 搭建的时候,端口不要连续,如果连续的话,在启动时候,会报端口占用 的错误 nacos 中的其他服务会占用相邻的端口grpc

    作者回复: 这个提醒很重要,我在示例里跨了很大的端口range,忘了提醒下同学们背后的原因了

    2022-02-10
    2
    34
  • ~
    置顶
    Intel 的 mac,如果启动 nacos 时候,报错: 「找不到或无法加载主类,原因: java.lang.ClassNotFoundException」,八成是你的 jdk 版本不是 8,可以参照这个博客解决(我是按照方案 2 改动脚本,成功启动)。https://blog.csdn.net/shentian885/article/details/120718915 另:老师能否出个加餐讲一下使用 docker 启动的方式,或者指点我一下吗?我根据你之前评论的链接尝试安装却失败了。主要原因我认为有二:1 是我把 MySQL 也通过 docker 安装了,nacos 启动时候会报错找不到 DataSource;2 是我不知道 nacos1 和 nacos2 两个容器之间的 ip 地址改怎么设置,是使用 docker 的「内部 ip(我也不清楚是不是这么叫)」,还是 localhost 直接设置,还是用我本机分配的内网 ip? 还麻烦老师解答一下,谢谢老师!!

    作者回复: 环境问题是蛮有意思的,排查起来可能很久没头绪,最后突然间柳暗花明。 你可以把docker看做是模拟了一个虚拟网卡,当你本地访问docker容器,实际上就像是访问了一个局域网内的另一个机器,所以localhost是找不到了,这时候用docker的分配给容器的ip访问就可以。如果你想和宿主机绑定同样的地址其实也是可以的,需要在容器内部做一些配置。 考虑到大部分同学都是使用windows,而且经常搭建各种虚机,我这里有一篇收藏的文章,是很久之前我配置windows的时候参考过得,同学如果也是用windows可以试着看看 https://stackoverflow.com/questions/33814696/how-to-connect-to-a-docker-container-from-outside-the-host-same-network-windo

    2022-01-07
    4
    3
  • 前行
    windows 环境下单机模拟集群部署,需要注意的是在两个 Nacos Server 的 conf 文件夹下 都配置 cluster.conf 文件,其他配置按照文章来,启动时在两个 Nacos Server 的 bin 文件下执行 .\startup.cmd 即可。

    作者回复: 十分到位!

    2021-12-29
    3
    8
  • Sally Kang 蓝
    姚老师 我有个问题需要请教。Nacos 2.0.3 集群环境搭建后,假设3个Nacos节点,点击集群管理 -> 节点列表 -> 任意下线某个节点后,该节点没办法重新上线(重新加入集群)。问题: 是Nacos没有提供集群节点上线功能?还是这是一个Bug?还是需要通过参数配置进行设置。

    作者回复: 哈哈,同学你这是玩游戏开了踢人挂。 我提示你一点你就知道为啥了。当你点完下线之后,你可以打开cluster.conf文件里看一下发生了什么变化。然后呢,不要重启server,你只要再尝试把踢掉的节点加到文件里去,之后再回到节点列表页面,观察一下变化。 再给同学一个小提示,怎么通过现象找到背后的源码,比如你可以看一下这个下线请求的url地址,然后找到nacos源码里这个地址对应的controller,顺着找下去,你就能看到更下一层的memberJoin,memberLeave的蛛丝马迹。比如->ServerMemberManager,以及nacos是如何notify其它节点变化的

    2021-12-29
    2
    6
  • yu
    Mac M1 历经劫难,终于启动了单机nacos docker pull zhusaidong/nacos-server-m1:2.0.3 docker run -d -p 8848:8848 -p 9848:9848 -p 9555:9555 --name nacos-server \ -e PREFER_HOST_MODE=hostname \ -e MODE=standalone \ -e SPRING_DATASOURCE_PLATFORM= \ -e MYSQL_SERVICE_HOST=127.0.0.1 \ -e MYSQL_SERVICE_DB_NAME=nacos \ -e MYSQL_SERVICE_PORT=3306 \ -e MYSQL_SERVICE_USER=root \ -e MYSQL_SERVICE_PASSWORD= \ -e MYSQL_SERVICE_DB_PARAM=allowPublicKeyRetrieval=true \ --restart on-failure \ zhusaidong/nacos-server-m1:2.0.3

    作者回复: 同学在M1上的探索很值得其他同学借鉴。 话说M2和M3也有了:)估计后来的同学还得踩一波坑

    2022-04-19
    3
    4
  • Magic
    我的是m1芯片,采用老师在评论中回复的镜像搭建的。暂时还没翻车😀 # 拉取适合m1的镜像。 docker pull zhusaidong/nacos-server-m1:2.0.3 # nacos-cluster1 docker run -d \ -e PREFER_HOST_MODE=hostname \ -e MODE=cluster \ -e NACOS_APPLICATION_PORT=8848 \ -e NACOS_SERVERS="192.168.96.126:8848 192.168.96.126:8948" \ -e SPRING_DATASOURCE_PLATFORM=mysql \ -e MYSQL_SERVICE_HOST=192.168.96.126 \ -e MYSQL_SERVICE_PORT=3306 \ -e MYSQL_SERVICE_USER=root \ -e MYSQL_SERVICE_PASSWORD=123456 \ -e MYSQL_SERVICE_DB_NAME=nacos \ -e NACOS_SERVER_IP=192.168.96.126 \ -p 8848:8848 \ --name my-nacos1 \ zhusaidong/nacos-server-m1:2.0.3 # nacos-cluster2 docker run -d \ -e PREFER_HOST_MODE=hostname \ -e MODE=cluster \ -e NACOS_APPLICATION_PORT=8948 \ -e NACOS_SERVERS="192.168.96.126:8848 192.168.96.126:8948" \ -e SPRING_DATASOURCE_PLATFORM=mysql \ -e MYSQL_SERVICE_HOST=192.168.96.126 \ -e MYSQL_SERVICE_PORT=3306 \ -e MYSQL_SERVICE_USER=root \ -e MYSQL_SERVICE_PASSWORD=123456 \ -e MYSQL_SERVICE_DB_NAME=nacos \ -e NACOS_SERVER_IP=192.168.96.126 \ -p 8948:8948 \ --name my-nacos2 \ zhusaidong/nacos-server-m1:2.0.3

    作者回复: 坦克车,翻不了

    2022-02-14
    4
    3
  • 密码123456
    遇到了一个问题,目录不能用中文,目录不能用中文,目录不能用中文。

    作者回复: 特殊字符、中文、空格,特别容易踩坑

    2022-01-25
    3
  • kernel
    1、用腾讯云搭建nacos集群,在配置cluster.conf 后,启动,会在配置文件中多了一个 内网IP+端口?这是为什么? 10.0.16.14:8948 --- 这个是启动后自动加上的,对应的IP是腾讯云的内网ip 101.42.237.141:8848 101.42.237.141:8948 2、在idea中起服务,会报这个错误 failed to req API:/nacos/v1/ns/instance after all servers([101.42.237.141:8848]) tried: ErrCode:400 网上查是说cluster.conf文件中配置了其他nacos时,若其他未启动,则会出现上述报错!是不是那个内网ip+端口导致的?

    作者回复: 我倒是没有在腾讯云玩过,我怀疑IP地址填错了,Nacos发现当前instance不在列表里所以主动把自个儿添加了进去。同学你看下Nacos启动的时候,在启动日志里Nacos图像旁边打印的IP是什么,然后在Nacos的application.properties里通过nacos.inetutils.ip-address=你的IP,把这个固定IP绑定上去,然后在启动试试。

    2022-01-18
    2
    3
  • 码小呆
    一次就搭建成功了哇

    作者回复: 简直神枪手! 我们都是神枪手,每一颗子弹消灭一个队友

    2022-02-23
    2
  • Geek_ebdb72
    我用的docker-compose搭建的但是启动总是报no datasource set 请问有交流群么

    作者回复: 大概率是两个原因跑不了:1)db.url或者用户名密码设置的不正确 2)Docker镜像中使用localhost/127.0.0.1访问不到镜像外资源,换个真实ip就好了。 同学朝这两个方向排查下吧

    2022-02-11
    3
    2
收起评论
显示
设置
留言
53
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部