Nacos集群部署以及部分踩坑

    技术2022-07-11  91

    在Linux里部署Nacos,使用mysql代替自带的嵌入数据库,之前部署单机版的时候成功启动了,下午在配置集群版的时候遇到了些问题记录一下。

    首先就是下载Nacos的tar包,从Github官网或者国内的Gitee上下载,用工具拖到Linux主机里解压。

    1、配置Linux的mysql数据库:在Nacos的conf目录下可以找名叫nacos-mysql.sql的文件,复制后到数据库中执行该脚本,会得到一个名为nacos_config的数据库

    2、接下载就是修改application.properties配置文件:在conf目录下找到该文件,在末尾添加上:

    spring. datasource.platform=mysql db.num=1 db.url.0= jdbc:mysq1://127.0.0.1:3306/nacos_config?characterEncoding=utf8&connect Timeout=1000&socketTimeout=3000&autoReconnect=true db.user=root db.password=123456

    3、修改cluster.conf配置文件:将里面的内容设置为:

    192.168.1.10:3333 192.168.1.10:4444 192.168.1.10:5555

    其中内容根据自身而定,hostname -i可查看主机地址,在这次测试中我使用一台Linux主机,开放三个端口

    4、修改startup.sh:修改之前最好备份。在bin目录下找到脚本:

    export SERVER="nacos-server ” export MODE="cluster" export FUNCTION MODE="al 1 " while getopts :m: f:s:p:" opt do case $opt in m) MODE=$OPTARG; ; f) FUNCT ION MODE=$OPTARG; ; S) SERVER=SOPTARG; ; p) PORT=$OPTARG; ; ?) echo "Unknown pa rameter" exit 1;; esac done # 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”

    对这些配置进行添加后,之后启动Nacos可以通过./startup.sh -p 3333(端口号) 进行

    5、修改Nginx配置:(前提已经安装好Nginx)找到conf/nginx.conf进行修改

    upstream cluster { server 127.0.0.1:3333; server 127.0.0.1:4444; server 127.0.0.1:5555; } server { listen 1111; server_name 192.168.1.1; #Linux主机地址 #charset. koi8-r; #access_log 1ogs/host.access.log main; location / { proxy_pass http://cluster ; }

    这里我们让Nginx监听1111端口(记得要开放该端口),实现负载均衡

    接下来我使用./startup.sh -p 3333,./startup.sh -p 4444,./startup.sh -p 4444启动Nacos集群

    浏览器访问192.168.1.10:1111/nacos,但无响应?

    回到Linux主机,查看nacos下logs/start.out的启动日志,结果发现这么一条内容:

    org.springframework.jdbc.cannotgetjdbcconnectionexception: failed to obtain jdbc connection; nested exception is org.apache.commons.dbcp.sqlnestedexception: cannot create poolableconnectionfactory (could not create connection to database server. attempted reconnect 3 times. giving up.)

    数据库连接失败?查下资料,结果发现我这个版本Nacos和mysql8.0以上存在兼容问题(1.30听说没有这个问题了),解决方法:在nacos安装目录下新建plugins/mysql文件夹,并放入8.0+版本的mysql-connector-java-8.0.xx.jar

    好的,重启Nacos,这是启动日志里会提示你MySQL连接驱动更新:

    Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automm atically registered via the SPI and manual loading of the driver class is generally unnecessary.

    但,又报错了

    看看报错信息:

    failed; error='Cannot allocate memoryy ' (errno=12)

    项目部署内存不足?再次打开bin目录下的startup.sh查看:

    #=========================================================================================== # JVM Configuration #=========================================================================================== if [[ "${MODE}" == "standalone" ]]; then JAVA_OPT="${JAVA_OPT} -Xms512m -Xmx512m -Xmn256m" JAVA_OPT="${JAVA_OPT} -Dnacos.standalone=true" else JAVA_OPT="${JAVA_OPT} -server -Xms2g -Xmx2g -Xmn1g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m" JAVA_OPT="${JAVA_OPT} -XX:-OmitStackTraceInFastThrow -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${BASE_DIR}/logs/java_hee apdump.hprof" JAVA_OPT="${JAVA_OPT} -XX:-UseLargePages"

    默认启动2g的内存空间,修改下内存分配

    if [[ "${MODE}" == "standalone" ]]; then JAVA_OPT="${JAVA_OPT} -Xms512m -Xmx512m -Xmn256m" JAVA_OPT="${JAVA_OPT} -Dnacos.standalone=true" else JAVA_OPT="${JAVA_OPT} -server -Xms500m -Xmx500m -Xmn256m -XX:MetaspaceSize=125m -XX:MaxMetaspaceSize=320m" JAVA_OPT="${JAVA_OPT} -XX:-OmitStackTraceInFastThrow -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${BASE_DIR}/logs/java_hee apdump.hprof" JAVA_OPT="${JAVA_OPT} -XX:-UseLargePages"

    OK,重启Nacos集群,再次浏览器访问192.168.1.10:1111/nacos,成功访问,随意配置条信心后保存,查看Linux主机的数据库,如果有该条数据插入那么就成功了!

    Processed: 0.014, SQL: 9