Spring Cloud Alibaba基础教程:Nacos的集群部署
继续说说生产环境的Nacos搭建,通过上一篇[《Spring Cloud Alibaba基础教程:Nacos的数据持久化》的介绍,我们已经知道Nacos对配置信息的存储原理,在集群搭建的时候,必须要使用集中化存储,比如:MySQL存储。下面顺着上一篇的内容,继续下一去。通过本文,我们将完成Nacos生产环境的搭建。
集群搭建
根据官方文档的介绍,Nacos的集群架构大致如下图所示(省略了集中化存储信息的MySQL):
下面我们就来一步步的介绍,我们每一步的搭建细节。
MySQL数据源配置
对于数据源的修改,在上一篇[《Nacos的数据持久》]中已经说明缘由,如果还不了解的话,可以先读一下这篇再回来看这里。
在进行集群配置之前,先完成对MySQL数据源的初始化和配置。主要分以下两步:
- 第一步:初始化MySQL数据库,数据库初始化文件:
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实例地址配置在这里。
本文以在本地不同端点启动3个Nacos服务端为例,可以如下配置:
127.0.0.1:8841 127.0.0.1:8842 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集群了:
sh startup-8841.sh sh startup-8842.sh 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的使用内容,这里就不作具体介绍了。
这里提一下我在尝试搭建时候碰到的一个问题,如果您也遇到了,希望下面的说明可以帮您解决问题。
错误信息如下:
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
项目:
- Github:https://github.com/dyc87112/SpringCloud-Learning/
- Gitee:https://gitee.com/didispace/SpringCloud-Learning/
如果您对这些感兴趣,欢迎star、follow、收藏、转发给予支持!
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
【阿里Java技术进阶】官方钉群直播大全(持续更新)
由于我们【阿里Java技术进阶】官方钉群中有粉丝私信小编,去年的直播课怎么在群中看不了了(ps:钉群可保存3个月内的直播回放),因此小编特别搜集了从2018年钉群成立到现在的所有直播内容,快快收藏起来,之后本文会持续更新哦~ 以下为【阿里Java技术进阶】钉钉群往期全部的直播内容: 云栖社区特邀专家徐雷——Java Spring Boot开发实战系列课程: 讲师介绍:资深架构师,MongoDB中文社区联席主席,吉林大学计算机学士,上海交通大学硕士。从事了 10年+开发工作,专注于分布式架构,Java Spring Boot、Spring Cloud、MongoDB、Redis。 喜欢专研技术问题,擅长讲课,《MongoDB实战》第2版、《24种云计算架构设计模式》译者,2018年5月受邀成为《阿里巴巴Java和MongoDB技术认证》讲师
- 下一篇
如何选择最适合二次开发的GPS定位系统,专注位置行业二次开发
GPS行业应用系统开发是一个复杂的体系,涉及到底层跟硬件协议的对接,数据层的处理优化入库,然后业务层的展示优化处理等!对于不是从事这个行业的开发者有位置行业项目要开发最好的方式就是买一套成熟的通用的GPS定位系统代码来进行二次开发!如果从零开始开发将会有巨大的开发工作量并且要将前人趟过的坑在趟一遍;等于重复造轮子,会消耗很长的时间去验证!显然这种方法并不能达到快速开发应用上线投入使用的效果! GPSBD是一套专为二次开发而设计的GPS定位系统,由安徽东位信息科技有限公司根据多年位置行业经验专为二次开发而量身定制的GPS定位系统;系统集成了实时定位,轨迹回放,电子围栏,统计报表,指令控制,报警提醒等位置行业核心功能于一体;集成了市面上主流的几十种车机通信协议,开发者无需对接任何协议即可快速接入使用,并且我们也支持接入定制硬件的私有协议方案,帮助接入私有协议的硬件终端! GPSBD通用系统采用前后端分离的架构以及模块之间解耦的特性灵活的帮助开发者去调整业务层应用体系;前后端分离的架构可以使得多人协同开发成为现实,传统结构会有改动一处,全局配合的情况,这种模式几乎是没有办法去做二次开发应用的...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- SpringBoot2整合Redis,开启缓存,提高访问速度
- CentOS6,CentOS7官方镜像安装Oracle11G
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- Red5直播服务器,属于Java语言的直播服务器
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- 2048小游戏-低调大师作品