热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Linux系统安装部署nacos集群:基于nacos2.0.3

目录前言1.yum安装方式2.docker安装方式一、前置条件1.操作系统或者虚拟机上安装jdk,版本82.下载好nacos2.0.3的压缩包二、解压

目录

前言

1.yum安装方式

2.docker安装方式

一、前置条件

1.操作系统或者虚拟机上安装jdk,版本>=8

2.下载好nacos2.0.3的压缩包

二、解压

三、部署

 1.将 cluster.conf.example 文件复制一份

 2.编辑 cluster.conf文件

3.注意事项

3.1.端口冲突问题

因为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)

4.修改application.properties文件

5.可能遇到的问题

5.1.内存不足

5.2.修改伪集群的配置

6.导入nacos集群需要的库表

7.集群化配置

8.运行nacos

9.登陆nacos控制台

10.防火墙问题

总结




前言

在SpringCloudAlibaba这个微服务组合框架中,nacos是必不可少的一个组件。安装部署nacos渐渐地成了我们程序员的一个基本功,或者说是有没有真正使用过或运用过的一个参考的标志。

本篇文章是关于Linux系统安装部署nacos集群的介绍,安装方式是采用安装包的方式,而yum安装方式和docker安装方式,本篇文章不涉及。原因大致如下:


1.yum安装方式

这种方式更多的时候个人练习或者互联网公司或者公司网络没有做物理隔离的公司。

据我所知,银行、证券(包含期货、基金、外汇)等公司的网络都进行了物理隔离,而yum安装方式需要联网,这个时候就不适用了。

另外,安装包安装方式,更有利于个人了解熟悉nacos的项目结构。当然下载源码,结构更清晰。


2.docker安装方式

虽然这种方式更简单,但是同样需要联网。其次,很多公司,甚至可以说站多数的公司的项目并没有进行容器化,或者说采用云原生层面的架构。如果单看网上的介绍,貌似全世界的公司都已经是云原生了,其实不然,采用MVC、Linux系统的公司多的是,而且还是占大多数。这就好比,在知乎上,年收入人均百万,可惜那都是做梦,中国人的可支配收入才多少?

当然我们不是否定以上两种方式,只是对此做个说明而已,不喜勿喷。

下面我们开始我们今天的主题。


一、前置条件

安装部署nacos集群之前,需要一些前置条件。


1.操作系统或者虚拟机上安装jdk,版本>=8


2.下载好nacos2.0.3的压缩包

关于安装jdk的教程,网上很多,这里给大家一篇我个人的文章:

Linux系统通过yum安装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启动失败,这个端口不会被释放杀掉,所以导致再次启动的时候就已经被占用了。我们可以手动杀掉这个进程即可。

关于如何杀掉这个进行,可以参考:

Linux查看端口占用情况


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的启动配置:

 如果不是这个版本,版本过低的话,伪集群部署方式可以修改配置,修改的方法,请参考文章:

linux搭建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应该就可以完全部署成功了!


总结

最后我们做一个总结:

1.必须安装jdk;

2.下载nacos-server-2.0.3.tar.gz压缩包;

3.上传压缩包;

4.解压压缩包;

5.修改conf目录的application.properties文件的数据库连接;

6.修改conf目录的cluster.conf的集群配置;

7.将修改好的文件复制三份(如果部署多个,可以是多份);

8.分别修改三个nacos的application.properties文件的端口;

9.分别运行三个nacos的bin目录的startup.sh文件;

10.分别打开浏览器输入http://192.168.247.128:8846/nacos/index.html访问nacos控制台;

11.打开防火墙。

(o゜▽゜)o☆[BINGO!]

与君共勉,砥砺前行,不负此生!

祝好运!


推荐阅读
  • 本文探讨了容器技术在安全方面面临的挑战,并提出了相应的解决方案。多租户保护、用户访问控制、中毒的镜像、验证和加密、容器守护以及容器监控都是容器技术中需要关注的安全问题。通过在虚拟机中运行容器、限制特权升级、使用受信任的镜像库、进行验证和加密、限制容器守护进程的访问以及监控容器栈,可以提高容器技术的安全性。未来,随着容器技术的发展,还需解决诸如硬件支持、软件定义基础设施集成等挑战。 ... [详细]
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 大坑|左上角_pycharm连接服务器同步写代码(图文详细过程)
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了pycharm连接服务器同步写代码(图文详细过程)相关的知识,希望对你有一定的参考价值。pycharm连接服务 ... [详细]
  • 先记住几个专用名词,如下:Workspace:工作区IndexStage:暂存区Repository:仓库区(或本地仓库)Remote:远程仓库一、新建代码库#在当前目录新建一个G ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • HTML学习02 图像标签的使用和属性
    本文介绍了HTML中图像标签的使用和属性,包括定义图像、定义图像地图、使用源属性和替换文本属性。同时提供了相关实例和注意事项,帮助读者更好地理解和应用图像标签。 ... [详细]
  • 本文讨论了在手机移动端如何使用HTML5和JavaScript实现视频上传并压缩视频质量,或者降低手机摄像头拍摄质量的问题。作者指出HTML5和JavaScript无法直接压缩视频,只能通过将视频传送到服务器端由后端进行压缩。对于控制相机拍摄质量,只有使用JAVA编写Android客户端才能实现压缩。此外,作者还解释了在交作业时使用zip格式压缩包导致CSS文件和图片音乐丢失的原因,并提供了解决方法。最后,作者还介绍了一个用于处理图片的类,可以实现图片剪裁处理和生成缩略图的功能。 ... [详细]
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
  • 本文介绍了Redis中RDB文件和AOF文件的保存和还原机制。RDB文件用于保存和还原Redis服务器所有数据库中的键值对数据,SAVE命令和BGSAVE命令分别用于阻塞服务器和由子进程执行保存操作。同时执行SAVE命令和BGSAVE命令,以及同时执行两个BGSAVE命令都会产生竞争条件。服务器会保存所有用save选项设置的保存条件,当满足任意一个保存条件时,服务器会自动执行BGSAVE命令。此外,还介绍了RDB文件和AOF文件在操作方面的冲突以及同时执行大量磁盘写入操作的不良影响。 ... [详细]
  • 统一知识图谱学习和建议:更好地理解用户偏好
    本文介绍了一种将知识图谱纳入推荐系统的方法,以提高推荐的准确性和可解释性。与现有方法不同的是,本方法考虑了知识图谱的不完整性,并在知识图谱中传输关系信息,以更好地理解用户的偏好。通过大量实验,验证了本方法在推荐任务和知识图谱完成任务上的优势。 ... [详细]
  • 本文介绍了H5游戏性能优化和调试技巧,包括从问题表象出发进行优化、排除外部问题导致的卡顿、帧率设定、减少drawcall的方法、UI优化和图集渲染等八个理念。对于游戏程序员来说,解决游戏性能问题是一个关键的任务,本文提供了一些有用的参考价值。摘要长度为183字。 ... [详细]
  • 修正我的GitHub commit 数据
    早晨上班,滴滴搭车里,我在掘金这个帖子看到大家晒自己的Github活跃记录,我也晒了下自己的记录。不过太少了。有遗漏的commits状况这也让我知道,自己觉得自己很忙的,实际上提交 ... [详细]
author-avatar
马仔盛世焚花
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有