前情回顾:java
继续说说生产环境的Nacos搭建,经过上一篇《Spring Cloud Alibaba基础教程:Nacos的数据持久化》的介绍,咱们已经知道Nacos对配置信息的存储原理,在集群搭建的时候,必需要使用集中化存储,好比:MySQL存储。下面顺着上一篇的内容,继续下一去。经过本文,咱们将完成Nacos生产环境的搭建。mysql
根据官方文档的介绍,Nacos的集群架构大体以下图所示(省略了集中化存储信息的MySQL):git
下面咱们就来一步步的介绍,咱们每一步的搭建细节。github
对于数据源的修改,在上一篇《Nacos的数据持久》中已经说明原因,若是还不了解的话,能够先读一下这篇再回来看这里。spring
在进行集群配置以前,先完成对MySQL数据源的初始化和配置。主要分如下两步:sql
nacos-mysql.sql
,该文件能够在Nacos程序包下的conf目录下得到。conf/application.properties
文件,增长支持MySQL数据源配置,添加(目前只支持mysql)数据源的url、用户名和密码。配置样例以下:spring.datasource.platform=mysql db.num=1 db.url.0=jdbc:mysql://localhost:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true db.user=root db.password=
更多介绍与思考,可见查看上一篇《Nacos的数据持久化》。数据库
在Nacos的conf
目录下有一个cluster.conf.example
,能够直接把example
扩展名去掉来使用,也能够单首创建一个cluster.conf
文件,而后打开将后续要部署的Nacos实例地址配置在这里。apache
本文以在本地不一样端点启动3个Nacos服务端为例,能够以下配置:tomcat
127.0.0.1:8841 127.0.0.1:8842 127.0.0.1:8843
注意:这里的例子仅用于本地学习测试使用,实际生产环境必须部署在不一样的节点上,才能起到高可用的效果。另外,Nacos的集群须要3个或3个以上的节点,而且确保这三个节点之间是能够互相访问的。bash
在完成了上面的配置以后,咱们就能够开始在各个节点上启动Nacos实例,以组建Nacos集群来使用了。
因为本文中咱们测试学习采用了本地启动多实例的状况,与真正生产部署会有一些差别,因此下面分两种状况说一下,如何启动各个Nacos实例。
本地测试
本文中,在集群配置的时候,咱们设定了3个Nacos的实例都在本地,只是以不一样的端口区分,因此咱们在启动Nacos的时候,须要修改不一样的端口号。
下面介绍一种方法来方便地启动Nacos的三个本地实例,咱们能够将bin目录下的startup.sh
脚本复制三份,分别用来启动三个不一样端口的Nacos实例,为了能够方便区分不一样实例的启动脚本,咱们能够把端口号加入到脚本的命名中,好比:
而后,分别修改这三个脚本中的参数,具体以下图的红色部分(端口号根据上面脚本命名分配):
这里咱们经过-Dserver.port
的方式,在启动命令中,为Nacos指定具体的端口号,以实如今本机上启动三个不一样的Nacos实例来组成集群。
修改完3个脚本配置以后,分别执行下面的命令就能够在本地启动Nacos集群了:
sh startup-8841.sh sh startup-8842.sh sh startup-8843.sh
生产环境
在实际生产环境部署的时候,因为每一个实例分布在不一样的节点上,咱们能够直接使用默认的启动脚本(除非要调整一些JVM参数等才须要修改)。只须要在各个节点的Nacos的bin
目录下执行sh startup.sh
命令便可。
在Nacos的集群启动完毕以后,根据架构图所示,咱们还须要提供一个统一的入口给咱们用来维护以及给Spring Cloud应用访问。简单地说,就是咱们须要为上面启动的的三个Nacos实例作一个能够为它们实现负载均衡的访问点。这个实现的方式很是多,这里就举个用Nginx来实现的简单例子吧。
在Nginx配置文件的http段中,咱们能够加入下面的配置内容:
这样,当咱们访问:http://localhost:8080/nacos/
的时候,就会被负载均衡的代理到以前咱们启动的三个Nacos实例上了。这里咱们没有配置upstream
的具体策略,默认会使用线性轮训的方式,若是有须要,也能够配置上更为复杂的分发策略。这部分是Nginx的使用内容,这里就不做具体介绍了。
这里提一下我在尝试搭建时候碰到的一个问题,若是您也遇到了,但愿下面的说明能够帮您解决问题。
错误信息以下:
2019-02-20 16:20:53,216 INFO The host [nacos_server] is not valid Note: further occurrences of request parsing errors will be logged at DEBUG level. java.lang.IllegalArgumentException: The character [_] is never valid in a domain name. at org.apache.tomcat.util.http.parser.HttpParser$DomainParseState.next(HttpParser.java:926) at org.apache.tomcat.util.http.parser.HttpParser.readHostDomainName(HttpParser.java:822) at org.apache.tomcat.util.http.parser.Host.parse(Host.java:71) at org.apache.tomcat.util.http.parser.Host.parse(Host.java:45) at org.apache.coyote.AbstractProcessor.parseHost(AbstractProcessor.java:288) at org.apache.coyote.http11.Http11Processor.prepareRequest(Http11Processor.java:809) at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:384) at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:791) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1417) at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 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
项目:
若是您对这些感兴趣,欢迎star、follow、收藏、转发给予支持!