文章目录

  • 一、window 启动
  • 1、Nacos 下载
  • 2、nacos 配置 MySQL 数据库
  • 3、启动 nacos
  • 二、docker 启动
  • 1、docker 拉取 nacos镜像
  • 2、初始化 MySQL 数据库脚本
  • 3、docker 启动 nacos(配置 MySQL 连接)
  • 4、解决问题
  • ①、`Nacos Server did not start because dumpservice bean construction failure : No DataSource set`
  • ②、`server error: such as timeout. Request nacos server failed`
  • 三、docker nacos 集群搭建
  • 1、启动集群
  • 2、查看集群
  • 3、nginx 代理 nacos 集群
  • 4、关闭双写
  • 5、服务上下线



官方网站:

https://nacos.io/zh-cn/docs/quick-start.html

一、window 启动

1、Nacos 下载

Nacos 下载地址:https://github.com/alibaba/nacos/releases

2、nacos 配置 MySQL 数据库
  • 将 nacos 目录下的 config/nacos-mysql.sql 导入到MySQL,库名随便指定
  • 修改 config/application.properties 文件配置 MySQL 数据库
#*************** 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://127.0.0.1:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=root
db.password.0=123456
3、启动 nacos

开启 nacos

Linux/Unix/Mac
启动命令(standalone代表着单机模式运行,非集群模式):

sh startup.sh -m standalone

如果您使用的是ubuntu系统,或者运行脚本报错提示[[符号找不到,可尝试如下运行:

bash startup.sh -m standalone

Windows
启动命令(standalone代表着单机模式运行,非集群模式):

startup.cmd -m standalone

访问地址 http://127.0.0.1:8848/nacos ,默认登陆用户名密码 nacos/nacos,新增命名空间,新建配置文件如下

nacos mysql 存储 nacos 配置mysql_nacos mysql 存储

二、docker 启动

1、docker 拉取 nacos镜像

DockerHub 下载镜像 https://registry.hub.docker.com/r/nacos/nacos-server

docker pull nacos/nacos-server
2、初始化 MySQL 数据库脚本

https://github.com/alibaba/nacos/blob/develop/distribution/conf/nacos-mysql.sql

3、docker 启动 nacos(配置 MySQL 连接)
docker run -d \
-e PREFER_HOST_MODE=ip \
-e MODE=standalone \
-e SPRING_DATASOURCE_PLATFORM=mysql \
-e MYSQL_SERVICE_HOST=42.0.0.0 \
-e MYSQL_SERVICE_PORT=3306 \
-e MYSQL_SERVICE_DB_NAME=nacos_config \
-e MYSQL_SERVICE_USER=root \
-e MYSQL_SERVICE_PASSWORD=123456 \
-e NACOS_APPLICATION_PORT=8848 \
-p 8848:8848 -p 9848:9848 -p 9849:9849 \
--name nacos \
--restart=always \
--privileged=true \
nacos/nacos-server

访问地址: http://42.0.0.0:8848/nacos 默认用户名密码: nacos/nacos,新增命名空间,新建配置文件如下

nacos mysql 存储 nacos 配置mysql_nacos mysql 存储

4、解决问题
①、Nacos Server did not start because dumpservice bean construction failure : No DataSource set

保证数据库连接正确,查看数据库名、刷新数据库连接、检查用户名密码、可加长连接超时时间、设置时区

②、server error: such as timeout. Request nacos server failed

如果是云服务器需要开启 8848、 9848 、9849 端口否则报错 server error: such as timeout. Request nacos server failed: 端口说明:https://nacos.io/zh-cn/docs/2.0.0-compatibility.html

Nacos2.0 (8848、 9848 、9849 )版本相比 1.X (8848)新增了gRPC的通信方式,因此需要增加2个端口。新增端口是在配置的主端口(server.port)基础上,进行一定偏移量自动生成。

端口

与主端口的偏移量

描述

8848

nacos 主端口号

9848

1000

客户端 gRPC 请求服务端端口,用于客户端向服务端发起连接和请求

9849

1001

服务端 gRPC 请求服务端端口,用于服务间同步等

三、docker nacos 集群搭建

拉取镜像和初始化 nacos 数据库和上面的单机模式相同,以下 docker nacos 最新 2.0.4 版本部署成功,云服务器防火墙配置下面用到的端口

1、启动集群

注意需要开启 7848 端口,默认端口 8848 减去 1000,否则会报The Raft Group [naming_persistent_service] did not find the Leader node;
Nacos cluster is running with 1.X mode, can't accept gRPC request temporarily. Please check the server status or close Double write to force open 2.0 mode. Detail https://nacos.io/en-us/docs/2.0.0-upgrading.html.
caused: old raft protocol already stop;

192.168.1.1 服务器 nacos1

docker run -d\
 -e PREFER_HOST_MODE=ip\
 -e MODE=cluster\
 -e SPRING_DATASOURCE_PLATFORM=mysql\
 -e MYSQL_SERVICE_HOST=192.168.1.10\
 -e MYSQL_SERVICE_PORT=3306\
 -e MYSQL_SERVICE_DB_NAME=nacos_config\
 -e MYSQL_SERVICE_USER=username\
 -e MYSQL_SERVICE_PASSWORD=password\
 -e NACOS_APPLICATION_PORT=8848\
 -e NACOS_SERVERS="192.168.1.1:8848 192.168.1.1:8846 192.168.1.2:8848"\
 -e NACOS_SERVER_IP=192.168.1.1\
 -p 8848:8848 -p 9848:9848 -p 9849:9849 -p 7848:7848\
 --name nacos --restart=always nacos/nacos-server

192.168.1.1 服务器 nacos 2

docker run -d\
 -e PREFER_HOST_MODE=ip\
 -e MODE=cluster\
 -e SPRING_DATASOURCE_PLATFORM=mysql\
 -e MYSQL_SERVICE_HOST=192.168.1.10\
 -e MYSQL_SERVICE_PORT=3306\
 -e MYSQL_SERVICE_DB_NAME=nacos_config\
 -e MYSQL_SERVICE_USER=username\
 -e MYSQL_SERVICE_PASSWORD=password\
 -e NACOS_APPLICATION_PORT=8846\
 -e NACOS_SERVERS="192.168.1.1:8848 192.168.1.1:8846 192.168.1.2:8848"\
 -e NACOS_SERVER_IP=192.168.1.1\
 -p 8846:8846 -p 9846:9846 -p 9847:9847 -p 7846:7846\
 --name nacos2 --restart=always nacos/nacos-server

192.168.1.2 服务器 nacos3

docker run -d\
 -e PREFER_HOST_MODE=ip\
 -e MODE=cluster\
 -e SPRING_DATASOURCE_PLATFORM=mysql\
 -e MYSQL_SERVICE_HOST=192.168.1.10\
 -e MYSQL_SERVICE_PORT=3306\
 -e MYSQL_SERVICE_DB_NAME=nacos_config\
 -e MYSQL_SERVICE_USER=username\
 -e MYSQL_SERVICE_PASSWORD=password\
 -e NACOS_APPLICATION_PORT=8848\
 -e NACOS_SERVERS="192.168.1.1:8848 192.168.1.1:8846 192.168.1.2:8848"\
 -e NACOS_SERVER_IP=192.168.1.2\
 -p 8848:8848 -p 9848:9848 -p 9849:9849 -p 7848:7848\
 --name nacos --restart=always nacos/nacos-server
2、查看集群

此时 随便进一个服务地址 即可

nacos mysql 存储 nacos 配置mysql_nacos mysql 存储_03


上面的状态全部是 up 不一定集群搭建成功,点击节点元数据查看是否能选取 leader

nacos mysql 存储 nacos 配置mysql_nacos mysql 存储_04


或者使用接口获取 leaderhttp://192.168.1.1:8080/nacos/v1/ns/raft/leader,更多 nacos 相关 API 可参考 https://nacos.io/zh-cn/docs/open-api.html

nacos mysql 存储 nacos 配置mysql_nacos_05


如果不能选取 leader, 可以查看 nacos/logs 目录下的 nacos.log、 naming-raft.log、protocol-raft.log、nacos-cluster.log 、naming-server.log 日志看是否报错

3、nginx 代理 nacos 集群

docker 下载启动 nginx 容器不做阐述

如果你已经挂载了 nginx 的配置文件直接修改即可,没有挂载也可以进入容器修改

default.conf 我配置的比较简单,权重自己配置

upstream nacosList {
    server 192.168.1.1:8848 weight=1;
	server 192.168.1.2:8848 weight=2;
	server 192.168.1.1:8846 weight=3;
}

server {
    listen       80;
    listen  [::]:80;
    server_name  192.168.1.1;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }
    location /nacos {
        proxy_pass  http://nacosList/nacos;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

我的 nginx 8080 映射 80,如下 nginx f负载均衡成功

nacos mysql 存储 nacos 配置mysql_docker_06

4、关闭双写

nacos 文档说明关闭双写可以节省性能开销

nacos mysql 存储 nacos 配置mysql_nacos_07


PUT : http://192.168.1.1:8848/nacos/v1/ns/operator/switches?entry=doubleWriteEnabled&value=false

nacos mysql 存储 nacos 配置mysql_nacos mysql 存储_08


logs/naming-server.log 日志中观察到 Disable Double write, stop and clean v1.x cache and features字样,说明关闭双写。

nacos mysql 存储 nacos 配置mysql_nacos_09

5、服务上下线

nacos 控制台注册的服务可以正常上下线

nacos mysql 存储 nacos 配置mysql_docker_10