文章目录
1. Nacos基本使用
下载:https://github.com/alibaba/nacos/releases
官方文档:https://nacos.io/zh-cn/
直接解压使用即可。
启动:Nacos_Home/bin/startup.sh
初始账号/密码:nacos/nacos
2. Nacos配置Mysql8
Nacos是存在一个嵌入式的数据库derby的,查看源码的pom.xml就能够看见org.apache.derby。
如果希望更改为本地数据库(目前只支持mysql)的话,步骤如下:
(1)初始化mysql数据库,利用/conf/nacos-mysql.sql导入库和表
(2)修改配置文件/conf/application.properties,在内容最下面追加即可,这是官网给出的配置样例
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://11.162.196.16:3306/nacos_devtest?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=nacos_devtest
db.password=youdontknow
但是对于Nacos1.2.1版本,官方要求的mysql版本是5.6.5+,而目前大部分的人都不再使用mysql5.几的版本了,大部分人用的都是mysql8,而这也就会导致连接失败的情况,因此我们需要更改数据库为mysql8。
配置文件更改为:
########################################## mysql config ######################
spring.datasource.platform=mysql
driver-class-name=com.mysql.cj.jdbc.Driver
db.num=1
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos-config?serverTimezone=Asia/Shanghai&characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root
db.password=123456
注意如果是Linux系统,最好不要使用127.0.0.1,直接配置成Linux系统的ip地址是最好的。
更改配置文件是第一步,我们可以去查看/target/nacos-server.jar/BOOT-INF/lib下面Nacos所使用的jar包,会发现只引入了mysql-connect-java-5.1.34.jar
目前网上大部分资料都是直接下载Nacos源码,然后修改pom文件里面的jar包引用和部分import,最后再自己打包,来替代nacos-server.jar文件。
这有一个更加简单的办法来解决mysql连接失败的问题,新建文件夹/plugins/mysql,在下面放入自己的mysql-connection-java-8.0.19.jar
再次启动即可解决Nacos无法连接mysql8的问题了。
3. Nacos配置集群(Linux)
首先针对于数据库的更改,Linux的更改方式和Windows下面的方式是完全一样的。
通常情况下,学习使用一般都是弄一台Linux虚拟机就足够了,因此我们需要在一台虚拟机上启动三个Nacos实例(官方说明:Nacos集群至少三个)
基本环境说明:
tar -zxvf nacos-server.1.2.1.tar.gz
解压下载好的Nacos压缩包,能够看见基本的目录结构和Windows下是完全一样的
更改了数据库之后,启动Nacos集群就会出现第一个问题:Nacos默认端口是8848,那么如何更改这个端口,来启动三个Nacos进程。
首先,修改集群配置文件:cluster.conf.example
复制一份集群配置文件:
cp cluster.conf.example cluster.conf
修改配置文件:
vim cluster.conf
按照给出的例子,修改三个配置文件即可:
第二步:更改启动文件startup.sh,让启动的时候能够接受一个参数,这个参数就是我们要传入的端口号。
while getopts ":m:f:s:p:" opt
do
case $opt in
m)
MODE=$OPTARG;;
f)
FUNCTION_MODE=$OPTARG;;
s)
SERVER=$OPTARG;;
p)
PORT=$OPTARG;;
?)
echo "Unknown parameter"
exit 1;;
esac
done
修改前后对比,修改部分标红:
修改的意思为:添加了一个启动参数p,通过case语句,将我们传入的参数的值赋值给变量PORT,这样在后面就能利用PORT来获取到我们传入的端口号。
修改第二处:配置启动的端口号为变量PORT
# start
echo "$JAVA ${JAVA_OPT}" > ${BASE_DIR}/logs/start.out 2>&1 &
nohup $JAVA -Dserver.port=${PORT} ${JAVA_OPT} nacos.nacos >> ${BASE_DIR}/logs/start.out 2>&1 &
echo "nacos is starting,you can check the ${BASE_DIR}/logs/start.out"
全部修改完成,这样我们启动的时候的命令为:
./startup.sh -p 3333
3.1 Linux 和 windows启动差异
在启动的时候有一点是非常值得注意的,在Linux下面,如果我们希望和Windows一样直接单机启动的话,在启动的时候就会报错。
这个坑我最开始也没有注意到的,就是在Linux下一直启动失败,在网上查资料也没有相关资料,后来去查看日志文件/logs/start.out,才发现启动出现了异常,异常如下:
但是,这种情况在windows下面却没有出现过,可以在windows下去查看最初的文件目录,也是不存在cluster.conf。
我在网上资料也没有查找到导致这种情况的原因是什么,最后在startup.sh文件中找到了原因。
Windows版的startup.cmd
再看下Linux版的startup.sh
这就能很清楚的看到问题所在了,在Windows下面,默认的启动模式是Standalone,单机模式,而在Linux系统下,默认的启动模式是cluster。
解决方法,我们可以查看startup.sh,就会发现,在启动Nacos的时候能够接受一个参数m而这个m,那么我们就自己传入单机启动的参数standalone即可。
因此,Linux系统上单机启动命令:
./startup.sh -m standalone
3.2 Linux集群启动问题
在学习过程中,如果使用一台Linux虚拟机上来做集群的话,还存在另外一个问题,我们使用上面的命令来启动Nacos
./startup.sh -p 3333
会发现,完全无法启动,而且Linux虚拟机变的特别的卡。
这个时候去查看start.out日志
不断的循环这句话,一直无法正常启动,查看其它日志文件(logs下面提供了各种的日志文件)也没有发现出现错误,在网上查找相关资料也没有查找到这方面的问题,因此猜测原因可能是因为目前是cluster做集群,是不是因为还没有启动其它两个节点,所以导致当前节点一直在等待其它节点的启动(现在想起来当时跟个二傻子一样,阿里的大神能写出这样的代码?也就我这二傻子会这么想)。
然后眼一闭,心一横,直接三个Nacos实例全部启动,终于……终于出现了我梦寐以求(唉,我这种菜鸟程序猿最怕的就是无法启动而且没有错误)的错误:OOM(关于OOM,详情)
瞅一眼Nacos生成的错误日志就能知道原因:
1016860 kB ≈ 1000MB不到,再瞅一眼Nacos集群的JVM启动参数:
堆就要2个g了。。。。能启动才怪。当然,这也是我自己的问题,每次启动了后,就直接clear控制台,其实控制台都已经说明了Emmmmmm
最后就是修改启动参数就好了,修改startup.sh中的JVM启动参数,修改后如图:
if [[ "${MODE}" == "standalone" ]]; then
JAVA_OPT="${JAVA_OPT} -Xms512m -Xmx512m -Xmn256m"
JAVA_OPT="${JAVA_OPT} -Dnacos.standalone=true"
else
JAVA_OPT="${JAVA_OPT} -server -Xms128m -Xmx128m -Xmn64m -XX:MetaspaceSize=32m -XX:MaxMetaspaceSize=64m"
JAVA_OPT="${JAVA_OPT} -XX:-OmitStackTraceInFastThrow -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${BASE_DIR}/logs/java_heapdump.hprof"
JAVA_OPT="${JAVA_OPT} -XX:-UseLargePages"
在这我们也能知道,为什么Linux上单机能够启动,而集群模式无法启动,因为两者启动参数不同。
4. 学习学习,努力学习
燃烧吧,青春!啊,青春.这就是青春~~~