如何安装部署Nacos单节点?

Linux基础

1 基础知识

1.1 软件简介

– Nacos是“Dynamic Naming and Configuration Service”的首字母简写
– Nacos是易于构建云原生应用的动态服务发现、配置管理和服务管理平台
– Nacos提供一组简单易用的特性集,帮助你快速实现动态服务发现、配置、元数据和流量管理

1.2 产品功能

1.2.1 服务发现和服务健康检测

– Nacos支持基于DNS和基于RPC的服务发现
– 服务提供者使用原生SDK、OpenAPI或独立Agent注册Service后
– 服务消费者支持使用DNS TODO或HTTP&API查找和发现服务
– Nacos提供对服务的实时健康检查,阻止向不健康的主机或服务实例发送请求
– Nacos支持传输层(ping或tcp)和应用层(HTTP、MySQL等)健康检查
– Nacos支持复杂的云环境和网络拓扑环境(VPC、边缘网络等)
– Nacos支持Agent上报模式和服务端主动检测模式
– Nacos提供统一的健康检查仪表盘,方便检测服务的健康状态

1.2.2 动态配置服务

– 动态配置服务支持中心化、外部化和动态化的方式管理应用配置和服务配置
– 动态配置消除配置变更时的重新部署和服务需求,让管理变得高效敏捷
– 配置中心化让无状态服务变得简单,让服务按需弹性扩展变更容易
– Nacos支持简介易用的UI帮助你管理所有服务和应用配置
– Nacos支持包括配置版本跟踪、金丝雀发布、一键回滚配置以及客户端配置状态跟踪

1.2.3 动态DNS服务

– 动态DNS服务支持权重路由,支持中间层负载均衡、灵活的路由策略、流量控制和内网DNS解析服务
– 动态DNS服务能让你更容易实现DNS协议为基础的服务发现

1.2.4 服务以及元数据管理

– Nacos支持从微服务平台建设的视角管理数据中心的所有服务和元数据
– Nacos支持服务的描述、生命周期、静态依赖分析、监控状态、流管理、路由和安全策略。

1.3 Nacos的系统架构

1.3.1 分层的架构设计


– 架构分为用户层、业务层、内核层和插件
– 用户层,主要解决用户使用的易用性问题
– 业务层,主要解决服务发现和配置管理的功能问题
– 内核层,解决分布式系统一致性、存储、高可用等核心问题
– 插件,解决扩展性的问题

1.3.2 用户层功能

– OpenAPI:暴露标准Rest风格HTTP端口,简单易用,支持多语言集成
– Console:易用控制台,提供服务管理、配置管理等操作
– SDK:支持多语言SDK(支持几乎所有主流编程语言)
– Agent:以Sidecar模式运行,通过标准DNS协议与业务解耦
– CLI:支持命令行形进行轻量化管理

1.3.3 业务层功能

– 服务管理:实现服务CRUD,域名CRUD,服务监控状态检查和权重管理等功能
– 配置管理:实现配置管CRUD,版本管理、灰度管理、监控管理、推送轨迹和集合数据等
– 元数据管理:提供元数据CURD和打标能力,为实现上层流量和服务灰度提供支持

1.3.4 内核层功能

– 插件机制:实现三个模块可分可合能力,实现扩展点SPI机制,用于扩展自己公司定制
– 事件机制:实现异步化时间通知,SDK数据变化异步通知等逻辑(高性能关键部分)
– 日志模块:管理日志的分类、级别、可移植、格式、异常和帮助文档
– 回调机制:SDK通知数据,通过统一的模式回调用户处理。接口和数据结构需具备扩展性
– 寻址模式:解决Server IP直连、域名访问、名称服务寻址、广播等多种寻址模式,需要可扩展
– 推送通道:解决Server与存储、与其他Server、与SDK间的高效通讯问题
– 容量管理:管理每个租户、分组下的容量、防止存储被写爆和影响服务可用性
– 流量管理:按照租户,分组等多个维度对请求频率、长链接个数、报文大小和请求进行流量控制
– 缓存机制:容灾目录、本地缓存、Server缓存机制为Nacos高可用的关键
– 启动模式:按照单机、配置、服务、DNS模式启动不同的模块
– 一致性协议:解决不同数据和不同一致性要求情况下(包括AP协议和CP协议)的诉求
– 存储模块:解决数据持久化、非持久化存储和数据分片的问题

1.3.5 插件的功能

– 名称服务:解决名称服务到集群ID的路由问题、用户环境和Nacos物理环境映射问题
– CMDB:解决元数据存储与第三方CMDB系统对接以及应用、人和资源的关系
– Metrics:暴露标准Metrics数据,方便与三方监控系统对接
– Trace:暴露标准Trace,方便与SLA系统集成,提供日志白平化,推送轨迹等功能并且支持与计量计费系统集成
– 接入管理:相当于阿里云开通服务,分配身份、容量和权限过程
– 用户管理:解决用户管理,登陆和SSO等问题
– 权限管理:解决身份识别,访问控制和角色管理等问题
– 审计系统:扩展接口方便与不同公司审计系统打通
– 通知系统:核心数据变更或操作,支持通过SMS系统通知对应用户数据变更。

1.4 产品优势

– 易于使用
– 特性丰富
– 极致性能
– 超大容量
– 稳定可靠
– 开放生态

1.5 系统的部署

1.5.1 部署模式


– 单机模式
– 集群模式(高可用、高扩展、高并发)
– 多集群模式(TODO)

1.5.2 服务端口


– Nacos2.x版本新增gRPC的通讯方式,因此需要增加2各端口
– Nacos的服务的主端口为“8848”,其他服务端口基于配置文件中定义的默认端口加或减特定的偏移值而自动创建
– Nacos客户端gRPC请求服务端端口,端口“9848”,即主端口加“1000”,用于客户端向服务端发起连接和请求
– Nacos服务端gRPC请求服务端端口,端口“9849”,即主端口加“1001”,用于服务间同步等
– Nacos Jraft请求服务端端口,端口“7848”,即主端口减“1000”,用于处理服务端间的Raft相关请求
– Nacos对外暴露端口,只需要暴露主端口“8848”和gRPC端口“9848”即可,其他端口只需要内网通讯
– Nacos使用VIP/Nginx时,只支持TCP转发,不支持http2转发

2 最佳实践

2.1 环境配置

2.1.1 系统配置

OS = Oracle Linux Server 10.x x86_64
IP Address = 10.168.0.212
Host Name = nacos.cmdschool.org

2.1.1 安装openJDK

如何部署openJDK?


参阅以上章节配置openJDK,并执行如下命令确认安装,

java -version

可见如下显示,

openjdk version "21.0.1" 2023-10-17
OpenJDK Runtime Environment (build 21.0.1+12-29)
OpenJDK 64-Bit Server VM (build 21.0.1+12-29, mixed mode, sharing)

2.1.2 下载软件包

cd ~
wget -O nacos-server-2.5.2.zip https://download.nacos.io/nacos-server/nacos-server-2.5.2.zip?spm=5238cd80.2ef5001f.0.0.3f613b7cs7q7bK&file=nacos-server-2.5.2.zip

以上只是命令行演示,如果下载异常或需要其他版本,请从如下连接下载,
https://nacos.io/download/nacos-server/?spm=5238cd80.c25230e.0.0.3513237fejg2FD#%E7%A8%B3%E5%AE%9A%E7%89%88%E6%9C%AC

2.1.3 解压软件包

cd ~
unzip nacos-server-2.5.2.zip

2.2 部署应用

2.2.1 部署软件包到安装目录

groupadd  -g 987 nacos
useradd -u 987 -g 987 -d /var/lib/nacos -s /sbin/nologin nacos

2.2.2 部署软件包到安装目录

cd ~
mv nacos /opt/
mv /opt/nacos/conf /etc/nacos
ln -s /etc/nacos /opt/nacos/conf
mkdir -p /var/log/nacos
ln -s /var/log/nacos /opt/nacos/logs
chown nacos:nacos -R /opt/nacos /var/log/nacos

2.3 配置应用

2.3.1 修改配置文件

cp /etc/nacos/application.properties /etc/nacos/application.properties.default
vim /etc/nacos/application.properties

加入如下配置,

nacos.core.auth.system.type=nacos
nacos.core.auth.enabled=true
nacos.core.auth.caching.enabled=true
nacos.core.auth.enable.userAgentAuthWhite=false
nacos.core.auth.server.identity.key=nacos
nacos.core.auth.server.identity.value=nacospwd
nacos.core.auth.plugin.nacos.token.cache.enable=true
nacos.core.auth.plugin.nacos.token.expire.seconds=18000
nacos.core.auth.plugin.nacos.token.secret.key=QWl0aGllVyxpbDhkZWkwZWFzaGlWaWNoOWhhZU42U28=

需要注意的是,Token的密码需要32位以上,否则可能启动报错,你可以使用如下命令创建该密码,

echo -n "AithieW,il8dei0eashiVich9haeN6So" | base64

可见如下显示,

QWl0aGllVyxpbDhkZWkwZWFzaGlWaWNoOWhhZU42U28=

2.3.2 测试服务启动

sudo -u nacos bash -c 'cd /opt/nacos;source /etc/profile;/opt/nacos/bin/startup.sh -m standalone'

另外,如果需要反向操作,请执行如下命令,

sudo -u nacos bash -c 'cd /opt/nacos;source /etc/profile;/opt/nacos/bin/shutdown.sh'

如果异常,请使用如下命令查看启动日志,

tail -f /var/log/nacos/startup.log

正常情况下,你可见如下显示,

/usr/java/jdk-21.0.1/bin/java    -Xms512m -Xmx512m -Xmn256m -Dnacos.standalone=true -Dnacos.member.list= -Xlog:gc*:file=/opt/nacos/logs/nacos_gc.log:time,tags:filecount=10,filesize=100m -Dloader.path=/opt/nacos/plugins,/opt/nacos/plugins/health,/opt/nacos/plugins/cmdb,/opt/nacos/plugins/selector -Dnacos.home=/opt/nacos -jar /opt/nacos/target/nacos-server.jar  --spring.config.additional-location=file:/opt/nacos/conf/ --logging.config=/opt/nacos/conf/nacos-logback.xml --server.max-http-header-size=524288
nacos is starting with standalone
nacos is starting. you can check the /opt/nacos/logs/startup.log

你可以使用如下命令查看运行的进程,

pgrep -u nacos java -a

可见如下输出,

46015 /usr/java/jdk-21.0.1/bin/java -Xms512m -Xmx512m -Xmn256m -Dnacos.standalone=true -Dnacos.member.list= -Xlog:gc*:file=/opt/nacos/logs/nacos_gc.log:time,tags:filecount=10,filesize=100m -Dloader.path=/opt/nacos/plugins,/opt/nacos/plugins/health,/opt/nacos/plugins/cmdb,/opt/nacos/plugins/selector -Dnacos.home=/opt/nacos -jar /opt/nacos/target/nacos-server.jar --spring.config.additional-location=file:/opt/nacos/conf/ --logging.config=/opt/nacos/conf/nacos-logback.xml --server.max-http-header-size=524288 nacos.nacos

你可以使用如下命令查看端口倾听,

ss -antp | grep $(pgrep -u nacos java) | grep LISTEN

可见如下输出,

LISTEN 0      4096                        *:9848                       *:*     users:(("java",pid=46015,fd=194))                                                                                                                                                                                                      
LISTEN 0      4096                        *:9849                       *:*     users:(("java",pid=46015,fd=195))                                                                                                                                                                                                      
LISTEN 0      100                         *:8848                       *:*     users:(("java",pid=46015,fd=253))                                                                                                                                                                                                      
LISTEN 0      4096                        *:7848                       *:*     users:(("java",pid=46015,fd=196))                                                                                                                                                                                                      

根据以上的端口需求,你需要执行如下命令开放端口,

firewall-cmd --permanent --add-port 7848/tcp --add-port 8848/tcp --add-port 9848/tcp --add-port 9849/tcp
firewall-cmd --reload
firewall-cmd --list-all

然后,使用如下连接测试服务,
http://10.168.0.212:8848/nacos
可见如下显示,

2.3.3 配置服务脚本

vim /etc/systemd/system/nacos.service

加入如下配置,

[Unit]
Description=Nacos Server
Requires=network.target
After=syslog.target network.target

[Service]
Type=forking
User=nacos
Group=nacos
WorkingDirectory=/opt/nacos
Environment=JAVA_HOME=/usr/java/jdk-21.0.1
ExecStart=/usr/bin/bash -c '/opt/nacos/bin/startup.sh -m standalone'
Restart=on-failure
StandardOutput=journal
LimitNOFILE=102642

[Install]
WantedBy=multi-user.target

配置创建后,你需要使用如下命令重载服务使配置生效,

systemctl daemon-reload

测试服务启动并设置自动运行,

systemctl start nacos.service
systemctl enable nacos.service

参阅文档
===========

官网
———
https://nacos.io/

部署手册
———-
https://nacos.io/docs/v2.5/quickstart/quick-start/?spm=5238cd80.2ef5001f.0.0.3f613b7cTuZ3Iy
https://nacos.io/docs/v2.5/overview/?spm=5238cd80.2ef5001f.0.0.3f613b7cTuZ3Iy

软件下载
————-
https://nacos.io/download/nacos-server/?spm=5238cd80.2ef5001f.0.0.3f613b7cs7q7bK

系统架构
—————
https://nacos.io/docs/ebook/un9fgs/?spm=5238cd80.2ef5001f.0.0.3f613b7cTuZ3Iy

配置认证
————
https://nacos.io/docs/latest/manual/admin/auth/

没有评论

发表回复

Linux基础
如何熟悉GitEgg框架?

1. 基础知识 1.1 框架简介 – GitEgg是一款开源免费的企业级微服务应用该开发 …

Linux基础
如何调整Squid请求的URL长度?

1 前言 一个问题,一篇文章,一出故事。 笔者的生产环境使用O365查看邮件发现图片显示异常。 由于 …

Linux基础
如何解决Moodle站点不可用问题?

1 前言 一个问题,一篇文章,一出故事。 今天笔者Moodel遇到访问遇到如下提示, This si …