Linux系统安装部署nacos集群:基于nacos2.0.3
目录
1.将 cluster.conf.example 文件复制一份
前言
在SpringCloudAlibaba这个微服务组合框架中,nacos是必不可少的一个组件。安装部署nacos渐渐地成了我们程序员的一个基本功,或者说是有没有真正使用过或运用过的一个参考的标志。
本篇文章是关于Linux系统安装部署nacos集群的介绍,安装方式是采用安装包的方式,而yum安装方式和docker安装方式,本篇文章不涉及。原因大致如下:
1.yum安装方式
这种方式更多的时候个人练习或者互联网公司或者公司网络没有做物理隔离的公司。
据我所知,银行、证券(包含期货、基金、外汇)等公司的网络都进行了物理隔离,而yum安装方式需要联网,这个时候就不适用了。
另外,安装包安装方式,更有利于个人了解熟悉nacos的项目结构。当然下载源码,结构更清晰。
2.docker安装方式
虽然这种方式更简单,但是同样需要联网。其次,很多公司,甚至可以说站多数的公司的项目并没有进行容器化,或者说采用云原生层面的架构。如果单看网上的介绍,貌似全世界的公司都已经是云原生了,其实不然,采用MVC、Linux系统的公司多的是,而且还是占大多数。这就好比,在知乎上,年收入人均百万,可惜那都是做梦,中国人的可支配收入才多少?
当然我们不是否定以上两种方式,只是对此做个说明而已,不喜勿喷。
下面我们开始我们今天的主题。
一、前置条件
安装部署nacos集群之前,需要一些前置条件。
1.操作系统或者虚拟机上安装jdk,版本>=8
2.下载好nacos2.0.3的压缩包
关于安装jdk的教程,网上很多,这里给大家一篇我个人的文章:
下载nacos安装包,可以从官网下载。
地址:https://github.com/alibaba/nacos/tags
找到nacos2.0.3的安装包下载即可。由于这个安装包的地址在国外,有时候会下载很慢,甚至是网页打不开,大家可以下载源码,然后通过maven命令打包,打成jar包之后再进行安装。
记住,下载源码的时候同样需要选择好对应的版本。
源码地址:https://github.com/alibaba/nacos
这两个前置条件准备好之后,需要将下载好的nacos安装包上传到服务器上,上传的工具大家可以自行选择。至于上传的位置或者说是目录,这个看个人喜好吧,或者公司项目中的约定。我个人的下载到个人的home目录下面新建了一个software的目录,这里专门用来存放各种安装包。
到了这里,我们的前置条件,或者说准备工作就做好了。
二、解压
安装目录一般在 /usr/local 目录下,我们可以在此目录下新建一个目录nacos
mkdir nacos
在安装包所在的目录,将安装包解压到这个目录下:
tar -zxvf nacos-server-2.0.3.tar.gz /usr/local/nacos
注意,通过这个命令解压之后,会在 /use/local/nacos 目录下又生成了一个nacos目录,如果你不喜欢这种方式,在上一步,可以不建这个nacos目录,直接解压到 /usr/local目录。这样,就会有一层的nacos目录了。我之所以这么做,是因为我将里面一层的nacos目录修改为了对应的nacos版本,为的是对不同版本的nacos做区分。
下图是nacos解压后的目录:
至此,解压工作完毕。
三、部署
进入到nacos的conf目录,这是nacos的配置目录。
1.将 cluster.conf.example 文件复制一份
cp cluster.conf.example cluster.conf
2.编辑 cluster.conf文件
vim cluster.conf
添加你将要部署nacos服务器的ip和端口:
3.注意事项
这里我们是在一台服务器上运行三台nacos服务实例,所以ip是一样的,但是端口是不一样的,这种部署方式我们称之为伪集群,也算是集群的一种。
3.1.端口冲突问题
如果是这种部署方式,切记,端口不能是连续的。什么意思呢?nacos默认端口是8848,如果我们部署三个nacos实例,端口号分别为:8847/8848/8849。如果是这样的话,在nacos2.0以上的版本是运行不起来的,为什么呢?因为这样会导致端口冲突。
为什么会端口冲突呢?因为:
因为nacos2.0之后,nacos会占用四个端口,如果伪集群采用的端口是连号方式,会导致端口被占用。比如,我们端口采用8848/8849/8859,则会出现端口冲突问题。nacos2.0会占用的4个端口为:
1.nacos端口:8848-nacos默认端口;
2.raft协议端口:7848-raft port,即raft协议端口;
3.grpc协议两个端口:9848-grpc协议端口(nacos端口+1000),9849-grpc协议端口(nacos+1001)
如果是连号的,那么上一个端口号对应的grpc协议的端口之一(+1001)就会和下一个端口号对应的grpc协议(+1000)端口冲突。
解决办法:
不要连号,最简单的就是隔一个端口号用一个,比如8846/8848/8850。
我们这次就采用这种方式来部署,结果是成功的。
关于这个问题,还有一个类似的问题,nacos官网有对一个的issue:
同一台服务器, 启动nacos集群,出现端口占用问题,具体问题如下 (版本号 : 2.0.0-ALPHA.2) #4873
上面都说到了,不知道是哪个端口冲突了,这里我可以我个人的亲身经验与教训告诉大家,是raft协议端口已被占用了。也就是说如果我们配置了一个端口是8848,那么raft协议端口就是7848,是这个端口已被占用了,这是什么原因呢?
我不知道别人的具体情况,我这里遇到的都是nacos启动失败,修改了问题再启动就开始报端口冲突了。这个端口冲突就是raft协议端口已被占用,也就是主端口-1000的那个端口。因为我们的nacos实例刚开始运行时,raft协议占用的端口已经打开并被占用,nacos启动失败,这个端口不会被释放杀掉,所以导致再次启动的时候就已经被占用了。我们可以手动杀掉这个进程即可。
关于如何杀掉这个进行,可以参考:
4.修改application.properties文件
同样在conf目录copyapplication.properties.example文件
cp application.properties.example application.properties
编辑application.properties文件:
vim application.properties
配置nacos连接的数据库:
注意看上图的db.user=root。默认的配置是db.user.0。
其实,后面跟不跟.0都是一样的,因为我们只配置了一台数据库。最终我的8846是采用的默认方式,8848采用的是db.user=root的方式,结构都是可以正常运行的。
当然如果你配置了数据库的主备模式,也就是说有多台mysql的话,这里可以配置多个,此时就需要分别指定了。
5.可能遇到的问题
到了这里可以说,基本的配置修改差不多了。但是也不尽然,具体有以下几种情况:
5.1.内存不足
如果虚拟机内存比较小的话,启动nacos实例的时候可能会出现内存不足或无法分配内存的情况,下面是我遇到的情况。当时是因为虚拟机内存占用过高,当时内存和交换内存全部100%。没办法我就把虚拟机重启了,然后就好了。
如果你的nacos版本过低,可能会出现这种情况,就是nacos本身启动的内存过小。如果是nacos2.0.3版本的则不存在这种情况,我们看它的启动的内存配置:
less startup.sh
看上面红框的配置,就是2.0.3版本的nacos的jvm配置。
5.2.修改伪集群的配置
关于这一点,和上面是一个道理,在2.0.3版本同样不需要修改。我们同样查看nacos的启动配置:
如果不是这个版本,版本过低的话,伪集群部署方式可以修改配置,修改的方法,请参考文章:
至此,conf目录下的配置修改完毕。
6.导入nacos集群需要的库表
但是整个流程并没有结束,需要将nacos集群模式需要的库表导入到我们上面在application.properties文件中配置的数据库中。
首先,我们创建一个nacos_config库;
其次,我们将conf目录下的nacos-mysql.sql文件下载到本地电脑,然后在mysql数据库中执行这个sql,这个SQL其实就是nacos集群需要的建表语句。
less nacos-mysql.sql
下图是nacos表的其中一个:
如果不方便下载到本地电脑的话,可以在服务器上执行该SQL。最终的库表如下:
至此conf目录的配置修改与创建完毕。
然后回到nacos的主目录,进入bin目录,如果需要可以编辑startup.sh文件,不需要的话就不用管。我们的nacos2.0.3版本不需要修改。
vim startup.sh
我们也可以看一下bin目录的文件:
如果没记错的话,bin目录下只有上图的4个绿色的文件,其余的都是我nacos运行之后生成的,不过这个不重要了。上图4个绿色的文件,其实也就是运行脚本。其中以sh结尾的是linux环境的nacos启动和关闭的脚本,我们到时候运行startup.sh和shutdown.sh就可以启动和关闭nacos了。以cmd结尾的是windows系统的脚本。我们可以通过win + r输入cmd打开dos窗口。
至此,nacos的通用配置修改完毕。
7.集群化配置
因为我们是为了搭建nacos集群,因为我们是一台服务器上部署三台nacos实例,所以需要三个nacos配置,也就是说,需要将我们的解压后的nacos文件拷贝三份。如果是真实的集群,也就是一台服务器上部署一台nacos实例的话,则不需要这么操作了。
我们将nacos拷贝三份,同时将该文件名以对应的端口结尾:
cp -r nacos nacos-8846cp -r nacos nacos-8848cp -r nacos nacos-8850
然后,分别进入到对应的nacos实例下的conf文件,修改application.properties文件的端口:
分别将nacos8846/8848/8850的application.properties文件的端口修改对应好。
至此,我们的nacos的安装配置部署就好了。
8.运行nacos
我们分别运行三个文件的startup.sh文件,可以分别进入到对应目录运行,也可以在一个目录中通过指定路径来运行,可以采用以下命令运行nacos:
./startup.sh# 或者sh startup.sh
或者回到nacos的三个实例文件的上一层目录运行:
./nacos-8846/bin/startup.sh ./nacos-8846/bin/startup.sh ./nacos-8850/bin/startup.sh
运行之后,我们可以打开上图中的红框提示的文件——需要另外开一个命令窗口来观察,当然不开也不影响,只是你需要来回切换目录不方便:
tail -f /usr/local/nacos/nacos-2.0.3/nacos-8848/logs/start.out
上面的命令是实时查看我们的启动日志的,如果你不方便也可以在nacos运行之后再查看:
less /usr/local/nacos/nacos-2.0.3/nacos-8848/logs/start.out
上面的截图没有对应我们刚才运行的50端口,只是截图不一致而已。但是我们只需要看到提示成功的日志即可。
9.登陆nacos控制台
然后我们在浏览器打开对应的nacos的控制台地址:
http://192.168.247.128:8846/nacos/index.html
需要换成你自己的ip和端口。
默认的账号和密码都是nacos,输入之后查看集群管理的节点列表:
至此,我们的三台nacos服务实例已经全部部署成功,且访问nacos成功,也看到了集群管理里面的阶段列表,已经有了三台nacos实例,并一一成功部署。
10.防火墙问题
如果你的启动日志显示了成功,但是你通过浏览器打开nacos的控制台失败,那最大的可能就是你的服务器对应的端口的防火墙没有打开。
查询指定端口是否已经开放,返回yes/no。也有可能返回firewalld is not running,此时需要打开防火墙在开放端口。
firewall-cmd --query-port=8848/tcp
添加指定需要开放的端口:
firewall-cmd --add-port=8848/tcp --permanent
重载入添加的端口:
firewall-cmd --reload
注意:
如果没有这一步,防火墙端口的打开是不生效的,亲测过!这个和修改/etc/profile文件之后是一样的,只不过是使它立即生效的方法不一样而已。
通过上图我们看到,刚开始8848是yes,8846和8850是no,打开防火墙之后全部是yes了,这个时候你的nacos应该就可以完全部署成功了!
总结
最后我们做一个总结:
必须安装jdk;
下载nacos-server-2.0.3.tar.gz压缩包;
上传压缩包;
解压压缩包;
修改conf目录的application.properties文件的数据库连接;
修改conf目录的cluster.conf的集群配置;
将修改好的文件复制三份(如果部署多个,可以是多份);
分别修改三个nacos的application.properties文件的端口;
分别运行三个nacos的bin目录的startup.sh文件;
分别打开浏览器输入http://192.168.247.128:8846/nacos/index.html访问nacos控制台;
打开防火墙。
(o゜▽゜)o☆[BINGO!]
与君共勉,砥砺前行,不负此生!
祝好运!
来源地址:https://blog.csdn.net/qq_42971035/article/details/127174591
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341