Nacos集群部署

本文记录一下Nacos集群的搭建过程。

一、集群部署架构图

Nacos官方文档中提供了三种集群部署模式:

  • http://ip1:port/openAPI直连ip模式,机器挂则需要修改ip才可以使用。
  • http://SLB:port/openAPI挂载SLB模式(内网SLB,不可暴露到公网,以免带来安全风险),直连SLB即可,下面挂server真实ip,可读性不好。
  • http://nacos.com:port/openAPI域名 + SLB模式(内网SLB,不可暴露到公网,以免带来安全风险),可读性好,而且换ip方便,推荐模式。

官方推荐域名+SLB模式:
1

二、预备环境

部署Nacos集群所需环境:

  1. 64 bit OS Linux/Unix/Mac,推荐使用Linux系统。
  2. 64 bit JDK 1.8+。
  3. Maven 3.2.x+。
  4. 3个或3个以上Nacos节点。

三、环境信息

准备四台网络互通并能上外网的主机,这里使用的是四台虚拟机,Nacos节点所需的JDK和Maven均已装好。本文所使用的环境如下:

主机名ip操作系统JDKMavenMysqlNginx
nacos-node1192.168.1.11CentOS Linux release 8.1.19111.8.0_2123.8.18.0.24/
nacos-node2192.168.1.12CentOS Linux release 8.1.19111.8.0_2123.8.1//
nacos-node3192.168.1.13CentOS Linux release 8.1.19111.8.0_2123.8.1//
nginx-node192.168.1.21CentOS Linux release 8.1.1911///1.20.0

四、准备工作

分别在每台主机上通过以下命令设置主机名:

hostnamectl set-hostname <hostname>

退出重新登陆即可显示新设置的主机名。在3个Nacos节点上都执行如下命令修改的hosts文件:

cat >> /etc/hosts << EOF
192.168.1.11 nacos-node1
192.168.1.12 nacos-node2
192.168.1.13 nacos-node3
EOF

配置nacos-node1主机到nacos-node2和nacos-node3主机的免密登录。首先在nacos-node1创建秘钥:

ssh-keygen -t rsa

2
将公钥同步至nacos-node2nacos-node3

ssh-copy-id -i ~/.ssh/id_rsa.pub root@nacos-node2
ssh-copy-id -i ~/.ssh/id_rsa.pub root@nacos-node3

3
免密登录:
4
在3个Nacos节点上都执行如下命令创建Nacos安装目录:

mkdir -p /usr/local/nacos

nacos-node1执行以下命令进入Nacos安装目录:

cd /user/local/nacos/

五、下载Nacos安装包

只在nacos-node1执行本部分操作。

下载Nacos 2.0.1编译后的压缩包解压,然后重命名解压后的文件夹:

wget https://github.com/alibaba/nacos/releases/download/2.0.1/nacos-server-2.0.1.tar.gz
tar -zxvf nacos-server-2.0.1.tar.gz
mv nacos nacos-server-2.0.1

六、配置集群配置文件

只在nacos-node1执行本部分操作。

进入nacos-server-2.0.1/conf目录:

cd nacos-server-2.0.1/conf/

拷贝cluster.conf.example并重命名为cluster.conf

cp cluster.conf.example cluster.conf

vim编辑cluster.conf集群配置文件:

vim cluster.conf

配置内容:

192.168.1.11:8848
192.168.1.12:8848
192.168.1.13:8848

七、数据持久化到mysql

只在nacos-node1执行本部分操作。

这里只是测试,所以将mysql安装在nacos-node1节点上,使用的单机版mysql。生产使用建议至少主备模式,或者采用高可用的mysql数据库。

先初始化mysql数据库,数据库初始化文件:nacos-mysql.sql,位于nacos-server-2.0.1/conf目录:
5
使用navicat连接mysql数据库并新建一个名为nacos的数据库,再运行nacos-mysql.sql,执行完成后得到如下表结构:
6
vim编辑application.properties配置文件:

vim application.properties

新增以下配置:

spring.datasource.platform=mysql

db.num=1
db.url.0=jdbc:mysql://192.168.1.11:3306/nacos?serverTimezone=GMT%2B8&characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root
db.password=root

八、复制配置好的Nacos Server到另两台服务器

分别将配置好的Nacos Server即nacos-server-2.0.1文件夹复制到nacos-node2nacos-node3

scp -r /usr/local/nacos/nacos-server-2.0.1 root@nacos-node2:/usr/local/nacos/
scp -r /usr/local/nacos/nacos-server-2.0.1 root@nacos-node3:/usr/local/nacos/

7

九、启动服务器

在3个Nacos节点上都执行以下命令进入Nacos Server的bin目录下:

cd /usr/local/nacos/nacos-server-2.0.1/bin/

在3个Nacos节点都执行以下命令启动服务器:

# 使用cluster模式启动并使用外置数据源
sh startup.sh

8
如果出现内存不足的问题,可适当将启动脚本startup.sh-server后的jvm内存分配参数调小:

#===========================================================================================
# JVM Configuration
#===========================================================================================
if [[ "${MODE}" == "standalone" ]]; then
    JAVA_OPT="${JAVA_OPT} -Xms512m -Xmx512m -Xmn256m"
    JAVA_OPT="${JAVA_OPT} -Dnacos.standalone=true"
else
    if [[ "${EMBEDDED_STORAGE}" == "embedded" ]]; then
        JAVA_OPT="${JAVA_OPT} -DembeddedStorage=true"
    fi
    JAVA_OPT="${JAVA_OPT} -server -Xms2g -Xmx2g -Xmn1g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
    JAVA_OPT="${JAVA_OPT} -XX:-OmitStackTraceInFastThrow -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${BASE_DIR}/logs/java_heapdump.hprof"
    JAVA_OPT="${JAVA_OPT} -XX:-UseLargePages"

fi

可以查看Nacos Server主目录下的logs/start.outlogs/nacos.log的输出内容看是否出错以及是否启动成功。查看logs/start.out(只截取了部分内容):
9
查看logs/nacos.log(只截取了部分内容):
10
可见3个Nacos节点均启动成功。在浏览器中访问以下三个链接均可访问Nacos的管理页面,默认账号密码都是nacos:

这里以http://192.168.1.11:8848/nacos为例,登录Nacos的管理页面后查看集群管理中的节点列表,3个Nacos节点都处于up状态,可见3个Nacos节点均启动成功:
11
如果要关闭Nacos服务器,可以执行以下命令,停止整个集群则在每个Nacos节点都执行一次该命令:

sh shutdown.sh

十、配置并启动Nginx

这里只是测试,使用的单机版nginx为Nacos集群提供一个统一的入口并使用默认的轮询策略实现简单的负载均衡。生产中推荐使用高可用的nginx集群。

nginx-node上修改nginx主目录下的conf/nginx.conf配置文件,配置内容如下:

upstream nacos {
    server nacos-node1:8848;
    server nacos-node2:8848;
    server nacos-node3:8848;
}

server {
    listen 80;
    server_name nacos.cluster.tset.com;
    location / {
        proxy_pass http://nacos;
    }
}

执行以下命令启动nginx:

nginx

在宿主机Windows系统的‪C:\Windows\System32\drivers\etc\hosts中添加以下域名解析并保存:

192.168.1.21 nacos.cluster.test.com

访问http://nacos.cluster.test.com/nacos登录Nacos的管理页面后查看集群管理中的节点列表:
12

十一、测试发布配置

查看Nacos的管理页面中的配置列表,暂时还没有配置:
13
查看mysql的nacos数据库中的表tenant_infoconfig_info,暂时没有数据:
14
15
新建了一个命名空间:
16
刷新tenant_info表,可见Nacos集群的数据已经成功持久化到mysql中:
17
然后新发布一个配置:
18
查看配置列表,发现创建成功:
19
刷新config_info表,可见之前新发布的那个配置已经成功持久化到mysql中:
20

十二、客户端接入Nacos集群实现服务注册发现及配置管理

客户端接入Nacos集群实现服务注册发现及配置管理的测试在之前的SpringCloudAlibaba 服务注册发现与配置中心Nacos
SpringCloud2020版本
中的服务提供者、服务消费者和Config客户端项目的基础上进行。

首先查看Nacos管理页面中的服务列表,暂时还没有服务注册:
21
修改服务提供者和服务消费者的application.yml中的spring.cloud.nacos.discovery.server-addr配置项:

spring:
  cloud:
    nacos:
      discovery:
        # nacos服务器地址,nacos集群可以设置为nacos集群的域名:port
        server-addr: nacos.cluster.test.com:80

注意,Nacos服务器地址中的端口不能省略,即使Nacos集群的域名监听的是80也不行,否则在服务启动时会报如下错误:
22
启动3个服务提供者实例和一个服务消费者实例,查看查看Nacos的管理页面中命名空间dev的服务列表,可见两个服务都已注册成功:
23
不断访问http://localhost:8080/test1,服务调用成功并实现负载均衡:
24
下面测试获取之前发布的配置,先修改Config客户端服务的bootstrap.yml中的spring.cloud.nacos.config.server-addr配置项:

spring:
  cloud:
    nacos:
      config:
        # nacos服务器地址,nacos集群可以设置为nacos集群的域名:port
        server-addr: nacos.cluster.test.com:80

启动Config客户端服务后访问http://localhost:8000/user,可见已经成功从Nacos Config Server获取到了配置文件中的数据:
25

通过以上测试结果,说明客户端接入Nacos集群成功实现了服务注册发现与配置管理的功能。

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

RtxTitanV

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值