Nacos学习笔记

概述

Nacos,一款服务发现、配置管理工具,诞生于微服务尤其是Spring Cloud微服务框架大行其道时,相当于Spring Cloud Eureka + Spring Cloud Config。
无论是单机版还是集群版,都推荐使用MySQL作为存储。MySQL安装请看:CentOS 8安装MySQL8记录

Nacos支持三种部署模式

  • 单机模式:用于测试和单机试用
  • 集群模式:用于生产环境,确保高可用
  • 多集群模式:用于多数据中心场景

多环境配置

Nacos提供Namespace (命名空间) 、Data ID (配置集ID)、 Group (组) 来确定一个配置文件(或者叫配置集),因此,实现多环境配置的方案也有三种:

  1. 用命名空间(namespace)来区分不同的环境,一个命名空间对应一个环境;
  2. 用配置组(group)来区分不同的环境,命名空间用默认的public即可,一个组对应一种环境;
  3. 用配置集ID(Data ID)名称来区分不同的环境,命名空间和组用默认的即可,通过文件命名来区分;

利用 Data ID 命名 来区分环境

利用Data ID命名来区分环境,命名空间和组默认即可,在 Nacos Spring Cloud 中,dataId 的完整格式如下:${prefix}-${spring.profiles.active}.${file-extension}

  • prefix 默认为spring.application.name的值,也可以通过配置项spring.cloud.nacos.config.prefix来配置
  • spring.profiles.active即为当前环境对应的 profile,注意当spring.profiles.active为空时,对应的连接符 - 也将不存在,dataId 的拼接格式变成${prefix}.${file-extension}
  • file-exetension 为配置内容的数据格式,可以通过配置项spring.cloud.nacos.config.file-extension来配置,目前只支持 properties 和 yaml 类型。

启动参数:-Dspring.profiles.active=

利用 Group 来区分环境

命名空间用默认的public,启动参数:-Dspring.cloud.nacos.config.group=

利用 Namespace 区分环境

启动参数:-Dspring.cloud.nacos.config.namespace=

总结:

  1. 用 Data ID 区分环境,简单,但是每个项目要创建4个配置文件,随着项目的增多,都在一个命名空间下回显得很混乱,查找起来也不是很方便,而且不利于做权限控制
  2. 用Group区分,问题也是一样的
  3. 最好用Namespace区分环境,且有利于做权限控制

Nacos 多环境配置

安装

单机版

Windows版本

下载地址
本地的MySQL版本是5.5.57,在创建数据表config_info时报错:Invalid default value for 'gmt_create'
Nacos学习笔记
猜测时版本兼容问题。确实如此:
Nacos学习笔记
Nacos1.4.1版本已经很新,默认支持MySQL 8版本,不向下兼容低版本MySQL。由于并不知道nacos哪个版本默认支持MySQL5,或者说Nacos版本发布日志找起来很麻烦。另一方面也推荐开发环境使用较新版本的工具。没办法只好升级MySQL版本。

MySQL下载地址

编辑一下文件,
Ctrl + R,全文搜索替换
CREATE TABLE替换为CREATE TABLE IF NOT EXISTS

use nacos;

12张数据表;

application.properties 配置数据库

编辑startup.cmd文件,找到MODE,更新如下:

rem set MODE="cluster"
set MODE="standalone"

双击startup.cmd文件启动,打开http://localhost:8848/nacos/,默认的用户名密码为 nacos/nacos,

如果双击cmd文件,控制台输出报错信息:

Caused by: java.sql.SQLNonTransientConnectionException: Could not create connection to database server. Attempted reconnect 3 times. Giving up
com.mysql.cj.exceptions.UnableToConnectException: Public Key Retrieval is not allowed

大意是连接失败,MySQL服务已经启动,重试解决问题。

问题:如何安装为服务?

Linux安装

参考
wget https://github.com/alibaba/nacos/releases/download/1.4.1/nacos-server-1.4.1.tar.gz
配置的数据是默认存储到内嵌的数据库derby中。

http://192.168.20.145:8848/nacos

https://www.freesion.com/article/4748443321/

cd /root
tar zxvf nacos-server-1.4.1.tar.gz
mv nacos /usr/local/nacos

编写开机启动文件:
vim /lib/systemd/system/nacos.service
文件内容:

[Unit]
Description=nacos
After=network.target

[Service]
Type=forking
# -m standalone表示作为单机启动,不加表示集群启动
ExecStart=/usr/local/nacos/bin/startup.sh -m standalone
ExecReload=/usr/local/nacos/bin/shutdown.sh
ExecStop=/usr/local/nacos/bin/shutdown.sh
PrivateTmp=true

[Install]
WantedBy=multi-user.target

使用内置数据库安装:
sh startup.sh -p embedded

MySQL导入nacos-mysql.sql脚本:

create database nacos;
use nacos;
source /usr/local/nacos/conf/nacos-mysql.sql;

先进行文件生效配置
systemctl daemon-reload
设置为开机启动:
systemctl enable nacos.service
启动nacos服务:
systemctl start nacos.service
启动成功后进行查看:
systemctl status nacos.service
停止服务:
systemctl stop nacos.service

集群版

集群模式和扩容是一样的,可以通过Nginx转发到多个节点,最前面挂一个域名即可:
Nacos学习笔记

http://121.196.48.170:8848/nacos
http://47.114.150.113:8848/nacos
http://47.111.251.203:8848/nacos

只创建一个数据库,三台都是连一个相同的库,

三个节点全部编辑

vim /lib/systemd/system/nacos.service
[Unit]
Description=nacos
After=network.target

[Service]
Type=forking
# -m standalone表示作为单机启动,不加表示集群启动
ExecStart=/usr/local/nacos/bin/startup.sh
ExecReload=/usr/local/nacos/bin/shutdown.sh
ExecStop=/usr/local/nacos/bin/shutdown.sh
PrivateTmp=true

[Install]
WantedBy=multi-user.target

配置application.properties文件:

# 指定数据源为MySQL
spring.datasource.platform=mysql
# 数据库实例数量
db.num=1
db.url.0=jdbc:mysql://<ip>:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root
db.password=<password>

网上说,针对application.properties文件,需要对三台机器都是相同的更改?但是我实际安装下来,只在安装有MySQL那台机器的节点更改此配置。

三台机器全部配置一下cluster.conf

切换到目录:
cd /usr/local/nacos/conf/
复制:
cp cluster.conf.example cluster.conf
编辑:
vim cluster.conf

# 不代表安装过程中的真实IP
192.168.12.203:8848
192.168.12.204:8848
192.168.12.205:8848

切换到bin目录:
cd /usr/local/nacos/bin/

执行启动脚本,默认就是集群模式,不需要加任何参数:
sh startup.sh
或者
./startup.sh

查看安装日志:
cat /usr/local/nacos/logs/start.out
Nacos学习笔记
成功一半。

nginx:

切换目录:
cd /etc/nginx/conf.d
新建文件:
vim nacos.conf
添加如下配置信息:

upstream nacos {
  server centos170:8848;
  server centos203:8848;
  server centos113:8848;
}

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

http://centos170/nacos

ps -ef | grep nacos

域名配置??

拓展
MySQL的高可用,高可用MySQL搭建方案有很多,不同方案搭建方式不同:

MySQL高可用方案选型参考

参考

集群部署说明

上一篇:Alibaba Nacos权限认证绕过漏洞复现


下一篇:2021-04-03