Nacos安装和配置

标签: Nacos 分类: Java 创建时间:2020-02-03 10:48:53 更新时间:2024-11-15 10:49:43

1.安装

(1) 下载
将下载好的nacos-server,解压到相应的地方。

(2) 修改startup.sh 文件中的 java 路径

(3) 执行开启命令

1
2
3
4
## 进入nacos的bin目录,开启nacos
sudo bash startup.sh -m standalone
## 关闭
sh shutdown.sh

打开/usr/local/nacos/logs/start.out,查看相关日志。

问题

我使用的是openjdk13.0.2版本,总是出现问题。
(1) cannot create /usr/local/nacos/logs/start.out: Directory nonexistent
将下载的nacos复制到/usr/local/nacos中,执行./startup.sh脚本,出现了下面这些问题。

解决方式:使用sudo权限运行

(2) ERROR: Please set the JAVA_HOME variable in your environment, We need java(x64)! jdk8 or later is better! !!
使用sudo命令运行后,还是出现了错误。“readlink: 缺少操作数”,“dirname: 缺少操作数”

打开nacos/bin下的startup.sh

1
2
3
4
[ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=$HOME/jdk/java
[ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=/usr/java
[ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=/opt/taobao/java
[ ! -e "$JAVA_HOME/bin/java" ] && unset JAVA_HOME

在下面的代码下添加:[ ! -e “$JAVA_HOME/bin/java” ] && JAVA_HOME=/usr/local/jdk13.0.2

JAVA_HOME后面是你的jdk所在路径。

(2020年02月07日 更新)
配置了上面的内容之后,前几天还好好的,今天不知道怎么回事,又出现了同样的问题,只能想其他办法了。

Ubuntn中有一个update-alternatives工具,可以设置默认的应用程序。

既然没有JAVA_HOME这个变量,那就干脆直接定义一个好了,在startup.sh中添加export JAVA_HOME=你的java地址

搞定!!!

(3) Could not find or load main class
出现这个问题的版本是2.0.3,在github上也有人进行了讨论,在我使用的时候,也就是2021年11月12号,应该是已经修复了,但是还没有发布新的版本。

【解决方案】

1
2
3
4
5
6
7
8
9
10
11
12
13
## 原先的startup.sh的最后三行
echo "$JAVA $JAVA_OPT_EXT_FIX ${JAVA_OPT}" > ${BASE_DIR}/logs/start.out 2>&1 &
nohup "$JAVA" "$JAVA_OPT_EXT_FIX" ${JAVA_OPT} nacos.nacos >> ${BASE_DIR}/logs/start.out 2>&1 &
echo "nacos is starting,you can check the ${BASE_DIR}/logs/start.out"

## 改为
echo "$JAVA $JAVA_OPT_EXT_FIX ${JAVA_OPT}" > ${BASE_DIR}/logs/start.out 2>&1 &

if [[ "$JAVA_OPT_EXT_FIX" == "" ]]; then
nohup "$JAVA" ${JAVA_OPT} nacos.nacos >> ${BASE_DIR}/logs/start.out 2>&1 &
else
nohup "$JAVA" "$JAVA_OPT_EXT_FIX" ${JAVA_OPT} nacos.nacos >> ${BASE_DIR}/logs/start.out 2>&1 &
fi

修改后就可以正常启动了。

2.开机启动

在linux上开机启动,使用了开机启动脚本,总是出现:Job for nacos.service failed because the control process exited with error code.

解决方式就是修改start.sh文件中的java路径

(1) 编写 vi /lib/systemd/system/nacos.service 文件,内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[Unit]
Description=nacos
After=network.target

[Service]
Type=forking
ExecStart=bash /usr/local/nacos/bin/startup.sh -m standalone
ExecReload=bash /usr/local/nacos/bin/shutdown.sh
ExecStop=bash /usr/local/nacos/bin/shutdown.sh
PrivateTmp=true
Restart=always

[Install]
WantedBy=multi-user.target

如果出现了错误:[/usr/lib/systemd/system/nacos.service:9] Executable path is not absolute, ignoring: bash /usr/local/nacos/bin/shutdown.sh
那么就把bash换成/bin/bash


(2) 修改 /usr/local/nacos/bin/startup.sh 中的JAVA_HOME=/usr/local/java/jdk-13.0.2,为本机java安装目录

(3) 执行服务加载和设置开机启动

1
2
3
4
5
6
7
8
#先进行文件生效配置
systemctl daemon-reload
#设置为开机启动
systemctl enable nacos.service
#启动nacos服务
systemctl start nacos.service
## 停止
systemctl stop nacos.service
参考文章:
1.Nacos快速入门(1):启动Nacos Server
2.centos8安装nacos并配置开机启动 (这篇文章讲了如何配置开机启动,以及解决java home目录的问题)
3.17.2 通过 systemctl 管理服务

3.日志处理

在服务器上运行nacos,如果不处理的话,光日志文件,一个星期就有5G多,很快就会把磁盘空间占满了。

(1) 解决方法就是:在配置文件nacos\conf\nacos-logback.xml,根据需求,注释你不要的打印日志。

(2) 即便注释掉了不需要打印的日志,但是还是会有{nacos.home}/logs/access_log.yyyy-mm-dd.log,这样的日志文件产生。根据相关的解释,nacos.home是nacos的安装目录,但是实际上我暂时没有找到那里设置了nacos.home,默认的会将access_log日志输出到系统的根目录/logs中。
{asset_img log_1.png log日志 }

查看启动日志start.out,显示已经成功配置了-Dnacos.home属性,但是似乎不起作用。
{asset_img log_2.png log日志 }

【解决方法】
主要解决方法就是编写{nacos.home}/conf/application.properties,修改:server.tomcat.basedir=/usr/local/nacos/logs,然后重启nacos。
{asset_img log_4.png log日志 }

这样,access日志就会出现在了 /usr/local/nacos/logs/logs/ 中。

(3) 除了会生成一个logs文件夹之外,还会生成一个work的目录
{asset_img log_3.png log日志 }

参考文章:
1.log of nacos optimization
2.日志打印频繁的问题
3.Nacos 系统参数介绍 (这里说是在{nacos.home}/bin/startup.sh中编写JAVA_OPT=”${JAVA_OPT} -Dnacos.home=${BASE_DIR}”,设置nacos.home,但是我编写后没有效果,依然还是将access日志保存到了系统的/logs目录下)

4.定时清理脚本

(1) 定时脚本可以参考下面的脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/bin/bash

logFile="/usr/local/nacos/logs/nacos_del_access.log"
# 保留7天日志
date=`date -d "$date -7 day" +"%Y-%m-%d"`
# 具体位置可调整
delFilePath="/usr/local/nacos/logs/logs/access_log.${date}.log"

if [ ! -f "${logFile}" ];then
echo 'access log文件打印日志频繁. /cloud/crontab/clean_nacos.sh 会定时删除access日志文件' >>${logFile}
fi
# 日志文件存在, 则删除
if [ -f "${delFilePath}" ];then
rm -rf ${delFilePath}
curDate=`date --date='0 days ago' "+%Y-%m-%d %H:%M:%S"`
echo '['${curDate}'] 删除文件'${delFilePath} >>${logFile}
fi

(2) 编写crontab任务,每日凌晨执行清理工作

1
2
3
4
5
6
7
8
9
10
11
12
13
## 赋予脚本执行权限
chmod 777 check.sh
## 输入命令
crontab -e

## 文件中添加定时任务,每天的零点开始执行清理工作
## 分  时  日  月  周  命令
00 00 * * * /bin/bash /cloud/crontab/clean_nacos.sh

## 保存后退出即可,crontab实时刷新的

## 查看定时任务
crontab -l
参考文章:
【1】.nacos,启动一周后,打印日志超多,5G
【2】.nacos access log日志占用磁盘 (这里使用的是定时任务的方式处理access log日志)
【3】.linux 让 crontab 每天03点00 访问一次指定的url

5.配置数据库

打开Nacos配置文件conf/application.properties,进行以下配置更改

1
2
3
4
5
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://你的数据库地址:端口/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&allowPublicKeyRetrieval=true
db.user=你的数据库用户名
db.password=你的数据库密码
参考文章:
【1】.nacos配置mysql数据库

问题

1.Public Key Retrieval is not allowed

链接数据库的时候,出现了这个问题。

【尝试解决】
尝试在连接参数中增加 allowPublicKeyRetrieval=true 参数,编辑 vi conf/application.properties ,找到数据库连接语句,然后进行修改。

小额赞助
本人提供免费与付费咨询服务,感谢您的支持!赞助请发邮件通知,方便公布您的善意!
**光 3.01 元
Sun 3.00 元
bibichuan 3.00 元
微信公众号
广告位
诚心邀请广大金主爸爸洽谈合作
每日一省
isNaN 和 Number.isNaN 函数的区别?

1.函数 isNaN 接收参数后,会尝试将这个参数转换为数值,任何不能被转换为数值的的值都会返回 true,因此非数字值传入也会返回 true ,会影响 NaN 的判断。

2.函数 Number.isNaN 会首先判断传入参数是否为数字,如果是数字再继续判断是否为 NaN ,不会进行数据类型的转换,这种方法对于 NaN 的判断更为准确。

每日二省
为什么0.1+0.2 ! == 0.3,如何让其相等?

一个直接的解决方法就是设置一个误差范围,通常称为“机器精度”。对JavaScript来说,这个值通常为2-52,在ES6中,提供了Number.EPSILON属性,而它的值就是2-52,只要判断0.1+0.2-0.3是否小于Number.EPSILON,如果小于,就可以判断为0.1+0.2 ===0.3。

每日三省
== 操作符的强制类型转换规则?

1.首先会判断两者类型是否**相同,**相同的话就比较两者的大小。

2.类型不相同的话,就会进行类型转换。

3.会先判断是否在对比 null 和 undefined,是的话就会返回 true。

4.判断两者类型是否为 string 和 number,是的话就会将字符串转换为 number。

5.判断其中一方是否为 boolean,是的话就会把 boolean 转为 number 再进行判断。

6.判断其中一方是否为 object 且另一方为 string、number 或者 symbol,是的话就会把 object 转为原始类型再进行判断。

每日英语
Happiness is time precipitation, smile is the lonely sad.
幸福是年华的沉淀,微笑是寂寞的悲伤。