一、官网说明
1、官网集群部署说明:
https://nacos.io/zh-cn/docs/cluster-mode-quick-start.html
https://nacos.io/zh-cn/docs/deployment.html
开源的时候推荐用户把所有服务列表放到一个vip下面,然后挂到一个域名下面
http://ip1:port/openAPI 直连ip模式,机器挂则需要修改ip才可以使用。
http://VIP:port/openAPI 挂载VIP模式,直连vip即可,下面挂server真实ip,可读性不好。
http://nacos.com:port/openAPI 域名 + VIP模式,可读性好,而且换ip方便,推荐模式
根据官方文档,总结出来的、可以用在实际生产中的部署架构图如下:
2、关于数据持久化
默认的Nacos使用嵌入式数据库(derby)实现数据的存储。所以,如果启动多个默认配置下的Nacos节点,必定会存在数据存储的一致性问题;
为了解决这个问题,Nacos采用了集中式存储的方式来支持集群化部署,目前只支持MySQL的持久化配置;
二、在Windows版本Nacos上测试将数据库切换为Mysql
1、在安装目录conf目录下,找到 nacos-mysql.sql 文件,其中就有Nacos将要用到的数据库表结构初始化脚本;
2、我们使用上面的脚本,在本地mysql数据库中执行:
执行成功后,我们将获得11张数据库表;
3、修改conf目录下的application.properties配置文件:
4、重启Nacos,看看我们之前记录的数据是否还在?
我们发现:我们之前添加的配置信息,全部不见了!可以添加一个一条配置数据,自然在我们的mysql中是可以找到的!
三、Linux版Nacos安装
Nacos linux版集群部署,根据架构,我们大概需要:1个Nginx + 3个Nacos注册中心 + 1个mysql数据库;
1、Linux版Nacos下载地址:https://github.com/alibaba/nacos/releases/tag/1.4.1
然后在我们已经安装了JDK的Linux服务器上新增 /mynacos 目录,并将nacos解压到此目录下:
2、到 /mynacos/nacos/bin 下执行启动命令:
./startup.sh -m standalone
很简单!
3、nacos服务关停:
./shutdown.sh
下面我们将要开始一步步地进行Nacos的集群部署;
四、Nacos集群配置——同机器模拟集群(2.0.4)
1、下载nacos安装包并解压,拷贝3份一样的目录:
[root@tcosmo-szlstb03 local]# cp -r nacos/ nacos8840/ [root@tcosmo-szlstb03 local]# cp -r nacos/ nacos8850/ [root@tcosmo-szlstb03 local]# cp -r nacos/ nacos8860/ [root@tcosmo-szlstb03 local]# ll |grep nacos drwxr-xr-x 8 root root 125 Jul 9 19:24 nacos drwxr-xr-x 8 root root 125 Jul 12 10:29 nacos8840 drwxr-xr-x 8 root root 125 Jul 12 10:29 nacos8850 drwxr-xr-x 8 root root 125 Jul 12 10:30 nacos8860
我们将在本机的8840、8850、8860端口搭建nacos集群;
2、使用外置Mysql数据库 nacos_cluster_config:
执行nacos/conf/nacos-mysql.sql 脚本,创建nacoa的12张表;
3、修改三个节点的 nacos/conf/application.properties:
4、修改三个节点的集群配置文件 cluster.conf:
[root@tcosmo-szlstb03 conf]# cp cluster.conf.example cluster.conf [root@tcosmo-szlstb03 conf]# vim cluster.conf #it is ip #example 10.206.73.156:8840 10.206.73.156:8850 10.206.73.156:8860
5、分别启动三台nacos服务:
# 默认情况下,nacos就是以集群启动的: [root@tcosmo-szlstb03 local]# nacos8840/bin/startup.sh /usr/local/jdk8/bin/java -Djava.ext.dirs=/usr/local/jdk8/jre/lib/ext:/usr/local/jdk8/lib/ext -server -Xms2g -Xmx2g -Xmn1g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m -XX:-OmitStackTraceInFastThrow -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/usr/local/nacos8840/logs/java_heapdump.hprof -XX:-UseLargePages -Dnacos.member.list= -Xloggc:/usr/local/nacos8840/logs/nacos_gc.log -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=100M -Dloader.path=/usr/local/nacos8840/plugins/health,/usr/local/nacos8840/plugins/cmdb,/usr/local/nacos8840/plugins/selector -Dnacos.home=/usr/local/nacos8840 -jar /usr/local/nacos8840/target/nacos-server.jar --spring.config.additional-location=file:/usr/local/nacos8840/conf/ --logging.config=/usr/local/nacos8840/conf/nacos-logback.xml --server.max-http-header-size=524288 nacos is starting with cluster nacos is starting,you can check the /usr/local/nacos8840/logs/start.out [root@tcosmo-szlstb03 local]# nacos8850/bin/startup.sh /usr/local/jdk8/bin/java -Djava.ext.dirs=/usr/local/jdk8/jre/lib/ext:/usr/local/jdk8/lib/ext -server -Xms2g -Xmx2g -Xmn1g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m -XX:-OmitStackTraceInFastThrow -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/usr/local/nacos8850/logs/java_heapdump.hprof -XX:-UseLargePages -Dnacos.member.list= -Xloggc:/usr/local/nacos8850/logs/nacos_gc.log -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=100M -Dloader.path=/usr/local/nacos8850/plugins/health,/usr/local/nacos8850/plugins/cmdb,/usr/local/nacos8850/plugins/selector -Dnacos.home=/usr/local/nacos8850 -jar /usr/local/nacos8850/target/nacos-server.jar --spring.config.additional-location=file:/usr/local/nacos8850/conf/ --logging.config=/usr/local/nacos8850/conf/nacos-logback.xml --server.max-http-header-size=524288 nacos is starting with cluster nacos is starting,you can check the /usr/local/nacos8850/logs/start.out [root@tcosmo-szlstb03 local]# nacos8860/bin/startup.sh /usr/local/jdk8/bin/java -Djava.ext.dirs=/usr/local/jdk8/jre/lib/ext:/usr/local/jdk8/lib/ext -server -Xms2g -Xmx2g -Xmn1g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m -XX:-OmitStackTraceInFastThrow -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/usr/local/nacos8860/logs/java_heapdump.hprof -XX:-UseLargePages -Dnacos.member.list= -Xloggc:/usr/local/nacos8860/logs/nacos_gc.log -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=100M -Dloader.path=/usr/local/nacos8860/plugins/health,/usr/local/nacos8860/plugins/cmdb,/usr/local/nacos8860/plugins/selector -Dnacos.home=/usr/local/nacos8860 -jar /usr/local/nacos8860/target/nacos-server.jar --spring.config.additional-location=file:/usr/local/nacos8860/conf/ --logging.config=/usr/local/nacos8860/conf/nacos-logback.xml --server.max-http-header-size=524288 nacos is starting with cluster nacos is starting,you can check the /usr/local/nacos8860/logs/start.out
6、访问nacos集群,从任意一节点访问都是可以的:
查看节点元信息(说明Nacos集群默认就是开启了CP模式的):
{ "lastRefreshTime": 1657599209867, "raftMetaData": { "metaDataMap": { "naming_persistent_service": { "leader": "10.206.73.156:7840", "raftGroupMember": [ "10.206.73.156:7860", "10.206.73.156:7850", "10.206.73.156:7840" ], "term": 1 } } }, "raftPort": "7840", "version": "1.4.1" }
7、为了实现集群的负载均衡,我们正常时候至少要在前面使用一次nginx负载:
Nginx的安装与使用,就不在本篇赘述了,略!
五、在微服务中的实际使用——证明AP模式和AP模式同时支持
1、第一个服务的配置:
spring: application: name: test-ephemeral # 注册为临时实例 cloud: nacos: discovery: server-addr: 10.206.73.156:8840 namespace: jiguiquan group: test cluster-name: NJ #可以不区分
2、第二个服务的配置:
spring: application: name: test-persistent # 注册为持久化实例 cloud: nacos: discovery: server-addr: 10.206.73.156:8840 namespace: jiguiquan group: test cluster-name: NJ #可以不区分 ephemeral: false
3、启动后查看Nacos中的实例列表:
4、查看对应的服务详情:
临时实例(客户端给服务端发送心跳包):
持久化实例(客户端不给服务端发送心跳包):
-
临时实例:provider停止后,注册表会删除此实例;通过AP模式完成注册(自研的Distro协议实现);
-
持久化实例:会在三台Server的本地磁盘文件中,保存注册信息,provider停止后,注册表不会自动删除此实例,可手动删除;通过CP模式完成注册(简化版Raft协议实现);
个人此项目代码地址(持续更新):
https://github.com/jiguiquan/cloud2020