不同操作系统下安装和使用 Nacos
Posted 编程洪同学
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了不同操作系统下安装和使用 Nacos相关的知识,希望对你有一定的参考价值。
大家好,我是中国码农摘星人。
欢迎分享/收藏/赞/在看!
1 Nacos 简介
Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。
Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。
Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。
2 版本选择
您可以在 Nacos 的 release notes 及博客中找到每个版本支持的功能的介绍,当前推荐的稳定版本为 2.1.1。
3 预备环境准备
Nacos 依赖 Java 环境来运行。如果您是从代码开始构建并运行 Nacos,还需要为此配置 Maven 环境,请确保是在以下版本环境中安装使用:
- 64 bit OS,支持 Linux/Unix/Mac/Windows,推荐选用 Linux/Unix/Mac。
- 64 bit JDK 1.8+。 CentOS 下安装及配置 JDK
- Maven 3.2.x+。MacOS 下安装及配置 Maven(CentOS 通用)
4 下载源码或者安装包
您可以通过源码和发行包两种方式来获取 Nacos。
4.1 从 Github 上下载源码方式
git clone https://github.com/alibaba/nacos.git
cd nacos/
mvn -Prelease-nacos -Dmaven.test.skip=true clean install -U
ls -al distribution/target/
// change the $version to your actual path
cd distribution/target/nacos-server-$version/nacos/bin
4.2 下载编译后压缩包方式
您可以从最新稳定版本下载 nacos-server-$version.zip
包。
unzip nacos-server-$version.zip 或者 tar -xvf nacos-server-$version.tar.gz
cd nacos/bin
5 防火墙开放端口
Nacos 默认使用 8848 端口,后续需要根据不同服务开发不同端口。
firewall-cmd --zone public --add-port=8848/tcp --permanent
firewall-cmd --reload
firewall-cmd --zone public --list-port
#启动
systemctl start firewalld
#查看状态
systemctl status firewalld
#禁用/禁止开机启动
systemctl disable firewalld
#停止运行
systemctl stop firewalld
#开放80端口
firewall-cmd --zone=public --add-port=80/tcp --permanent
#删除80端口
firewall-cmd --zone=public --remove-port=80/tcp --permanent
#更新防火墙规则
firewall-cmd --reload
#查看所有打开的端口
firewall-cmd --zone public --list-port
6 启动服务器
注:Nacos 的运行需要以至少 2C4g60g*3 的机器配置下运行。
6.1 Linux/Unix/Mac
启动命令(standalone 代表着单机模式运行,非集群模式):
sh startup.sh -m standalone
查看启动日志,如图表示 Nacos 启动成功
cat /usr/local/nacos/nacos-2.1.2/logs/start.out
浏览器输入如下地址,可以访问到后台:
http://<ip addr>:8848/nacos/index.html
如果您使用的是 Ubuntu 系统,或者运行脚本报错提示[[符号找不到,可尝试如下运行:
bash startup.sh -m standalone
6.2 Windows
启动命令(standalone 代表着单机模式运行,非集群模式):
startup.cmd -m standalone
7 修改开机自动启动
7.1 创建 nacos.service 配置
vim /lib/systemd/system/nacos.service
注意 Nacos 的安装路径自行修改
[Unit]
Description=nacos
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/nacos/nacos-2.1.2/bin/startup.sh -m standalone
ExecReload=/usr/local/nacos/nacos-2.1.2/bin/shutdown.sh
ExecStop=/usr/local/nacos/nacos-2.1.2/shutdown.sh
PrivateTmp=true
[Install]
WantedBy=multi-user.target
7.2 重新加载服务配置
systemctl daemon-reload
7.3 设置开机自启
在 startup.sh 里面添加 JAVA_HOME
JAVA_HOME=/usr/local/jdk/jdk-1.8/
systemctl enable nacos.service
7.4 立即启动
# 启动nacos
systemctl start nacos.service
# 查看nacos状态
systemctl status nacos.service
8 修改配置文件
根据自己的业务需求修改配置文件
vim ./conf/application.properties
在这里,您可以修改 Nacos 的 web 路径、端口等
还可以配置数据库相关的信息(以 mysql 数据源为例)
Nacos真香,从零到一学起来
Nacos是阿里巴巴开源的微服务管理平台,可以帮助开发者快速实现动态服务发现、服务配置、服务元数据及流量管理。
这篇文章主要来讲一下Nacos作为配置中心和注册中心的使用。
1 安装
1.1 linux下安装
首先搭建一套单机版的Nacos集群。Nacos的安装有两种方式,一种是下载源码自己编译安装,另一种是下载编译后的压缩包解压后直接使用。
本文我采用第二种方式。
首先从官网下载安装包,下载地址如下:
https://github.com/alibaba/nacos/releases/tag/2.0.2
linux下安装可能会遇到环境变量的问题,可以参考这篇文章[1]。如果还不行,执行下面两个命令重新安装:
yum erase java-1.* #删除原来的jdk
yum install java-1.8.0-openjdk* -y #重新安装jdk
jdk没有问题后,启动Nacos,启动日志如下:
[root@master bin]# sh startup.sh -m standalone
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.292.b10-1.el7_9.x86_64/bin/java -Xms512m -Xmx512m -Xmn256m -Dnacos.standalone=true -Dnacos.member.list= -Djava.ext.dirs=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.292.b10-1.el7_9.x86_64/jre/lib/ext:/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.292.b10-1.el7_9.x86_64/lib/ext -Xloggc:/root/nacos/logs/nacos_gc.log -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=100M -Dloader.path=/root/nacos/plugins/health,/root/nacos/plugins/cmdb -Dnacos.home=/root/nacos -jar /root/nacos/target/nacos-server.jar --spring.config.additional-location=file:/root/nacos/conf/ --logging.config=/root/nacos/conf/nacos-logback.xml --server.max-http-header-size=524288
nacos is starting with standalone
nacos is starting,you can check the /root/nacos/logs/start.out
1.2 可视化界面
浏览器输入下面地址:
http://192.168.59.151:8848/nacos/index.html#/login
登录界面如下:
账号/密码:nacos/nacos,登录成功后如下图:
2 配置中心
Nacos可以方便地跟Spring、SpringBoot、SpringCloud、Docker、Dubbo、k8s等整合,本文主要使用SpringCloud来整合Nacos。
2.1 代码配置
1. 在配置文件中加入下面的依赖:
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>${latest.version}</version>
</dependency>
根据官网介绍,这里的 latest.version 对应 springboot 版本,比如 Nacos 2.1.x.RELEASE 版本对应 SpringBoot 2.1.x 版本,Nacos 2.0.x.RELEASE 版本对应 SpringBoot 2.0.x 版本。但x这个子版本号不一定要完全匹配,上面latest.version我本地SpringBoot使用2.1.6,Nacos使用2.1.4。
2. 添加一个bootstrap.properties文件,跟SpringBoot的配置文件放在一个目录下,在这个文件中增加下面配置:
#Nacos server地址
spring.cloud.nacos.config.server-addr=192.168.59.151:8848
#配置前缀,如果不配置,默认是spring.application.name
spring.cloud.nacos.config.prefix=example
#dataId后缀
spring.cloud.nacos.config.file-extension=properties
在SpringCloud整合Nacos时,Nacos的dataId完整格式如下:
${prefix}-${spring.profiles.active}.${file-extension}
这里有两点需要注意:
spring.profiles.active即为当前环境对应的 profile
当 spring.profiles.active 为空时,对应的连接符-也将不存在,dataId的拼接格式变成
${prefix}.${file-extension}
file-exetension为配置内容的数据格式,目前只支持properties和yaml类型。
上面的配置,对应的 dataId 为 example-dev.properties。
2.2 测试配置
如果要实现配置自动刷新,只需要在代码类上加一个注解@RefreshScope,如下面这段代码来自官网:
@Controller
@RequestMapping("config")
@RefreshScope
public class ConfigController {
@Value("${useLocalCache:false}")
private boolean useLocalCache;
@RequestMapping(value = "/get", method = GET)
@ResponseBody
public boolean get() {
return useLocalCache;
}
}
这时往Nacos写入一个配置,命令如下:
curl -X POST "http://192.168.59.151:8848/nacos/v1/cs/configs?dataId=example-dev.properties&group=DEFAULT_GROUP&content=useLocalCache=true"
这时进入Nacos页面,可以看到上面插入的配置,如下图:
点击"详情",可以看到配置数据,如下图:
这时如果使用api调用上面ConfigController的get方法,会返回true。如果使用下面的命令修改useLocalCache的值,再次调用get方法,会返回false。
curl -X POST "http://192.168.59.151:8848/nacos/v1/cs/configs?dataId=example-dev.properties&group=DEFAULT_GROUP&content=useLocalCache=false"
点击下图的示例代码,可以看到获取配置的代码,也就是上面Controller的代码。
3 注册中心
3.1 配置服务提供者
1. 在pom文件中增加配置,如下:
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>${latest.version}</version>
</dependency>
根据官网介绍,这里的latest.version对应springboot版本,比如Nacos 2.1.x.RELEASE版本对应SpringBoot 2.1.x版本,Nacos 2.0.x.RELEASE版本对应SpringBoot 2.0.x版本。这里我本地SpringBoot使用2.1.6,上面latest.version使用2.1.4。
2. 在application.properties中增加下面配置:
spring.cloud.nacos.discovery.server-addr=192.168.59.151:8848
3. 在SpringBoot启动类上加上注解@EnableDiscoveryClient。
4. 为了区分服务名称,配置服务名称如下:
spring.application.name=springboot-producer
3.2 配置服务调用者
跟服务提供者配置类似,这里修改配置名称如下:
spring.application.name=springboot-consumer
3.3 测试
启动上面两个服务,登录Nacos页面,可以看到两个服务已经注册到Nacos。
在springboot-producer中增加一个Controller,代码如下:
@Controller
@RequestMapping("/producer")
public class FeignTestController {
@RequestMapping("/result")
@ResponseBody
public String getResult() throws InterruptedException {
return "success";
}
}
在springboot-consumer中增加Feign调用,如下:
@FeignClient(value = "springboot-producer", configuration = FeignMultipartSupportConfig.class)
public interface FeignAsEurekaClient {
@GetMapping("/producer/result")
String feignReadTimeout();
}
启动测试类,调用成功,返回"success"。
4 一个问题
由于我本地应用使用的数据库连接池是Hikaricp,修改配置中心的配置,通知本地应用时会报notify-error,日志上看是绑定数据库参数失败。这里应该改成druid连接池就可以了,有待验证。
·············· END ··············
感谢阅读,如果对你有帮助,请点个再看。欢迎大家加我微信,围观朋友区,做点赞之交,一起进步。想要进技术交流群的朋友,加我微信回复进群。
参考资料
[1]
环境变量: https://blog.csdn.net/silence_fengxuan/article/details/105581366
以上是关于不同操作系统下安装和使用 Nacos的主要内容,如果未能解决你的问题,请参考以下文章
Spring Cloud Alibaba - 18 Nacos Config配置中心加载相同微服务的不同环境下的通用配置
springcloud 微服务Spring Cloud Alibaba Nacos使用详解