Linux-Nacos-服务注册中心搭建

由于springcloud 注册中心 Eureka 早已停止维护所以我们使用Nacos

官方: https://nacos.io/zh-cn/docs/what-is-nacos.html

欢迎来到 Nacos 的世界!

Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。

Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。

一图看懂 Nacos,下面架构部分会详细介绍。

不多说一句话就是牛逼就行了,简化了我们之前的eureka操作外加和配置中心的整合

手动安装Nacos(单机版)

关闭防火墙 或者开放8848端口 下面有教程

https://github.com/alibaba/nacos/releases 官方编译后的nacos下载地址 可能会因为网络原因出现访问不了的情况

或者百度网盘

链接:https://pan.baidu.com/s/18GYgaGOp5qmZtDWPsM9ZNw
提取码:1234

在安装前linux必须有JDK8+ 而且配置好了环境变量 否则启动不了Nacos

linux 下载 .tar.gz windows 下载 zip 我自己下载的是nacos-server-2.0.1.tar.gz

然后解压到指定目录中这个可以随意 比如: mkdir -p /root/nacos cd /root/nacos

tar -xvf  nacos-server-2.0.1.tar.gz

然后进入到可执行文件目录

cd nacos/bin

完事了吗? 当然没有,因为上述配置有问题 ,当我们使用默认配置启动Nacos时,所有配置文件都被Nacos保存在了内置的数据库中。

在单机模式时nacos使用嵌入式数据库实现数据的存储,不方便观察数据存储的基本情况。

如果使用内嵌数据库,注定会有存储上限,本文带大家一起将Nacos中的数据实现持久化

然后在服务器上创建一个数据库…我使用的是mysql5.7

之后使用nacos-mysql.sql 数据库初始化sql文件在本地Navicat连接远程数据库后创建数据库名称:nacos_config,然后把sql初始化文件导入到这个数据库里就行了

nacos-mysql.sql 文件

链接:https://pan.baidu.com/s/1HMECC18VunixlT7bo9OAkA
提取码:1234
–来自百度网盘超级会员V5的分享

之后我们还需要修改nacos文件下conf目录中application.properties内容

在修改前我们需要将application.properties.example拷贝下来 然后把config里面的 application.propertie和application.properties.example删除

然后修改下载来了的application.properties.example内容大概在30左右位置

把注解去掉,然后把数据库ip地址换成自己的,账号密码也是一样

#*************** Config Module Related Configurations ***************#
### If use MySQL as datasource:
spring.datasource.platform=mysql### Count of DB:
db.num=1### Connect URL of DB:
db.url.0=jdbc:mysql://192.168.81.1:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=Asia/Shanghai
db.user=root
db.password=root

在填写数据库ip前需要在服务ping 172.29.204.221 下 看看能ping通吗否则报错

修改完成 将 application.properties.example 改为 application.propertie上传到conf 下面就行了

正常情况下本机连接root是没问题了但是不能夸平台所以我们需要给他从"localhost"改称"%"

  1. 登录mysql

    mysql -u root -p
    
  2. 进入mysql 名称这个数据库

    use mysql;
    
  3. 查询root的使用范围权限

    select host from user where user='root';
    

    如果结果是:localhost 那么就不对需要进行修改

  4. 将默认的"localhost"改称"%"

    update user set host = '%' where user ='root';
    
  5. 刷新mysql的配置

    flush privileges;
    

单机版启动Nacos (3分钟左右)

sh startup.sh -m standalone

如果需要关闭当前正在运行的Nacos服务

sh shutdown.sh

实时查询logs(一定要在启动Nacos后赶紧使用 否则报错后你都不知道到原因,一般都是第一个报错后引起一连串报错,所以要认真查看)

在上面命令启动后会显示log位置然后替换下面路径就行

tail -f    /root/nacos/nacos/logs/start.out

如果日志没问题那么就可以访问了 如果报错一定都是数据库的问题不用想

然后我们就可以登录 Nacos控制台进行管理了 地址: http://你的ip:8848/nacos/

比如: http://192.168.232.130:8848/nacos/

如果访问失败那么检查防火墙是否关闭 或者8848端口是否放行

然后我们可以发现页面内容都是空的,那么如何测试呢?

服务注册:(模拟一个服务,因为这是一个空服务在一段时间后就会被Nacos发现是假的只是用于测试)

curl -X POST 'http://127.0.0.1:8848/nacos/v1/ns/instance?serviceName=nacos.naming.serviceName&ip=20.18.7.10&port=8080'

服务发现:(通过Git请求获取上面注册的服务信息)

curl -X GET 'http://127.0.0.1:8848/nacos/v1/ns/instance/list?serviceName=nacos.naming.serviceName'
{"name":"DEFAULT_GROUP@@nacos.naming.serviceName","groupName":"DEFAULT_GROUP","clusters":"","cacheMillis":10000,"hosts":[{"instanceId":"20.18.7.10#8080#DEFAULT#DEFAULT_GROUP@@nacos.naming.serviceName","ip":"20.18.7.10","port":8080,"weight":"1.0","healthy":true,"enabled":true,"ephemeral":true,"clusterName":"DEFAULT","serviceName":"DEFAULT_GROUP@@nacos.naming.serviceName","metadata":{},"instanceHeartBeatInterval":5000,"instanceIdGenerator":"simple","ipDeleteTimeout":30000,"instanceHeartBeatTimeOut":15000}],"lastRefTime":1621161362425,"checksum":"","allIPs":false,"reachProtectionThreshold":false,"valid":true
}

发布配置

curl -X POST "http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=nacos.cfg.dataId&group=test&content=helloWorld"

获取配置:

 curl -X GET "http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=nacos.cfg.dataId&group=test"
helloWorld

使用上面的测试url添加一条配置 然后我们可以到数据库里看看是否录入了,

手动安装Nacos集群

在集群前我们需要准备好 3个节点 最低集群标准

192.168.81.128 (主) nocos服务器
192.168.81.129 (副) nocos服务器
192.168.81.130 (副) nocos服务器

还需要在每个节点上装好JDK 并配置好环境变量

而且我们还需要准备一个Nacos共享数据库

还需要准备nginx用于 nacos群代理服务器

192.168.81.100 nginx服务器

以下安装过程在3个节点中都要部署一样的配置

关闭每个节点的防火墙 或者开放8848端口 下面有教程

https://github.com/alibaba/nacos/releases 官方编译后的nacos下载地址 可能会因为网络原因出现访问不了的情况

在安装前linux必须有JDK8+ 而且配置好了环境变量 否则启动不了Nacos

linux 下载 .tar.gz windows 下载 zip 我自己下载的是nacos-server-2.0.1.tar.gz

或者百度网盘

链接:https://pan.baidu.com/s/18GYgaGOp5qmZtDWPsM9ZNw
提取码:1234

然后解压到指定目录中这个可以随意 比如: mkdir -p /root/nacos cd /root/nacos

tar -xvf  nacos-server-2.0.1.tar.gz

完事了吗? 当然没有,因为上述配置有问题 ,当我们使用默认配置启动Nacos时,所有配置文件都被Nacos保存在了内置的数据库中。

集群必须配置统一数据库,不然每个节点的数据不同

然后在服务器上创建一个数据库…我使用的是mysql5.7

使用 nacos-mysql.sql 数据库初始化sql文件然后在本地Navicat连接远程数据库后创建数据库名称:nacos_config,然后把sql初始化文件导入到这个数据库里就行了.

nacos-mysql.sql 文件

链接:https://pan.baidu.com/s/1HMECC18VunixlT7bo9OAkA
提取码:1234
–来自百度网盘超级会员V5的分享

之后我们还需要修改nacos文件下conf目录中application.properties内容

在修改前我们需要将application.properties.example拷贝下来 然后把config里面的 application.propertie和application.properties.example删除

然后修改下载来了的application.properties.example内容大概在30左右位置

把注解去掉,然后把数据库ip地址换成自己的,账号密码也是一样

#*************** Config Module Related Configurations ***************#
### If use MySQL as datasource:
spring.datasource.platform=mysql### Count of DB:
db.num=1### Connect URL of DB:
db.url.0=jdbc:mysql://192.168.81.1:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=Asia/Shanghai
db.user=root
db.password=root

在填写数据库ip前需要在服务ping 172.29.204.221 下 看看能ping通吗否则报错

修改完成 将 application.properties.example 改为 application.propertie上传到conf 下面就行了

下面这个操作做一次就行了 如果 root 以前改为 "%"了那么就不用管了

正常情况下本机连接root是没问题了但是不能夸平台所以我们需要给他从"localhost"改称"%"

  1. 登录mysql

    mysql -u root -p
    
  2. 进入mysql 名称这个数据库

    use mysql;
    
  3. 查询root的使用范围权限

    select host from user where user='root';
    

    如果结果是:"%" 那么就不对需要进行修改

  4. 将默认的"localhost"改称"%"

    update user set host = '%' where user ='root';
    
  5. 刷新mysql的配置

    flush privileges;
    

修改conf/cluster.conf.example 的内容 (集群必须配置)

192.168.81.128:8848
192.168.81.129:8848
192.168.81.130:8848

修改完后文件名改为cluster.conf

集群Nacos 默认Xms 和Xmx都是2g 如果单节点的服务器内存小于3G的话就需要调整否则会导致启动不起来Nacos的

修改对应的cd /root/nacos/nacos/bin

vi  startup.sh

测试的话改为 512m 512m 256m 和单机相同就行

集群办启动Nacos (3分钟左右)

sh startup.sh

实时查询logs(一定要在启动Nacos后赶紧使用 否则报错后你都不知道到原因,一般都是第一个报错后引起一连串报错,所以要认真查看)

在上面命令启动后会显示log位置然后替换下面路径就行

tail -f    /root/nacos/nacos/logs/start.out

如果日志没问题那么就可以访问了 如果报错一定都是数据库的问题不用想

如果需要关闭当前正在运行的Nacos服务

sh shutdown.sh

然后逐个ip去测试

http://192.168.81.128:8848/nacos/

http://192.168.81.129:8848/nacos/

http://192.168.81.130:8848/nacos/

输入默认账号密码:nacos,nacos

如果访问失败那么检查防火墙是否关闭 或者8848端口是否放行

在任意节点发布配置 (如果三个节点都同时有了那么就成功了)

curl -X POST "http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=nacos.cfg.dataId&group=test&content=helloWorld"

Nginx 转发

再启动一台服务器 192.168.81.100,安装 Nginx,配置代理转发规则。

在nginx.conf中http标签中加入如下代码:

   upstream cluster {server 192.168.81.128:8848 weight=1 max_fails=2 fail_timeout=10s;server 192.168.81.129:8848 weight=1 max_fails=2 fail_timeout=10s;server 192.168.81.130:8848 weight=1 max_fails=2 fail_timeout=10s;}server{listen  80;server_name localhost;location /nacos {proxy_pass http://cluster/nacos;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header REMOTE-HOST $remote_addr;add_header X-Cache $upstream_cache_status;add_header Cache-Control no-cache;}}

常用Nginx命令:

修改配置后重新加载生效

/usr/local/nginx/sbin/nginx -s reload

启动nginx:

/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

然后我们就可以使用nginx的地址 http://192.168.81.100/nacos 进行访问了

可以看到三个节点的服务都正常显示

然后我们使用nginx代理进行注册服务

curl -X POST 'http://192.168.81.100:80/nacos/v1/ns/instance?serviceName=nacos.naming.serviceName&ip=20.18.7.10&port=8080'

然后进入到服务列表里查看如果存在那么在刷新页面, 还存在那么就代表集群部署成功

Spring Cloud Alibaba连接Nacos集群

spring:application:name: nacos-providercloud:nacos:discovery:server-addr: 192.168.81.100:80 #nginx-nacos注册中心地址
server:port: 17357

docker安装Nacos(单机版)

关闭防火墙 或者开放8848端口 下面有教程

然后创建一个nacos_config数据库然后导入下面的配置文件

数据库初始化文件

链接:https://pan.baidu.com/s/1XcmYGfwyk5nDG8UD6wvq1A
提取码:1234

我的数据库ip是192.168.81.1:3306

下面这个操作做一次就行了 如果 root 以前改为 "%"了那么就不用管了

正常情况下本机连接root是没问题了但是不能夸平台所以我们需要给他从"localhost"改称"%"

  1. 登录mysql

    mysql -u root -p
    
  2. 进入mysql 名称这个数据库

    use mysql;
    
  3. 查询root的使用范围权限

    select host from user where user='root';
    

    如果结果是:"%" 那么就不对需要进行修改

  4. 将默认的"localhost"改称"%"

    update user set host = '%' where user ='root';
    
  5. 刷新mysql的配置

    flush privileges;
    
mkdir -p /home/nacos/logs & mkdir -p /home/nacos/init.d & mkdir -p /home/nacos/conf
vi  /home/nacos/conf/application.properties
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://192.168.81.1:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=Asia/Shanghai
db.user=root
db.password=rootnacos.naming.empty-service.auto-clean=true
nacos.naming.empty-service.clean.initial-delay-ms=50000
nacos.naming.empty-service.clean.period-time-ms=30000
management.endpoints.web.exposure.include=*
management.metrics.export.elastic.enabled=false
management.metrics.export.influx.enabled=false
server.tomcat.accesslog.enabled=true
server.tomcat.accesslog.pattern=%h %l %u %t "%r" %s %b %D %{User-Agent}i %{Request-Source}i
server.tomcat.basedir=
nacos.security.ignore.urls=/,/error,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-ui/public/**,/v1/auth/**,/v1/console/health/**,/actuator/**,/v1/console/server/**
nacos.core.auth.system.type=nacos
nacos.core.auth.enabled=false
nacos.core.auth.default.token.expire.seconds=18000
nacos.core.auth.default.token.secret.key=SecretKey012345678901234567890123456789012345678901234567890123456789
nacos.core.auth.caching.enabled=true
nacos.core.auth.enable.userAgentAuthWhite=false
nacos.core.auth.server.identity.key=serverIdentity
nacos.core.auth.server.identity.value=security
nacos.istio.mcp.server.enabled=false

文件内 db.url.0 替换成你的数据库地址 和账号密码 其他都不动

启动容器

docker run -d --name nacos  \
-e MODE=standalone \
--privileged=true \
--network=host \
--restart=always \
-e JVM_XMS=256m \
-e JVM_XMX=256m \
-e JVM_XMN=128m     \
-e TIME_ZONE='Asia/Shanghai' \
-v /home/nacos/logs:/home/nacos/logs \
-v /home/nacos/conf/application.properties:/home/nacos/conf/application.properties \
nacos/nacos-server:2.0.1

如果服务器宕机后需要重启nacos才行

docker restart nacos-cluster

查看日志

cd /home/nacos/logs

然后访问 http://192.168.81.128:8848/nacos/

然后我们可以发现都是空的,那么如何测试呢?

服务注册:(模拟一个服务,因为这是一个空服务在一段时间后就会被Nacos发现是假的只是用于测试)

curl -X POST 'http://127.0.0.1:8848/nacos/v1/ns/instance?serviceName=nacos.naming.serviceName&ip=20.18.7.10&port=8080'

服务发现:(通过Git请求获取上面注册的服务信息)

curl -X GET 'http://127.0.0.1:8848/nacos/v1/ns/instance/list?serviceName=nacos.naming.serviceName'
{"name":"DEFAULT_GROUP@@nacos.naming.serviceName","groupName":"DEFAULT_GROUP","clusters":"","cacheMillis":10000,"hosts":[{"instanceId":"20.18.7.10#8080#DEFAULT#DEFAULT_GROUP@@nacos.naming.serviceName","ip":"20.18.7.10","port":8080,"weight":"1.0","healthy":true,"enabled":true,"ephemeral":true,"clusterName":"DEFAULT","serviceName":"DEFAULT_GROUP@@nacos.naming.serviceName","metadata":{},"instanceHeartBeatInterval":5000,"instanceIdGenerator":"simple","ipDeleteTimeout":30000,"instanceHeartBeatTimeOut":15000}],"lastRefTime":1621161362425,"checksum":"","allIPs":false,"reachProtectionThreshold":false,"valid":true
}

发布配置

curl -X POST "http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=nacos.cfg.dataId&group=test&content=helloWorld"

获取配置:

 curl -X GET "http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=nacos.cfg.dataId&group=test"
helloWorld

docker 安装Nacos(集群版)

在集群前我们需要准备好 3个节点 最低集群标准

192.168.81.128 (主) nocos服务器
192.168.81.129 (副) nocos服务器
192.168.81.130 (副) nocos服务器

而且我们还需要准备一个Nacos共享数据库

还需要准备nginx用于 nacos群代理服务器

192.168.81.100 nginx服务器

其他的后面在说

创建一个nacos_config数据库然后导入下面的配置文件

数据库初始化文件

链接:https://pan.baidu.com/s/1XcmYGfwyk5nDG8UD6wvq1A
提取码:1234

我的数据库ip是192.168.81.1:3306

下面这个操作做一次就行了 如果 root 以前改为 "%"了那么就不用管了

正常情况下本机连接root是没问题了但是不能夸平台所以我们需要给他从"localhost"改称"%"

  1. 登录mysql

    mysql -u root -p
    
  2. 进入mysql 名称这个数据库

    use mysql;
    
  3. 查询root的使用范围权限

    select host from user where user='root';
    

    如果结果是:"%" 那么就不对需要进行修改

  4. 将默认的"localhost"改称"%"

    update user set host = '%' where user ='root';
    
  5. 刷新mysql的配置

    flush privileges;
    

以下步骤在3个节点上都执行一遍(内容不变)

mkdir -p /home/nacos/logs & mkdir -p /home/nacos/init.d & mkdir -p /home/nacos/conf
vi  /home/nacos/conf/application.properties

spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://192.168.81.1:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=Asia/Shanghaidb.user=root
db.password=rootnacos.naming.empty-service.auto-clean=true
nacos.naming.empty-service.clean.initial-delay-ms=50000
nacos.naming.empty-service.clean.period-time-ms=30000
management.endpoints.web.exposure.include=*
management.metrics.export.elastic.enabled=false
management.metrics.export.influx.enabled=false
server.tomcat.accesslog.enabled=true
server.tomcat.accesslog.pattern=%h %l %u %t "%r" %s %b %D %{User-Agent}i %{Request-Source}i
server.tomcat.basedir=
nacos.security.ignore.urls=/,/error,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-ui/public/**,/v1/auth/**,/v1/console/health/**,/actuator/**,/v1/console/server/**nacos.core.auth.system.type=nacos
nacos.core.auth.enabled=false
nacos.core.auth.default.token.expire.seconds=18000nacos.core.auth.default.token.secret.key=SecretKey012345678901234567890123456789012345678901234567890123456789nacos.core.auth.caching.enabled=true
nacos.core.auth.enable.userAgentAuthWhite=false
nacos.core.auth.server.identity.key=serverIdentity
nacos.core.auth.server.identity.value=security
nacos.istio.mcp.server.enabled=false

文件内 db.url.0 替换成你的数据库地址 和账号密码 其他都不动

(集群关键地方)启动容器 (和单机版有些不同)

docker run -d --name nacos-cluster  \
--network host \
-e PREFER_HOST_MODE=hostname \
-e NACOS_SERVER_IP=192.168.81.128 \
--privileged=true \
--restart=always \
-e NACOS_SERVERS=192.168.81.128:8848,192.168.81.129:8848,192.168.81.130:8848 \
-e JVM_XMS=256m \
-e JVM_XMX=256m \
-e JVM_XMN=128m     \
-e TIME_ZONE='Asia/Shanghai' \
-e TOMCAT_ACCESSLOG_ENABLED=false \
-v /home/nacos/logs:/home/nacos/logs \
-v /home/nacos/conf/application.properties:/home/nacos/conf/application.properties \
nacos/nacos-server:2.0.1

注意:

-e NACOS_SERVER_IP 换成当前节点的ip (不然集群各节点相互不通)

-e NACOS_SERVERS 对应的是每一个需要集群的节点ip

如果服务器宕机后需要重启nacos才行

docker restart nacos-cluster

查看日志

cd /home/nacos/logs

如果start.out里没有报错 那么就代表成功了

然后访问 http://192.168.81.128:8848/nacos/

然后访问 http://192.168.81.129:8848/nacos/

然后访问 http://192.168.81.130:8848/nacos/

Nginx 转发

再启动一台服务器 192.168.81.100,安装 Nginx,配置代理转发规则。

在nginx.conf中http标签中加入如下代码:

   upstream cluster {server 192.168.81.128:8848 weight=1 max_fails=2 fail_timeout=10s;server 192.168.81.129:8848 weight=1 max_fails=2 fail_timeout=10s;server 192.168.81.130:8848 weight=1 max_fails=2 fail_timeout=10s;}server{listen  80;server_name localhost;location /nacos {proxy_pass http://cluster/nacos;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header REMOTE-HOST $remote_addr;add_header X-Cache $upstream_cache_status;add_header Cache-Control no-cache;}}

常用Nginx命令:

修改配置后重新加载生效

/usr/local/nginx/sbin/nginx -s reload

启动nginx:

/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

然后我们就可以使用nginx的地址 http://192.168.81.100/nacos 进行访问了

可以看到三个节点的服务都正常显示

然后我们使用nginx代理进行注册服务

curl -X POST 'http://192.168.81.100:80/nacos/v1/ns/instance?serviceName=nacos.naming.serviceName&ip=20.18.7.10&port=8080'

然后进入到服务列表里查看如果存在那么在刷新页面, 还存在那么就代表集群部署成功

Spring Cloud Alibaba连接Nacos集群

spring:application:name: nacos-providercloud:nacos:discovery:server-addr: 192.168.81.100:80 #nginx-nacos注册中心地址
server:port: 17357

Nacos部署出现的问题

错误1:

Nacos 0~2.xx各种版本大部分都是数据库出现的错误 如果你的数据库是 mysql8 那么从新安装一个mysql7把 不要问为啥…

错误2

如果类似下面这样的错误

1、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.)
2、Caused by: java.lang.NullPointerExceptionat com.mysql.jdbc.ConnectionImpl.getServerCharset(ConnectionImpl.java:29at com.mysql.jdbc.MysqlIO.sendConnectionAttributes(MysqlIO.java:1873)at com.mysql.jdbc.MysqlIO.proceedHandshakeWithPluggableAuthentication(Myat com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1206)at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2234)at com.mysql.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:... 28 more

追踪源码可以看到错误是由于com.mysql.jdbc.ConnectionImpl.getServerCharset中获取不到character_set_server参数造成的

解决方案:

找到你的mysql配置文件my.cnf或my.ini
在[mysqld]下添加编码配置,如下所示:

[mysqld]
character_set_server=utf8

重启mysql

systemctl restart mysqld

错误3

如果出现类似下面这样的错误

 null,  message from server: "Host 'DESKTOP-R0PPSGR' is not allowed to connect to this MySQL server"

这个异常是数据库只允许localhost或127.0.0.1访问,不允许远程访问。我用的本机IP都不行。

解决办法:修改访问权限即可。

mysql -uroot -p密码 登陆到数据:use mysql;
select host,user from user;
可以看到user为root,host为localhost的话,说明mysql只允许本机连接,那么外网,本地软件客户端就无法连接了。
调整方法:
执行:update user set host='%' where user ='root';
执行刷新权限:flush privileges;
可以测试外网连接mysql服务器。

错误4

如果你的数据库是mysql8那么肯定会报错

解决办法

在 Nacos 安装目录下新建 plugins/mysql 文件夹,并放入 8.0+ 版本的 mysql-connector-java-8.0.xx.jar,重启 Nacos 即可,启动时会提示更换了 MySQL 的 driver-class 类。

错误5

启动不了nacos或者跑了一段时间Nacos挂了 那么你先检查是不是本地服务器内存太小 如果本地服务器内存低于3g

那么就可能导致Nacos挂掉 因为Nacos默认占用2g

修改方法在文章后面 Nacos-JVM优化

错误6

以上问题都解决不了,并且报的错还是 mysql 连接失败 那么就检查application.properties配置文件 实在不行就从新写一个 把原来删除了 (我就是这样解决问题的)

Nacos-mysql 主从节点(集群)

官方推荐使用高可用Mysql,正好Mysql也符合要求,MHA架构,一主一备两从 ,一般生产会使用到 ,还是那句话建议使用msql5.7会少很多问题,每个节点的数据库账号密码都是一样的

修改每个节点的 application.properties内容 其他都保持不变就行

db.num=3
db.url.0=jdbc:mysql://192.168.174.1:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC&serverTimezone=UTCdb.url.1=jdbc:mysql://192.168.174.2:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC&serverTimezone=UTCdb.url.2=jdbc:mysql://192.168.174.3:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC&serverTimezone=UTC

如果 0.1.2 数据库密码都不一样那么可以指定账号密码

db.user.0=root
db.password.0=root

防火墙

查看防火墙状态

systemctl status firewalld

暂时关闭防火墙 (重启虚拟机后失效)

systemctl stop firewalld

永久关闭防火墙

systemctl disable firewalld

开启防火墙

systemctl start firewalld

开放端口

 firewall-cmd --zone=public --add-port=8848/tcp --permanent

重启防火墙 (开放端口后需要重启防火墙 否则不起作用)

firewall-cmd --reload

查看端口号

netstat -ntlp

查看所有8848 端口使用情况

netstat -ntulp |grep 8848

Nacos-JVM优化

如果虚拟机内存较小或者服务内存较小 建议修改jvm参数

集群Nacos 默认Xms 和Xmx都是2g 如果你虚拟机内存小于3G的话就需要调整否则会导致启动不起来Nacos的

修改对应的bin/startup.sh

vi  startup.sh

测试的话改为 512m 512m 256m 和单机相同就行

根据你自己服务器大小决定,如果一个服务器没有其他服务的话只有Nacos那么jVM可以设置占比百分之80

如果有其他服务的话那么需要测试每个服务占比多少内存,然后在余下百分之10给服务内部运转其他的内存就全给Nacos就行

点赞 -收藏-关注-便于以后复习和收到最新内容 有其他问题在评论区讨论-或者私信我-收到会在第一时间回复 如有侵权,请私信联系我 感谢,配合,希望我的努力对你有帮助^_^

Linux-Nacos-服务注册中心搭建相关推荐

  1. 二、Nacos服务注册中心应用实践

    Nacos服务注册中心 文章目录 Nacos服务注册中心 一.Nacos服务注册中心 1. 注册中心简介 2. 构建Nacos服务 2.1 准备工作 2.2 下载与安装 2.3 初始化配置 3. 服务 ...

  2. 微服务2——服务的注册,调用(Nacos服务注册中心+服务调用+调用负载均衡)sca-comsumersca-provider

    一.Nacos的安装和构建  以及启动 其官网地址如下: Nacos官网 1.安装前提: 第一:确保你电脑已配置JAVA_HOME环境变量(Nacos启动时需要),例如: 第二:确保你的MySQL版本 ...

  3. Nacos服务注册中心

    文章目录 注册中心简介 背景分析 Nacos概述 构建Nacos服务 准备工作 下载与安装 初始化配置 服务启动与访问 服务注册与调用入门(重点) 业务描述 生产者服务创建及注册 消费者服务发现及调用 ...

  4. Nacos服务注册中心(微服务)

    为什么要用服务注册中心? 在微服务中,首先需要面对的问题就是如何查找服务(软件即服务), 其次就是如何在不同的服务之间进行通信? 如何更好更方便的管理应用中的每一个服务,如何建立各个服务之间联系的纽带 ...

  5. Nacos服务注册中心应用实践

    目录 注册中心简介 背景分析 Nacos概述 构建Nacos服务 准备工作 下载与安装 初始化配置 服务启动与访问 消费者服务发现及调用 思路总结: 注册中心简介 背景分析 如何更好更方便的管理应用中 ...

  6. 1.4 Nacos服务注册中心应用实践

    文章目录 1.注册中心简介 1.1 背景分析 1.2 Nacos概述 2.构建Nacos服务 2.1 准备工作 2.2 下载与安装 2.3 初始化配置 2.4 服务启动与访问 2.4.1 命令行启动 ...

  7. Eureka 微服务注册中心搭建

    本机IP为  192.168.1.102 1.   新建Maven项目   eureka 2.   pom.xml <project xmlns="http://maven.apach ...

  8. 手把手教你搭建SpringCloudAlibaba之Nacos服务配置中心

    SpringCloud Alibaba全集文章目录: 零.手把手教你搭建SpringCloudAlibaba项目 一.手把手教你搭建SpringCloud Alibaba之生产者与消费者 二.手把手教 ...

  9. SpringCloud学习之(十八)SpringCloud Alibaba Nacos服务注册和配置中心

    文章目录 (十八)SpringCloud Alibaba Nacos服务注册和配置中心 1.Nacos简介 1.1 为什么叫Nacos 1.2 Nacos是什么 1.3 Nacos能干嘛 1.4 Na ...

  10. Nacos服务注册和配置中心

    简介 Nacos 前四个字母分别为Naming和Configuration的前两个字母,最后的s为Service. Nacos = Eureka+Config +Bus,就是注册中心 + 配置中心的组 ...

最新文章

  1. 快速构建深度学习图像数据集,微软Bing和Google哪个更好用?
  2. 空间简史-人类认识空间的旅程与其对强化学习的启示
  3. 【Silverlight】Bing Maps开发应用与技巧三:Bing Maps Silverlight Control的离线开发
  4. 【译】在Asp.Net中操作PDF – iTextSharp -利用块,短语,段落添加文本
  5. sortable 拖拽时互换目标的位置_报表如何实现行列互换效果?
  6. 如何做出受欢迎的字体排版风格?
  7. 关于WebRTC发展的担忧和思考
  8. 谈谈我对MVC的View层实现的理解
  9. [html] 如何禁止web端的页面缩放?
  10. WordPress程序备受喜爱的原因:十八般武艺
  11. 深度人脸表情识别研究进展
  12. Linux系统下的RZSZ(文件传输工具)
  13. TestNg测试框架使用
  14. 被Redis击穿的一次面试经历
  15. 8.Nginx 例子
  16. 四轴飞行器Bootloader和固件的更新
  17. 编译ffmpeg:libavdevice/xcbgrab.c:28:10: fatal error: xcb/xfixes.h: 没有那个文件或目录
  18. linux 常用图形库,在Linux下常用的3款Git图形客户端
  19. win10系统安装SQLServer2008r2最全教程
  20. 个人简历表格 个人简历word百度云 完整个人简历样本

热门文章

  1. HTML+CSS+JS实操京东购物车
  2. 数学建模学习(17):图与网络模型之图详细讲解,最直白的话讲数据结构,内容偏多,建议先收藏
  3. Flink cdc +doris生产遇到的问题汇总-持续更新
  4. 考研复试(控制工程专硕)及大学本科(物联网工程)知识点回顾(一)——C语言/单片机
  5. SpringMVC通过ResponseEntity实现文件下载
  6. [HGE]-源码分析-11 sound
  7. JEECG-BOOT首页标题修改
  8. 毕业设计-基于BP神经网络预测系统的设计- MATLAB
  9. BZOJ1232 安慰奶牛cheer (洛谷2916)
  10. Unity实用小工具或脚本——可折叠伸缩的多级(至少三级)内容列表(类似于Unity的Hierarchy视图中的折叠效果)