点击蓝色“程序猿DD”关注我哟

《Spring Cloud Alibaba基础教程》连载中,关注我一起学习!前情回顾:

  • 《使用Nacos实现服务注册与发现》

  • 《支持的几种服务消费方式》

  • 《使用Nacos作为配置中心》

  • 《Nacos配置的加载规则详解》

  • 《Nacos配置的多环境管理》

  • 《Nacos配置的多文件加载与共享配置》

  • 《Nacos的数据持久化》

继续说说生产环境的Nacos搭建,通过上一篇《Nacos的数据持久化》的介绍,我们已经知道Nacos对配置信息的存储原理,在集群搭建的时候,必须要使用集中化存储,比如:MySQL存储。下面顺着上一篇的内容,继续下一去。通过本文,我们将完成Nacos生产环境的搭建。

集群搭建

根据官方文档的介绍,Nacos的集群架构大致如下图所示(省略了集中化存储信息的MySQL):

下面我们就来一步步的介绍,我们每一步的搭建细节。

MySQL数据源配置

对于数据源的修改,在上一篇《Nacos的数据持久》中已经说明缘由,如果还不了解的话,可以先读一下这篇再回来看这里。

在进行集群配置之前,先完成对MySQL数据源的初始化和配置。主要分以下两步:

  • 第一步:初始化MySQL数据库,数据库初始化文件: nacos-mysql.sql,该文件可以在Nacos程序包下的conf目录下获得。

  • 第二步:修改 conf/application.properties文件,增加支持MySQL数据源配置,添加(目前只支持mysql)数据源的url、用户名和密码。配置样例如下:

  1. spring.datasource.platform=mysql

  2. db.num=1

  3. db.url.0=jdbc:mysql://localhost:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true

  4. db.user=root

  5. db.password=

更多介绍与思考,可见查看上一篇《Nacos的数据持久化》。

集群配置

在Nacos的 conf目录下有一个 cluster.conf.example,可以直接把 example扩展名去掉来使用,也可以单独创建一个 cluster.conf文件,然后打开将后续要部署的Nacos实例地址配置在这里。

本文以在本地不同端点启动3个Nacos服务端为例,可以如下配置:

  1. 127.0.0.1:8841

  2. 127.0.0.1:8842

  3. 127.0.0.1:8843

注意:这里的例子仅用于本地学习测试使用,实际生产环境必须部署在不同的节点上,才能起到高可用的效果。另外,Nacos的集群需要3个或3个以上的节点,并且确保这三个节点之间是可以互相访问的。

启动实例

在完成了上面的配置之后,我们就可以开始在各个节点上启动Nacos实例,以组建Nacos集群来使用了。

由于本文中我们测试学习采用了本地启动多实例的情况,与真正生产部署会有一些差异,所以下面分两种情况说一下,如何启动各个Nacos实例。

本地测试

本文中,在集群配置的时候,我们设定了3个Nacos的实例都在本地,只是以不同的端口区分,所以我们在启动Nacos的时候,需要修改不同的端口号。

下面介绍一种方法来方便地启动Nacos的三个本地实例,我们可以将bin目录下的 startup.sh脚本复制三份,分别用来启动三个不同端口的Nacos实例,为了可以方便区分不同实例的启动脚本,我们可以把端口号加入到脚本的命名中,比如:

  • startup-8841.sh

  • startup-8842.sh

  • startup-8843.sh

然后,分别修改这三个脚本中的参数,具体如下图的红色部分(端口号根据上面脚本命名分配):

这里我们通过 -Dserver.port的方式,在启动命令中,为Nacos指定具体的端口号,以实现在本机上启动三个不同的Nacos实例来组成集群。

修改完3个脚本配置之后,分别执行下面的命令就可以在本地启动Nacos集群了:

  1. sh startup-8841.sh

  2. sh startup-8842.sh

  3. sh startup-8843.sh

生产环境

在实际生产环境部署的时候,由于每个实例分布在不同的节点上,我们可以直接使用默认的启动脚本(除非要调整一些JVM参数等才需要修改)。只需要在各个节点的Nacos的 bin目录下执行 sh startup.sh命令即可。

Proxy配置

在Nacos的集群启动完毕之后,根据架构图所示,我们还需要提供一个统一的入口给我们用来维护以及给Spring Cloud应用访问。简单地说,就是我们需要为上面启动的的三个Nacos实例做一个可以为它们实现负载均衡的访问点。这个实现的方式非常多,这里就举个用Nginx来实现的简单例子吧。

在Nginx配置文件的http段中,我们可以加入下面的配置内容:

这样,当我们访问: http://localhost:8080/nacos/的时候,就会被负载均衡的代理到之前我们启动的三个Nacos实例上了。这里我们没有配置 upstream的具体策略,默认会使用线性轮训的方式,如果有需要,也可以配置上更为复杂的分发策略。这部分是Nginx的使用内容,这里就不作具体介绍了。

这里提一下我在尝试搭建时候碰到的一个问题,如果您也遇到了,希望下面的说明可以帮您解决问题。

错误信息如下:

  1. 2019-02-20 16:20:53,216 INFO The host [nacos_server] is not valid

  2. Note: further occurrences of request parsing errors will be logged at DEBUG level.

  3. java.lang.IllegalArgumentException: The character [_] is never valid in a domain name.

  4.    at org.apache.tomcat.util.http.parser.HttpParser$DomainParseState.next(HttpParser.java:926)

  5.    at org.apache.tomcat.util.http.parser.HttpParser.readHostDomainName(HttpParser.java:822)

  6.    at org.apache.tomcat.util.http.parser.Host.parse(Host.java:71)

  7.    at org.apache.tomcat.util.http.parser.Host.parse(Host.java:45)

  8.    at org.apache.coyote.AbstractProcessor.parseHost(AbstractProcessor.java:288)

  9.    at org.apache.coyote.http11.Http11Processor.prepareRequest(Http11Processor.java:809)

  10.    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:384)

  11.    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)

  12.    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:791)

  13.    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1417)

  14.    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)

  15.    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)

  16.    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)

  17.    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)

  18.    at java.lang.Thread.run(Thread.java:748)

主要原因是,一开始在配置 upstream的时候,用了 nacos_server作为名称,而在Nacos使用的Tomcat版本中不支持 _符号出现在域名位置,所以上面截图给出的 upstream的名称是 nacosserver,去掉了 _符号。

到这里,Nacos的集群搭建就完成了!我们可以通过Nginx配置的代理地址: http://localhost:8080/nacos/来访问Nacos,在Spring Cloud应用中也可以用这个地址来作为注册中心和配置中心的访问地址来配置。读者可以使用文末的代码示例来修改原来的Nacos地址来启动,看是否可以获取配置信息来验证集群的搭建是否成功。也可以故意的关闭某个实例,来验证Nacos集群是否还能正常服务。

深入思考

在Nacos官方文档的指引下,Nacos的集群搭建总体上还是非常顺畅的,没有什么太大的难度。但是值得思考的一个问题跟在上一篇中讲数据持久化的思考类似,作为一个注册中心和配置中心,Nacos的架构是否显得太过于臃肿?除了Nacos自身之外,还需要依赖更多的中间件来完成整套生产环境的搭建,相较于其他的可以用于服务发现与配置的中间件来说,就不那么有优势了。尤其对于小团队来说,这样的复杂度与成本投入,也是在选型的时候需要去考虑的。

代码示例

本文介绍内容的客户端代码,示例读者可以通过查看下面仓库中的 alibaba-nacos-config-client项目:

  • Github:https://github.com/dyc87112/SpringCloud-Learning/

  • Gitee:https://gitee.com/didispace/SpringCloud-Learning/

如果您对这些感兴趣,欢迎star、follow、收藏、转发给予支持!

号外:最近整理了之前编写的一系列内容做成了PDF,关注我并回复相应口令获取:

001 :领取《Spring Boot基础教程》

- 002 :领取《Spring Cloud基础教程》

更多内容陆续奉上,敬请期待 

- END -

 近期热文:

  • 我为啥不看好ServiceMesh

  • GitHub 寻宝指南

  • “编程不规范,同事两行泪!”

  • 虎牙直播在微服务改造方面的实践和总结

  • 有赞搜索系统的架构演进

  • 为什么分库分表后不建议跨分片查询

  • 别看不起分区表:我要为你点个赞

  • 在前后端分离的路上承受了多少痛?

  • 中台是个什么鬼?

2019

我在星球与大家聊聊技术人的斜杠生活

看完,赶紧点个“好看”鸭

点鸭点鸭

↓↓↓↓

Spring Cloud Alibaba基础教程:Nacos的集群部署相关推荐

  1. Spring Cloud Alibaba基础教程:使用Nacos实现服务注册与发现

    自Spring Cloud Alibaba发布第一个Release以来,就备受国内开发者的高度关注.虽然Spring Cloud Alibaba还没能纳入Spring Cloud的主版本管理中,但是凭 ...

  2. Spring Cloud Alibaba 基础教程:Nacos 生产级版本 0.8.0

    Spring Cloud Alibaba 基础教程:Nacos 生产级版本 0.8.0 昨晚Nacos社区发布了第一个生产级版本:0.8.0.由于该版本除了Bug修复之外,还提供了几个生产管理非常重要 ...

  3. Spring Cloud Alibaba基础教程:Nacos的数据持久化

    <Spring Cloud Alibaba基础教程>连载中,关注我一起学习!前情回顾: <使用Nacos实现服务注册与发现> <支持的几种服务消费方式> <使 ...

  4. Spring Cloud Alibaba基础教程:Nacos 生产级版本 0.8.0

    昨晚Nacos社区发布了第一个生产级版本:0.8.0.由于该版本除了Bug修复之外,还提供了几个生产管理非常重要的特性,所以觉得还是有必要写一篇讲讲这次升级,在后续的文章中也都将以0.8.0版本为基础 ...

  5. Spring Cloud Alibaba基础教程:Sentinel Dashboard中修改规则同步到Nacos

    上一篇我们介绍了如何通过改造Sentinel Dashboard来实现修改规则之后自动同步到Apollo.下面通过这篇,详细介绍当使用Nacos作为配置中心之后,如何实现Sentinel Dashbo ...

  6. Spring Cloud Alibaba基础教程:Nacos的数据持久化 1

    前情回顾: <Spring Cloud Alibaba基础教程:使用Nacos实现服务注册与发现> <Spring Cloud Alibaba基础教程:支持的几种服务消费方式> ...

  7. Spring Cloud Alibaba基础教程:Nacos配置的多文件加载与共享配置

    <Spring Cloud Alibaba基础教程>连载中,关注我一起学期!前情回顾: <使用Nacos实现服务注册与发现> <支持的几种服务消费方式> <使 ...

  8. Spring Cloud Alibaba基础教程:Nacos配置的多环境管理

    <Spring Cloud Alibaba基础教程>连载中,关注我一起学期!前情回顾: <使用Nacos实现服务注册与发现> <支持的几种服务消费方式> <使 ...

  9. Spring Cloud Alibaba基础教程:Nacos配置的加载规则详解

    <Spring Cloud Alibaba基础教程>连载中,关注我一起学期!前情回顾: <使用Nacos实现服务注册与发现> <支持的几种服务消费方式> <使 ...

最新文章

  1. sysname数据类型是什么
  2. 控件属性、事件持久化
  3. 在ROS中开始自主机器人仿真 - 2 让turtlebot跑起来
  4. mysql数据库 常用函数_《MySQL数据库》常用函数整理
  5. UE4 Fix – “Lighting build failed. Swarm failed to kick off.”
  6. 存在链接注入漏洞_【安全提示】CNVD发布上周关注度较高的产品安全漏洞(20200817-20200823)...
  7. vs2017怎么安装python_vs2017怎么添加python
  8. 福昕阅读器最新注册方法
  9. Java 基础高频面试题(2022年最新版)
  10. Mac使用技巧:关闭系统自动更新
  11. style = “color:####“包含的颜色名称对照表
  12. 关于GeForce Experience更新驱动显示图形驱动程序安装失败
  13. 实验四、SPOOLing技术
  14. 华为od面试java经历
  15. chrome html 打印预览,Chrome打印预览错误
  16. VS2005使用easyx图形库graphics.h链接过程出错:error LNK2001: 无法解析的外部符号 __iob
  17. 谈谈 雷达信号处理之脉冲压缩
  18. 星汉未来成为 FinOps 产业标准生态联盟首批会员
  19. eclipse看不到android设备,为什么Eclipse的Android设备选择器没有显示我的Android设备?...
  20. 金税 TC718K 驱动

热门文章

  1. python class 初始化顺序
  2. java jdk windows环境 下载安装配置环境变量
  3. goland 设置project gopath
  4. linux shell 得到当前时间
  5. C语言实现ifconfig获取网卡接收和发送流量统计
  6. 服务器硬盘坏道修复教程视频,硬盘坏道修复工具 操作教程
  7. linux删除文件夹命令6,linux 结合find命令进行文件的删除
  8. C++ string中find ,rfind 等函数 用法总结及示例
  9. Design Pattern - Chain of Responsibility(C#)
  10. 问题集锦(21-25)