Login
网站首页 > 文章中心 > 其它

MySQL数据库与Nacos搭建监控服务_nacos的数据库只支持mysql吗

作者:小编 更新时间:2023-09-16 07:47:31 浏览量:261人看过

MySQL数据库与Nacos搭建监控服务_nacos的数据库只支持mysql吗

项目环境

快速开始

MySQL部署

安装方式

调试防火墙管理工具

MySQL用户权限

MySQL导入mysql-schema脚本

Springboot项目构建

项目构建

Nacos联动测试

Nacos监控(控制台)

基本功能演示

验证数据库表

我相信有不少小伙伴已经用过eureka,那么问题来了,Nacos是个啥?

看到这个标题,MySQL数据库与Nacos搭建监控服务,它们有什么关系么?

其实是Nacos支持连接MySQL,内部已配置好数据源、连接池供我们使用.如果使用其它数据源(比如信创要求,使用达梦数据库比较多),可以通过插件形式适配,模仿MySQL实现方式.具体如何实现,可参考 Nacos 的 github issues.

MySQL是什么?一句话概括:一款社区活跃的开源数据库(database)软件,已被Oracle公司收购.

nacos是什么?

一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台.

nacos 样例http://console.nacos.io/nacos/index.html#/login

默认用户名与密码均为:nacos

MySQL数据库与Nacos搭建监控服务_nacos的数据库只支持mysql吗

Nacos部署

Nacos 依赖 Java 环境来运行.如果你是一名开发人员,或许需要准备如下环境:

主要以Linux平台作为演示环境.关于nacos 的获取(发行包、源码包),可以前往github开源仓库.

nacos开源仓库:https://github.com/alibaba/nacos

解压nacos


unzip nacos-server-2.2.0.zip  tar -zxvf nacos-server-2.2.0.tar.gz


启动服务

Linux平台以单机模式启动nacos服务:


sh startup.sh -m standalone


Windows平台以单机模式启动nacos服务:


startup.cmd -m standalone


MySQL数据库与Nacos搭建监控服务_nacos的数据库只支持mysql吗

服务注册、发现以及配置管理

服务注册:


curl -X POST 'http://12⑦0.0.1:8848/nacos/v1/ns/instance?serviceName=nacos.naming.serviceNameip=192.16⑧24⑤132port=8080'


参数说明:

serviceName:服务名

ip:配置自己远程地址

port:端口(外部访问需要放通)

服务发现:


curl -X GET 'http://12⑦0.0.1:8848/nacos/v1/ns/instance/list?serviceName=nacos.naming.serviceName'


发布配置:


curl -X POST "http://12⑦0.0.1:8848/nacos/v1/cs/configs?dataId=nacos.cfg.dataIdgroup=testcontent=HelloWorld"


dataId:数据Id.

group:组名.

content:发布配置输入的具体内容.

获取配置:


curl -X GET "http://12⑦0.0.1:8848/nacos/v1/cs/configs?dataId=nacos.cfg.dataIdgroup=test"


控制台显示输出内容:HelloWorld,代表配置成功.

关于curl命令教程,可以去curl官网(curl.se)找一找,还是很常用的.

关闭服务

Linux平台:


sh shutdown.sh


Windows平台:


.\shutdown.cmd


application.properties

application.properties.example

derby-schema.sql

mysql-schema.sql

cluster.conf.example

nacos-logback.xml

配置基本说明以 .example 结尾,是示例配置,可供参考.以 update.sql 结尾的,则是sql更新脚本.

application.properties是nacos基本配置,例如端口、ip、数据源等等可以在此配置中修改,cluster.conf.example 是集群配置示例,nacos-logback.xml是日志相关配置.

mysql-schema.sql提供支持MySQL数据库SQL表结构,derby-schema.sql提供支持derby数据库SQL表结构.

如果和我一样使用的是MySQL数据库,需要注意的配置文件是application.properties和mysql-schema.sql,记住后续用得上.


create database nacos;


上面聊到 nacos 可以在配置文件中配置数据源,当然必不可少,需要部署MySQL数据库.

找到application.properties配置文件,配置MySQL数据源:

MySQL数据库与Nacos搭建监控服务_nacos的数据库只支持mysql吗


### If use MySQL as datasource: 
spring.datasource.platform=mysql                                                                           ### Count of DB:                                                                                             
db.num=1                                                                   
### Connect URL of DB:                                                                                   
db.url.0=jdbc:mysql://192.16⑧24⑤132:3306/nacos?characterEncoding=utf8connectTimeout=1000socketTimeout=3000autoReconnect=trueuseUnicode=trueuseSSL=falseserverTimezone=UTC        
db.user.0=root                                                                                              db.password.0=mypwd@123        


很奇怪的一个问题,第一次使用,只导入初始化sql脚本MySQL数据源:


[root@Centos9-Stream ~]# cat /usr/local/nacos-2.2.0/conf/mysql-schema.sql | mysql -uroot -p nacos


nacos以单机模式启动:sh startup.sh -m standalone,启动无异常,正常访问.

如果遇到 Public Key Retrieval is not allowed,可能还需要加上 allowPublicKeyRetrieval=true.

如果配置好MySQL,但还是遇到数据源无法找到,也许是数据库导入脚本没有升级,也许是数据库版本和时区问题.

尝试重连,反复提醒 Public Key Retrieval 不被允许,反复提醒数据源没有设置.

Caused by: com.mysql.cj.exceptions.CJException: Public Key Retrieval is not allowed

Caused by: com.alibaba.nacos.api.exception.NacosException: Nacos Server did not start because dumpservice bean construction failure :No DataSource set

Caused by: java.lang.IllegalStateException: No DataSource set

也有可能是MySQL版本问题和设置时区问题,连接配置做如下调整:


### Connect URL of DB:
db.url.0=jdbc:mysql://192.16⑧24⑤132:3306/nacos?characterEncoding=utf8connectTimeout=1000socketTimeout=3000autoReconnect=trueuseUnicode    =trueallowPublicKeyRetrieval=trueuseSSL=falseserverTimezone=Asia/Shanghai
db.user.0=root
db.password.0=mypwd@123


Linux终端执行命令导入升级脚本:


cat /usr/local/nacos-2.2.0/conf/1.④0-ipv6_support-update.sql | mysql -uroot -p nacos


问题排查

关于nacos大部分问题,可以在官方仓库的 issues 找到解决方案:

https://github.com/alibaba/nacos/issues

总结配置数据源相关问题:

导入初始化sql脚本缺失字段问题.

使用数据源配置jdbc,数据库时区设置问题.

MySQL部署

msi文件:直接双击进行安装,有可视化界面,安装较为容易,但不够灵活.

归档包(archive):以zip格式进行压缩,类似于Linux中的二进制包.比较灵活,只需几个命令即可安装服务和实例化.

源码包(source package):最灵活,可根据需求编译安装功能,难易度最高.

docker形式安装:其实是在容器中安装.

rpm deb 包安装:最为简单,但不灵活,适合初学者使用.

二进制包(binary package):也称归档包(archive),编译好的源码包,比rpm包更灵活.个人认为是安装多个服务最佳选择.

当然,MySQL同样支持macOS平台.

你也可以使用MySQL的妹妹MariaDB替代MySQL,是很好的选择.

Windows 平台

此处省略安装过程.

请参考个人公众号里面的文章,有简易安装教程:SQL基础知识扫盲.

通过RHEL系列自带的命令服务安装管理工具,yum与dnf二选一即可.


yum -y install mysql-server-⑧0.30
dnf -y install mysql-server-⑧0.30


安装后,查看mysql服务状态,默认服务名为mysqld.service.


systemctl status mysqld.service


默认没有启动,手动启动 mysqld 服务


systemctl start mysqld.service


登录mysql字符命令行界面


mysql -uroot -p


如需远程登录,需要关闭防火墙相关服务,或者开放相应端口,个人建议采用开放相应端口


firewall-cmd --zone=public --add-port=3306/tcp --permanent


重载firewalld服务


firewall-cmd --reload


设置开机自启


systemctl enable mysqld.service


查看mysqld服务状态:看到enabled代表设置为自启


systemctl status mysqld.service


如果使用第三方管理工具,需要开放相应用户权限才能登录MySQL:

修改用户密码


ALTER USER 'root'@'localhost' IDENTIFIED BY 'mypwd@123';


创建用户root,主机地址%,匹配所有;如果是localhost,则只让本地使用,也可以是指定ip地址.


CREATE USER 'root'@'%' IDENTIFIED BY 'mypwd@123';
CREATE USER 'root'@'localhost' IDENTIFIED BY 'mypwd@123';
CREATE USER 'root'@'192.16⑧24⑤132' IDENTIFIED BY 'mypwd@123';


授权root用户所有权限(ALL),即可使远程登录.同样可以指定特定权限,只给查询(select).


GRANT ALL ON *.* TO 'root'@'%' WITH GRANT OPTION;
GRANT ALL ON *.* TO 'root'@'localhost' WITH GRANT OPTION;
GRANT ALL ON *.* TO 'root'@'192.16⑧24⑤132' WITH GRANT OPTION;


如果遇到第三方工具连接提示密码插件规则不被支持问题:


ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'mypwd@123';


刷新权限


flush privileges;


更多安装方式,你还可以参考个人持续更新的笔记:

下面,将演示数据库创建以及sql脚本导入.

登录


mysql -uroot -p


创建数据库


create database nacos;


导入数据,执行sql脚本

关于数据导入,可以使用DB管理工具(MySQL workbench、DBeaver、SQLyog)连接导入,也可以使用cat或者zcat命令导入.

演示Linux平台使用cat命令导入sql脚本:


[root@Centos9-Stream ~]# cat /usr/local/nacos-2.2.0/conf/mysql-schema.sql | mysql -uroot -p nacos


原本我也不知道这种用法,联想到以前使用过zabbix监控工具.灵机一动,我也可以将nacos的sql脚本这样导入数据库中.

查看nacos数据库表:验证是否导入成功


mysql> use nacos;
mysql> show tables;


Springboot项目构建

如果你只是想体验nacos简单用法,可以跳过springboot项目集成nacos微服务.

如果你是软件实施、运维人员,可以关注nacos官方文档运维监控文档(运维指南).

介绍很详细,我也觉得我很啰嗦了,这已经属于开发范畴了.

目标:项目中集成nacos服务,使用nacos监控到打包好并正常运行服务健康情况.集成spring-cloud-starter-alibaba-nacos-discovery和spring-cloud-starter-alibaba-nacos-config.nacos-discovery是服务发现组件,nacos-config则是服务配置组件.

需要准备的环境:

Linux平台安装JDK

解压JDK


tar -zxvf jdk-1⑦0.④1_linux-x64_bin.tar.gz


配置全局环境变量:vim /etc/profile


JAVA_HOME=/usr/java/jdk17
CLASS_PATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
PATH=$PATH:$JAVA_HOME/bin
export JAVA_HOME CLASS_PATH PATH


配置当前用户环境变量:vim .bash_profile 或者 .bashrc,加入配置全局变量我所列出的内容即可.

执行 source 命令立即生效:


source /etc/profile


验证版本:


java -version


Linux平台安装maven


yum -y install maven



unzip apache-maven-③⑥3-bin.zip
mv apache-maven-③⑥3 /usr/local/


加入环境变量:


 # Maven Home
 MAVEN_HOME=/usr/local/apache-maven-③⑥3
 PATH=$PATH:$MAVEN_HOME/bin
 export MAVEN_HOME PATH


执行source命令立即生效:source /etc/profile

查看版本


[root@Centos9-Stream bin]# mvn --version
Apache Maven ③⑥3 (Red Hat ③⑥3-15)
Maven home: /usr/share/maven
Java version: 1⑦0.④1, vendor: Oracle Corporation, runtime: /usr/java/jdk17
Default locale: zh_CN, platform encoding: UTF-8
OS name: "linux", version: "⑤1④0-14⑧el9.x86_64", arch: "amd64", family: "unix"


看到以上环境,证明你的Maven环境已经部署好了.

注意:默认Maven镜仓库地址很慢,需要更换,推荐阿里云镜像源.

修改Maven配置文件:


[root@Centos9-Stream bin]# vim /usr/share/maven/conf/settings.xml


MySQL数据库与Nacos搭建监控服务_nacos的数据库只支持mysql吗


/local/repo


配置Maven阿里镜像地址,加入如下配置,注意是在加入:

MySQL数据库与Nacos搭建监控服务_nacos的数据库只支持mysql吗


  

      aliyunmaven
      aliyun maven
      
      http://maven.aliyun.com/nexus/content/groups/public/
      
      
      central        

  


注意:如果使用IDE工具构建,注意springboot、spring cloud以及spring cloud alibaba版本对应关系.尽量使用阿里云云原生应用脚手架官网推荐的版本,有助于后期遇到问题排查.当然还有一个好处,选择组件时有中文说明,一目了然.

如果你对于IDE工具使用,实在有困难,可以在线构建.

两种在线脚手架构建方式:

spring脚手架:https://start.spring.io/

阿里云云原生应用脚手架:https://start.aliyun.com/

个人还是比较推荐使用阿里云云原生应用脚手架构建,便于在线选择nacos 等微服务相关组件.

MySQL数据库与Nacos搭建监控服务_nacos的数据库只支持mysql吗

MySQL数据库与Nacos搭建监控服务_nacos的数据库只支持mysql吗

构建完成,如何打包成jar(目前使用比较多的时候jar包形式)?少不了JDK和Maven环境,参考环境准备步骤.老项目是有不少使用war包形式.


unzip demo.zip
cd demo



[root@Centos9-Stream demo]# mvn install


如果新建的是单体应用,在根目录找到application.properties配置文件,如果构建mvc架构应用,则在demo-start子项目找到application.properties,然后修改spring.cloud.nacos.config.server-addr与spring.cloud.nacos.discovery.server-addr的IP地址.

示例如下:

MySQL数据库与Nacos搭建监控服务_nacos的数据库只支持mysql吗

有点纳闷,也许是我本地环境问题,之前很少使用阿里脚手架构建项目.感觉使用阿里云云原生应用脚手架构建,会出现某些jar包(openfeign)找不到,使用Maven打包出现主清单文件找不到的问题.自己一步一步构建,添加微服务组件,配置nacos则是正常的.

MySQL数据库与Nacos搭建监控服务_nacos的数据库只支持mysql吗

示例如下,引入openfeign:

MySQL数据库与Nacos搭建监控服务_nacos的数据库只支持mysql吗

如果不出意外,正常打包,可以使用 java -jar 执行jar服务.


java -jar demo-web/target/demo-web-0.0.1-SNAPSHOT.jar


在nacos控制台服务管理可以监控到服务,比如我搭建测试环境,给应用区名称为:springboot-test.

新建配置:springboot-test.properties

MySQL数据库与Nacos搭建监控服务_nacos的数据库只支持mysql吗

配置详情:配置的比较随意,参考看看就行

MySQL数据库与Nacos搭建监控服务_nacos的数据库只支持mysql吗

当然,你也需要在controller层 Java 代码里加入如下匹配:


/** 使用动态配置获取测试 --BEGIN-- **/

@Value("${alibaba.config.discovery}")
private String discovery;

@Value("${alibaba.config.name}")
private String name;

@GetMapping("/getConfig")
public String getConfig() {
log.info("getConfig>>>>>>>>>>>");
return "getConfig>>>>>>>>>>>>" ◆ "发现:" ◆ discovery ◆ ">>>服务名称:" ◆ name;
}

@Value("${custom.config.find}")
private String find;

@Value("${custom.config.say}")
private String say;

@GetMapping("/meet")
public String meet() {
log.info("meet>>>>>>>>>>>");
return "meet>>>>>>>>>>>>" ◆ "偶遇老湿:" ◆ find ◆ ">>>土嘎嘎的粉丝们大家好:" ◆ say;
}

/** 使用动态配置获取测试 --END-- **/


提供一种思路.可以根据业务情况而定,将多个配置封装到一个类里面,如下所示,新建CustomConf类:


/**
 * desc:对象配置类
 * @Value 
 * @Component @ConfigurationProperties
 */
@Component
@ConfigurationProperties(prefix = "custom")
public class CustomConf {

private Integer one;
private Integer two;
private Integer three;
private String description;

// 此处省略掉了 get set 方法,实际需要补上
}


使用到注解:

@Value :通常情况,使用注解取值.

@Component :加入注解,便于被扫描到.

@ConfigurationProperties:引入配置,通过prefix指定配置前缀.

在项目中注入:


    @Autowired
private CustomConf custom;

@RequestMapping("/custom")
public String custom() {
    return "[custom] " ◆ custom;
}


准备好集成nacos服务的jar包:


[root@Centos9-Stream test]# ll springboot-nacos-cloud-0.0.1-SNAPSHOT.jar
-rw-rw-r--. 1 kart kart 77534357  2月 12 18:44 springboot-nacos-cloud-0.0.1-SNAPSHOT.jar


运行服务:nohup 代表脱离终端运行,代表放入后台



[root@Centos9-Stream test]# nohup java -jar -Dspring.profiles.active=prod /opt/workspace/test/springboot-nacos-cloud-0.0.1-SNAPSHOT.jar  > /opt/
workspace/test/springboot-nacos.log 2>1 
[1] 4628


指定为生产环境:-Dspring.profiles.active=prod

测试接口:



http://192.16⑧24⑤132:8082/t/getConfig


你也可以使用curl命令请求:


curl -X GET http://192.16⑧24⑤132:8082/t/getConfig


得到输出结果:

服务名称:nacos服务

查看日志验证:

MySQL数据库与Nacos搭建监控服务_nacos的数据库只支持mysql吗

验证成功,getConfig日志打印出来了.

Nacos监控(控制台)

官方文档比我演示介绍要更详细,如果进一步使用,请参考官方文档(运维指南).

控制台手册:https://nacos.io/zh-cn/docs/console-guide.html

nacos 功能比较丰富:

配置管理:动态更新配置、查看历史版本、监听查询;

服务管理:查看、创建服务、查看订阅者列表;

权限列表:管理用户、角色、权限配置;

命名空间:默认保留空间(public)

集群管理:管理各个节点.

登录mysql,切换到nacos数据库,查看原始users表只有一条数据,存储nacos用户.

此处只演示一下连接上MySQL数据库后,在控制台左侧菜单栏找到权限控制,新建用户.

MySQL数据库与Nacos搭建监控服务_nacos的数据库只支持mysql吗

验证users表,发现多了一条数据,nacos_test成功存入到数据库,至此MySQL与nacos联动完成.

MySQL数据库与Nacos搭建监控服务_nacos的数据库只支持mysql吗


mysql> select * from users\G
*************************** 1. row ***************************
username: nacos
password: $2a$10$EuWPZHzz32dJN7jexM34MOeYirDdFAZm2kuWj7VEOJhhZkDrxfvUu
 enabled: 1
*************************** 2. row ***************************
username: nacos_test
password: $2a$10$5F3NOcu2TFgdrBH0Av2iUuxbV9qBDihjmRt06163y5FTvPrErkWKS
 enabled: 1
2 rows in set (0.00 sec)


新增配置,对照数据库表


use nacos;
show tables;


MySQL数据库与Nacos搭建监控服务_nacos的数据库只支持mysql吗

新增配置会保存在:nacos_config

历史配置会保存在:his_config_info

用户相关配置保存在:users

角色相关配置保存在:roles

权限相关配置保存在:permissions

监控方法可以配合prometheus以及grafana使用.关于nacos更多用法,目前还在摸索中.

下面这张流程图思路,可供参考:

MySQL数据库与Nacos搭建监控服务_nacos的数据库只支持mysql吗

参考资料:

最后,希望对你的工作有所帮助.如果觉得写得还不错,可以点个小小的赞.

以上总结仅供参考.

——END——

版权声明:倡导尊重与保护知识产权。未经许可,任何人不得复制、转载、或以其他方式使用本站《原创》内容,违者将追究其法律责任。本站文章内容,部分图片来源于网络,如有侵权,请联系我们修改或者删除处理。

编辑推荐

热门文章