【微服务|Nacos】docker启动nacos|单机|高可用集群

默认以Derby为数据源的单机版

Docker run -d 
-e PREFER_HOST_MODE=hostname 
-e Spring_DATASOURCE_PLATFORM=derby 
-e MODE=standalone 
--network=host 
--name nacos 
--restart=always 
nacos/nacos-server

MySQL为数据源的单机版

docker run -d 
--name nacos 
-e PREFER_HOST_MODE=hostname 
-e MODE=standalone 
-e SPRING_DATASOURCE_PLATFORM=mysql 
-e MYSQL_SERVICE_HOST=MySQL数据库的服务器地址 
-e MYSQL_SERVICE_PORT=3306 
-e MYSQL_SERVICE_USER=MySQL用户名 
-e MYSQL_SERVICE_PASSWORD=MySQL密码 
-e MYSQL_SERVICE_DB_NAME=连接的数据库名称,需要创建数据库执行nacos-mysql.sql脚本【注意不同版本对应的sql文件可能不同】 
--network=host 
nacos/nacos-server

以MySQL为数据源的集群高可用版

原始版

3个或3个以上Nacos节点才能构成集群

(1)安装3个以上Nacos ,分别命名为nacos、nacos1、nacos2 (2)配置集群配置文件 在所有nacos目录的conf目录下,有文件 cluster.conf.example ,将其命名为 cluster.conf ,并将每行配置成 ip:port。(请配置3个或3个以上节点)# ip:port 127.0.0.1:8848 127.0.0.1:8849 127.0.0.1:8850 。 如果服务器有多个ip也要指定具体的ip地址,如:nacos.inetutils.ip-address=127.0.0.1 例如:server.port=8850 nacos.inetutils.ip‐address=127.0.0.1 (3)集群模式启动 分别执行nacos目录的bin目录下的startup: startup ‐m cluster 在任意一个nacos的控制台中,可以看到如下内容:

5.3.2 客户端配置 所有客户端,分别指定nacos集群中的若干节点: spring: application: name: xxxx cloud: nacos: config: server‐addr: 127.0.0.1:8848,127.0.0.1:8849,127.0.0.1:8850 测试,使用快速上手的例子: (1)关掉127.0.0.1:8848 nacos Leader实例,发现Leader被成功选举至127.0.0.1:8850 (2)紧接着重新启动Provider,这时马上请求consumer的/service出现错误,发现consumer与provider通信已 经出现问题。但经过短暂的时间后,通信恢复。 通过测试,我们可以看到,通过以上的集群部署已经达到了高可用的效果。

官方建议版

生产环境部署建议下图是官方推荐的集群方案,通过域名 + VIP模式的方式来实现。客户端配置的nacos,当Nacos集群迁移时,客户端配置无需修改。

【微服务|Nacos】docker启动nacos|单机|高可用集群
在这里插入图片描述

至于数据库,生产环境下建议至少主备模式。通过修改${nacoshome}/conf/application.properties文件,能够使 nacos拥有多个数据源。

spring.datasource.platform=mysql db.num=2
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?characterEncoding=utf8&autoReconnect=true
db.url.1=jdbc:mysql://127.0.0.1:3306/nacos_config?characterEncoding=utf8&autoReconnect=true 
db.user=root 
db.password=root

docker启动Nacos

docker run -d --name mynacos -p 8848:8848 -p 9848:9848 -p 9849:9849 -e MODE=cluster -e NACOS_SERVERS="IP1:8848 IP2:8848 IP3:8848" -e SPRING_DATASOURCE_PLATFORM=mysql -e MYSQL_SERVICE_HOST=rds.aliyuncs.com -e MYSQL_SERVICE_PORT=3306 -e MYSQL_SERVICE_USER=root -e MYSQL_SERVICE_PASSWORD=root -e MYSQL_SERVICE_DB_NAME=nacos_config nacos/nacos-server:v2.1.0

Nginx配置文件


worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    keepalive_timeout  65;

    upstream nacos{
 server IP1:8848 
 server IP2:8848 
 server IP3:8848
    }

    server {
        listen       80;
        server_name  localhost;
        location / {
            proxy_pass http://nacos
        }
    } 
}

docker启动Nginx

docker run -d -p 80:80 --name mynginx -v /root/mynginx/logs:/var/log/nginx -v /root/mynginx/conf/nginx.conf:/etc/nginx/nginx.conf nginx

问题及解决方案

我将上述的2.0.3版本升级成了2.1.0版本。其原因是我在使用2.0.3版本的时候,出现了异常:

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.

Nacos2.0版本因为考虑1.x版本的升级用户。所以2.0版本启动时必须先以1.X模式启动。当集群中所有nacos client节点都达到可升级至2.0的状态时,才自动升级成2.0模式。 所以在成功升级2.0模式之前,用grpc注册的服务,在1.X模式下看不到。

如果成功启动集群并且稳定运行后,需要关闭双写,否则SpringCloud无法连接进集群,会抛出上述异常。

当集群中最后一个节点也升级到2.0.X版本时,集群会开始进行升级检测。每个节点会对该节点的服务信息和实例信息进行校验,并检测是否还有未完成的双写任务。

当该节点的服务信息和实例信息已经核对成功,并且没有双写任务存在时,该节点会判定自己已经做好升级准备,并修改自己的状态且通知其他Nacos节点。每台节点是否完成升级准备可以从控制台的集群管理中元数据信息中看到”readyToUpgrade”: false/true。

当集群中所有节点均判定为准备完毕时。Nacos集群中的节点会进行升级切换,自动升级到Nacos2.0的处理逻辑。

参考官网文档:https://nacos.io/zh-cn/docs/2.0.0-upgrading.html


原文始发于微信公众号(步尔斯特):【微服务|Nacos】docker启动nacos|单机|高可用集群

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/48195.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!