一、集群部署架构图示
在进行生产环境部署时,一般都需要采用集群的方式来提高服务器高可用性,Nacos
也不例外。在进行集群部署时,至少需要三个节点来部署 Nacos
集群。然后采用 VIP
的方式访问集群中的各个节点。
二、集群部署环境清单
-
服务器规划
服务器名称 开放端口号 备注 node100 80 Nginx 代替 VIP node101 8848 安装 MySQL MIC Router node102 8848 安装 MySQL MIC Router node103 8848 安装 MySQL MIC Router node104、node105、node106 3306、6446、6447、64460、64470 MySQL 5.7.x MIC -
部署架构图
三、集群部署前置基础
-
node100
安装Nginx
编译--strem
模块并安装 -
node101
、node102
、node103
分别安装JAVA_HOME
环境变量并配置Router
访问node104
、node105
、node106
的MySQL 5.7.x
数据库配置
JAVA
环境变量步骤省略 -
node104
、node105
、node106
分别安装MySQL 5.7.x MIC
-
安装
MySQL 5.7.x MIC
步骤请自行查找官网资源 -
大概内容是在
Nacos 1.1.4
版本之前(不包含),后续所有的镜像版本都会移除主从镜像的相关属性,具体移除和替换的属性如下:移除属性 新属性 MYSQL_MASTER_SERVICE_HOSTMYSQL_SERVICE_HOST MYSQL_MASTER_SERVICE_PORTMYSQL_SERVICE_PORT MYSQL_MASTER_SERVICE_DB_NAMEMYSQL_SERVICE_DB_NAME MYSQL_MASTER_SERVICE_USERMYSQL_SERVICE_USER MYSQL_MASTER_SERVICE_PASSWORDMYSQL_SERVICE_PASSWORD MYSQL_SLAVE_SERVICE_HOST无 MYSQL_SLAVE_SERVICE_PORT默认:3306 -
获取
Nacos
MySQL
初始化脚本(镜像中没有提供创建数据库初始化的脚本文件)-
方式一:
从官网下载脚本并导入到数据库(一般都是最新版本的兼容,如果使用较老的
Nacos
组件,建议采用第二种方案) -
方式二:
从 GitHub 下载 指定版本的
Windows zip
包,解压后在conf
文件夹中拿到创建数据库的脚本文件nacos-mysql.sql
P.S
MYSQL_DATABASE_NUM
默认数量从 2 更改为 1,强烈建议大家后续只配置一个MySQL 5.7.x
数据源即可。 -
-
四、集群部署详细操作
-
node101
、node102
、node103
分别下载指定版本的Nacos
安装包进入官网下载所需版本的
Nacos
服务安装包(本示例以 1.3.2 为例) -
Nacos
Docker
属性列表-
Nacos
属性列表(基于 1.3.2 版本的示例)属性名称 描述 选项 MODE 系统启动方式: 集群/单机 cluster/standalone 默认:cluster NACOS_SERVERS nacos cluster address p1:port1空格ip2:port2 空格ip3:port3 PREFER_HOST_MODE 支持IP还是域名模式 hostname/ip 默认:ip NACOS_SERVER_PORT Nacos 运行端口 默认:8848 NACOS_SERVER_IP 多网卡模式下可以指定IP SPRING_DATASOURCE_PLATFORM standalone support mysql mysql / 空 默认:空 MYSQL_SERVICE_HOST mysql host MYSQL_SERVICE_PORT mysql database port 默认:3306 MYSQL_SERVICE_DB_NAME mysql database name MYSQL_SERVICE_USER username of database MYSQL_SERVICE_PASSWORD password of database MYSQL_DATABASE_NUM It indicates the number of database 默认:1 JVM_XMS -Xms 默认:2g JVM_XMX -Xmx 默认:2g JVM_XMN -Xmn 默认:1g JVM_MS -XX:MetaspaceSize 默认:128m JVM_MMS -XX:MaxMetaspaceSize 默认:320m NACOS_DEBUG enable remote debug y/n 默认:n TOMCAT_ACCESSLOG_ENABLED server.tomcat.accesslog.enabled 默认:false NACOS_AUTH_SYSTEM_TYPE 权限系统类型选择,目前只支持 nacos 类型 默认:nacos NACOS_AUTH_ENABLE 是否开启权限系统 默认:false NACOS_AUTH_TOKEN_EXPIRE_SECONDS token 失效时间 默认:18000 NACOS_AUTH_TOKEN token 默认:
SecretKey01234567890123456789
012345678901234567890
1234567890123456789NACOS_AUTH_CACHE_ENABLE 权限缓存开关,开启后权限缓存的更新默认有15秒的延迟 默认:false
-
-
node101
、node102
、node103
执行以下创建集群的Docker
镜像脚本创建Nacos
集群节点(三个节点都要执行)docker run -d -p 8848:8848 --restart=always --privileged=true \ --network=host \ --name nacos-cluster-mysql \ -e MODE=cluster \ -e NACOS_SERVERS="100.100.100.101:8848 100.100.100.102:8848 100.100.100.103:8848" \ -e SPRING_DATASOURCE_PLATFORM=mysql \ -e MYSQL_SERVICE_HOST=100.100.100.100 \ -e MYSQL_SERVICE_PORT=3306 \ -e MYSQL_SERVICE_DB_NAME=nacos \ -e MYSQL_SERVICE_USER=root \ -e MYSQL_SERVICE_PASSWORD=123456 \ -e NACOS_AUTH_ENABLE=true \ -e NACOS_AUTH_TOKEN_EXPIRE_SECONDS=3600 \ -e JVM_XMS=256m \ -e JVM_XMX=512m \ nacos/nacos-server:1.3.2
命令解释 # 后台运行、映射端口、自动启动、用root权限 docker run -d -p 8848:8848 --restart=always --privileged=true \ # 启动名称 --name nacos-standalone-mysql \ # 启动模式 -e MODE=standalone \ # 数据库实例 -e SPRING_DATASOURCE_PLATFORM=mysql \ # 数据库连接信息 -e MYSQL_SERVICE_HOST=172.17.0.3 \ -e MYSQL_SERVICE_PORT=3306 \ -e MYSQL_SERVICE_DB_NAME=nacos_config \ -e MYSQL_SERVICE_USER=root \ -e MYSQL_SERVICE_PASSWORD=123456 \ # JVM调优 -e JVM_XMS=256m \ -e JVM_XMX=512m \ # Session 超时设置 单位:秒 -e NACOS_AUTH_TOKEN_EXPIRE_SECONDS=3600 \ # 目录挂载 -v /data/docker/nacos/conf:/home/nacos/conf \ -v /data/docker/nacos/init.d:/home/nacos/init.d \ -v /data/docker/nacos/logs:/home/nacos/logs \ nacos/nacos-server:1.2.1
P.S
!!!坑!!! 如果在测试过程中
MySQL
安装在容器中,此时连接MySQL
的MYSQL_SERVICE_HOST
要使用Docker
自动内网的IP
地址,不然连接数据库失败。(虚拟机中安装CentOS
后在CentOS
中安装Docker
容器的环境)查看 MySQL 在 Docker 容器中的 IP docker inspect mysql或者容器ID
-
登录任意一个
Nacos
节点查看集群状态 -
集群任期说明
在没有
LEADER
产生之前,集群会进行多次的选举。每次的选举任期会加 1,直到通过任期最大的获取了主的权限后才停止选举任期自增。最后加入的节点已经没有了选举的机会,故直接作为FOLLOWER
加入,其任期默认是 0。如果某一个或某几个节点都挂了,只要剩余节点不少于1 + 1/N
,那么集群仍然能够正常运行。挂掉的节点重新加入集群后,如果此时集群已经有了LEADER
,那么它的角色一般是FOLLOWER
,它的任期是 0( 就跟一个新节点一样)。当然,如果集群的剩余节点少于1 + 1/N
,集群仍然是可以工作的,只是已经无法保证高可用了。任期低节点一般是没有资格参与选举的,LEADER
一般是在任期高的几个节点之中产生(至少会有2个节点)。 -
node100
通过采用Nginx
来代替VIP
的功能其实操作到步骤 5 就已经完成了
Nacos
集群的部署。但是如果不统一暴露一个唯一地址给使用者,那么集群中的主节点挂掉了,应用就需要跟着切换主节点,完全没有达到高可用的效果。所以我们这里采用Nginx
来替代VIP
代理Nacos
各个节点,完成高可用的配置。Nginx
配置文件信息如下upstream nacos { server 100.100.100.101:8848; server 100.100.100.102:8848; server 100.100.100.103:8848; } server { listen 80; server_name localhost; location /nacos/ { proxy_pass http://nacos; } }
-
重启
Nginx
访问Nginx
的映射即可访问到Nacos
集群,为应用暴露也暴露Nginx
的地址
Issues → Issues 在主从选举的时候,会出现一个问题选举不到主的问题,目前社区讨论中。在下个版本应该会得到解决。请大家密切关注。