Nacos集群部署和持久化配置(重要)

一、官网说明

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方便,推荐模式

根据官方文档,总结出来的、可以用在实际生产中的部署架构图如下:

image.png

2、关于数据持久化

默认的Nacos使用嵌入式数据库(derby)实现数据的存储。所以,如果启动多个默认配置下的Nacos节点,必定会存在数据存储的一致性问题;

为了解决这个问题,Nacos采用了集中式存储的方式来支持集群化部署,目前只支持MySQL的持久化配置;


二、在Windows版本Nacos上测试将数据库切换为Mysql

1、在安装目录conf目录下,找到 nacos-mysql.sql 文件,其中就有Nacos将要用到的数据库表结构初始化脚本;

image.png

2、我们使用上面的脚本,在本地mysql数据库中执行:

执行成功后,我们将获得11张数据库表;

3、修改conf目录下的application.properties配置文件:

image.png

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张表;

image.png

3、修改三个节点的 nacos/conf/application.properties:

image.png

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集群,从任意一节点访问都是可以的:

image.png

查看节点元信息(说明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中的实例列表:

image.png

4、查看对应的服务详情:

临时实例(客户端给服务端发送心跳包):

image.png

持久化实例(客户端不给服务端发送心跳包):

image.png

  • 临时实例:provider停止后,注册表会删除此实例;通过AP模式完成注册(自研的Distro协议实现);

  • 持久化实例:会在三台Server的本地磁盘文件中,保存注册信息,provider停止后,注册表不会自动删除此实例,可手动删除;通过CP模式完成注册(简化版Raft协议实现);


个人此项目代码地址(持续更新):

https://github.com/jiguiquan/cloud2020


jiguiquan@163.com

文章作者信息...

留下你的评论

*评论支持代码高亮<pre class="prettyprint linenums">代码</pre>

相关推荐