概述
Nacos,一款服务发现、配置管理工具,诞生于微服务尤其是Spring Cloud微服务框架大行其道时,相当于Spring Cloud Eureka + Spring Cloud Config。
无论是单机版还是集群版,都推荐使用MySQL作为存储。MySQL安装请看:CentOS 8安装MySQL8记录
Nacos支持三种部署模式
- 单机模式:用于测试和单机试用
- 集群模式:用于生产环境,确保高可用
- 多集群模式:用于多数据中心场景
多环境配置
Nacos提供Namespace (命名空间) 、Data ID (配置集ID)、 Group (组) 来确定一个配置文件(或者叫配置集),因此,实现多环境配置的方案也有三种:
- 用命名空间(namespace)来区分不同的环境,一个命名空间对应一个环境;
- 用配置组(group)来区分不同的环境,命名空间用默认的public即可,一个组对应一种环境;
- 用配置集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=
总结:
- 用 Data ID 区分环境,简单,但是每个项目要创建4个配置文件,随着项目的增多,都在一个命名空间下回显得很混乱,查找起来也不是很方便,而且不利于做权限控制
- 用Group区分,问题也是一样的
- 最好用Namespace区分环境,且有利于做权限控制
安装
单机版
Windows版本
下载地址
本地的MySQL版本是5.5.57,在创建数据表config_info
时报错:Invalid default value for 'gmt_create'
猜测时版本兼容问题。确实如此:
Nacos1.4.1版本已经很新,默认支持MySQL 8版本,不向下兼容低版本MySQL。由于并不知道nacos哪个版本默认支持MySQL5,或者说Nacos版本发布日志找起来很麻烦。另一方面也推荐开发环境使用较新版本的工具。没办法只好升级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转发到多个节点,最前面挂一个域名即可:
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
成功一半。
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搭建方案有很多,不同方案搭建方式不同: