MySQL數(shù)據(jù)庫與Nacos搭建監(jiān)控服務(wù)

nacos系列文章第一篇,MySQL篇。
我相信有不少小伙伴已經(jīng)用過eureka,那么問題來了,Nacos是個(gè)啥?
看到這個(gè)標(biāo)題,MySQL數(shù)據(jù)庫與Nacos搭建監(jiān)控服務(wù),它們有什么關(guān)系么?
其實(shí)是Nacos支持連接MySQL,內(nèi)部已配置好數(shù)據(jù)源、連接池供我們使用。如果使用其它數(shù)據(jù)源(比如信創(chuàng)要求,使用達(dá)夢數(shù)據(jù)庫比較多),可以通過插件形式適配,模仿MySQL實(shí)現(xiàn)方式。具體如何實(shí)現(xiàn),可參考 Nacos 的 github issues。
MySQL是什么?
一句話概括:一款社區(qū)活躍的開源數(shù)據(jù)庫(database)軟件,已被Oracle公司收購。
nacos是什么?
一個(gè)更易于構(gòu)建云原生應(yīng)用的動(dòng)態(tài)服務(wù)發(fā)現(xiàn)、配置管理和服務(wù)管理平臺(tái)。
?
nacos 官方文檔:目前推薦2.x版本
https://nacos.io/zh-cn/docs/v2/quickstart/quick-start.html
nacos 樣例
http://console.nacos.io/nacos/index.html#/login
默認(rèn)用戶名與密碼均為:nacos

?
?
Nacos部署
項(xiàng)目環(huán)境
Nacos 依賴 Java 環(huán)境來運(yùn)行。如果你是一名開發(fā)人員,或許需要準(zhǔn)備如下環(huán)境:
Maven 3.2.x+
64 bit JDK1.8+
64 bit OS,支持 Linux/Unix/Mac/Windows,推薦選用 Linux/Unix/Mac
主要以Linux平臺(tái)作為演示環(huán)境。關(guān)于nacos 的獲取(發(fā)行包、源碼包),可以前往github開源倉庫。
nacos開源倉庫:
https://github.com/alibaba/nacos
目前nacos最新穩(wěn)定版是2.2.1:
https://github.com/alibaba/nacos/releases/tag/2.2.1
下載很緩慢,可以使用在線工具箱加速(公共免費(fèi)資源請適度使用):
https://tool.mintimate.cn/gh/
官方推薦版本為2.1.1:
您可以在Nacos的release notes及博客中找到每個(gè)版本支持的功能的介紹,當(dāng)前推薦的穩(wěn)定版本為2.1.1。
?
快速開始
解壓nacos
啟動(dòng)服務(wù)
Linux平臺(tái)以單機(jī)模式啟動(dòng)nacos服務(wù):
Windows平臺(tái)以單機(jī)模式啟動(dòng)nacos服務(wù):
訪問:http://127.0.0.1:8848/nacos 后,進(jìn)入登錄界面:

?
服務(wù)注冊、發(fā)現(xiàn)以及配置管理
服務(wù)注冊:
參數(shù)說明:
serviceName:服務(wù)名
ip:配置自己遠(yuǎn)程地址
port:端口(外部訪問需要放通)
服務(wù)發(fā)現(xiàn):
發(fā)布配置:
參數(shù)說明:
dataId:數(shù)據(jù)Id。
group:組名。
content:發(fā)布配置輸入的具體內(nèi)容。
獲取配置:
控制臺(tái)顯示輸出內(nèi)容:HelloWorld,代表配置成功。
關(guān)于curl命令教程,可以去curl官網(wǎng)(curl.se)找一找,還是很常用的。
?
關(guān)閉服務(wù)
Linux平臺(tái):
Windows平臺(tái):
?
nacos2.2.0版本配置說明
以nacos2.2.0版本為示例說明
nacos配置文件,支持配置文件存儲(chǔ)到數(shù)據(jù)庫(DB)中保存。如果沒有開放mysql數(shù)據(jù)源相應(yīng)設(shè)置,默認(rèn)使用本地存儲(chǔ)數(shù)據(jù)源。
配置目錄:\nacos-server-2.2.0\conf,文件清單,每個(gè)版本可能略微有所不同:
application.properties
application.properties.example
derby-schema.sql
mysql-schema.sql
1.4.0-ipv6_support-update.sql
cluster.conf.example
nacos-logback.xml
?
配置基本說明
以 .example 結(jié)尾,是示例配置,可供參考。以 update.sql 結(jié)尾的,則是sql更新腳本。
application.properties是nacos基本配置,例如端口、ip、數(shù)據(jù)源等等可以在此配置中修改,cluster.conf.example 是集群配置示例,nacos-logback.xml是日志相關(guān)配置。
mysql-schema.sql提供支持MySQL數(shù)據(jù)庫SQL表結(jié)構(gòu),derby-schema.sql提供支持derby數(shù)據(jù)庫SQL表結(jié)構(gòu)。
如果和我一樣使用的是MySQL數(shù)據(jù)庫,需要注意的配置文件是application.properties和mysql-schema.sql,記住后續(xù)用得上。
?
導(dǎo)入表結(jié)構(gòu)
新建數(shù)據(jù)庫:庫名命名為:nacos。編碼最好指定為utf8mb4和utf8mb4_bin,避免導(dǎo)入后看到中文注釋亂碼。
導(dǎo)入sql腳本到新建的庫nacos中:mysql-schema.sql。庫名并不是固定的,可以根據(jù)實(shí)際需求更改,比如nacos_config。如果你是從舊版本升級(jí)上來的,可能需要執(zhí)行SQL腳本:1.4.0-ipv6_support-update.sql。
上面聊到 nacos 可以在配置文件中配置數(shù)據(jù)源,當(dāng)然必不可少,需要部署MySQL數(shù)據(jù)庫。
找到application.properties配置文件,配置MySQL數(shù)據(jù)源:

? ?
很奇怪的一個(gè)問題,第一次使用,只導(dǎo)入初始化sql腳本MySQL數(shù)據(jù)源:
nacos以單機(jī)模式啟動(dòng):sh startup.sh -m standalone,啟動(dòng)無異常,正常訪問。
MySQL數(shù)據(jù)庫已設(shè)置自啟,排查數(shù)據(jù)庫正常啟動(dòng)。第二天啟動(dòng)centos-stream-9,再次啟動(dòng) nacos 服務(wù),出現(xiàn)無法設(shè)置數(shù)據(jù)源,嘗試屏蔽數(shù)據(jù)源配置文件,啟動(dòng)正常。猜測可能是初始化腳本出問題了,執(zhí)行升級(jí)sql腳本:1.4.0-ipv6_support-update.sql,再次啟動(dòng)nacos服務(wù)正常。
如果你和我一樣,使用的是MySQL8.0.30版本數(shù)據(jù)庫,可以參考。
如果遇到 Public Key Retrieval is not allowed,可能還需要加上 &allowPublicKeyRetrieval=true。
在github issues查找解決方案,提到可能是MySQL8.0.x設(shè)置時(shí)區(qū)的問題,將默認(rèn)serverTimezone=UTC修改為serverTimezone=Asia/Shanghai。
?
如果配置好MySQL,但還是遇到數(shù)據(jù)源無法找到,也許是數(shù)據(jù)庫導(dǎo)入腳本沒有升級(jí),也許是數(shù)據(jù)庫版本和時(shí)區(qū)問題。
嘗試重連,反復(fù)提醒 Public Key Retrieval 不被允許,反復(fù)提醒數(shù)據(jù)源沒有設(shè)置。
也有可能是MySQL版本問題和設(shè)置時(shí)區(qū)問題,連接配置做如下調(diào)整:
?
Linux終端執(zhí)行命令導(dǎo)入升級(jí)腳本:
?
問題排查
關(guān)于nacos大部分問題,可以在官方倉庫的 issues 找到解決方案:
https://github.com/alibaba/nacos/issues
總結(jié)配置數(shù)據(jù)源相關(guān)問題:
導(dǎo)入初始化sql腳本缺失字段問題。
使用數(shù)據(jù)源配置jdbc,數(shù)據(jù)庫時(shí)區(qū)設(shè)置問題。
MySQL8.0.x數(shù)據(jù)庫默認(rèn)密碼使用緩存算法(caching_sha2_password)問題。
?
MySQL部署
tips:下載注意使用帶有GA(General Availability)標(biāo)識(shí),穩(wěn)定版。
實(shí)際工作中,使用比較到的是下載離線安裝包。安裝方式主要有如下幾種分類:
安裝方式
Windows平臺(tái):
msi文件:直接雙擊進(jìn)行安裝,有可視化界面,安裝較為容易,但不夠靈活。
歸檔包(archive):以zip格式進(jìn)行壓縮,類似于Linux中的二進(jìn)制包。比較靈活,只需幾個(gè)命令即可安裝服務(wù)和實(shí)例化。
源碼包(source package):最靈活,可根據(jù)需求編譯安裝功能,難易度最高。
docker形式安裝:其實(shí)是在容器中安裝。
Linux平臺(tái):
rpm & deb 包安裝:最為簡單,但不靈活,適合初學(xué)者使用。
二進(jìn)制包(binary package):也稱歸檔包(archive),編譯好的源碼包,比rpm包更靈活。個(gè)人認(rèn)為是安裝多個(gè)服務(wù)最佳選擇。
源碼包(source package):最靈活,可根據(jù)需求編譯安裝功能,難易度最高。
docker形式安裝:其實(shí)是在容器中安裝。
當(dāng)然,MySQL同樣支持macOS平臺(tái)。
你也可以使用MySQL的妹妹MariaDB替代MySQL,是很好的選擇。
?
由于測試使用,本人數(shù)據(jù)庫使用比較新,MySQL8.0.30。說8.0新,其實(shí)也并不是很新,距離8.0第一個(gè)穩(wěn)定版Changes in MySQL 8.0.11 (2018-04-19, General Availability)快5年了。
目前市面上主要以MySQL5.7為主,離停止維護(hù)不遠(yuǎn)了,未來應(yīng)該會(huì)逐漸升級(jí)為MySQL8.0.x??吹焦倬W(wǎng)將MySQL5.6文檔頁面轉(zhuǎn)移了,已停止版本更新。
Windows 平臺(tái)
此處省略安裝過程。
請參考個(gè)人公眾號(hào)里面的文章,有簡易安裝教程:SQL基礎(chǔ)知識(shí)掃盲。
?
Linux平臺(tái)(CentOS-Stream-9)部署MySQL
此處我只演示Linux平臺(tái)(CentOS-Stream-9)其中最方便的一種部署方式。
Linux平臺(tái)(CentOS-Stream-9)
通過RHEL系列自帶的命令服務(wù)安裝管理工具,yum與dnf二選一即可。
安裝后,查看mysql服務(wù)狀態(tài),默認(rèn)服務(wù)名為mysqld.service。
默認(rèn)沒有啟動(dòng),手動(dòng)啟動(dòng) mysqld 服務(wù)
登錄mysql字符命令行界面
調(diào)試防火墻管理工具
如需遠(yuǎn)程登錄,需要關(guān)閉防火墻相關(guān)服務(wù),或者開放相應(yīng)端口,個(gè)人建議采用開放相應(yīng)端口
由于MySQL默認(rèn)端口3306可能被黑客利用通用掃描軟件攻擊,建議實(shí)際工作中進(jìn)行修改?;蛘呃盟淼擂D(zhuǎn)發(fā)功能。
如果只是在本地使用,改與不改并不影響。
重載firewalld服務(wù)
MySQL用戶權(quán)限
設(shè)置開機(jī)自啟
systemctl enable mysqld.service
查看mysqld服務(wù)狀態(tài):看到enabled代表設(shè)置為自啟
如果使用第三方管理工具,需要開放相應(yīng)用戶權(quán)限才能登錄MySQL:
修改用戶密碼
創(chuàng)建用戶root,主機(jī)地址%,匹配所有;如果是localhost,則只讓本地使用,也可以是指定ip地址。
授權(quán)root用戶所有權(quán)限(ALL),即可使遠(yuǎn)程登錄。同樣可以指定特定權(quán)限,只給查詢(select)。
如果遇到第三方工具連接提示密碼插件規(guī)則不被支持問題:
刷新權(quán)限
更多權(quán)限細(xì)化設(shè)置請參考MySQL8.0.x官方文檔第6章節(jié)Security。關(guān)于權(quán)限控制和賬號(hào)(用戶)管理介紹很詳細(xì)。
6.2 Access Control and Account Management
更多安裝方式,你還可以參考個(gè)人持續(xù)更新的筆記:
https://blog.cnwangk.top/2023/03/15/MySQL8-0-x-簡易安裝教程
?
MySQL導(dǎo)入mysql-schema腳本
下面,將演示數(shù)據(jù)庫創(chuàng)建以及sql腳本導(dǎo)入。
登錄
創(chuàng)建數(shù)據(jù)庫
導(dǎo)入數(shù)據(jù),執(zhí)行sql腳本
關(guān)于數(shù)據(jù)導(dǎo)入,可以使用DB管理工具(MySQL workbench、DBeaver、SQLyog)連接導(dǎo)入,也可以使用cat或者zcat命令導(dǎo)入。
演示Linux平臺(tái)使用cat命令導(dǎo)入sql腳本:
原本我也不知道這種用法,聯(lián)想到以前使用過zabbix監(jiān)控工具。靈機(jī)一動(dòng),我也可以將nacos的sql腳本這樣導(dǎo)入數(shù)據(jù)庫中。
查看nacos數(shù)據(jù)庫表:驗(yàn)證是否導(dǎo)入成功
?
Springboot項(xiàng)目構(gòu)建
如果你只是想體驗(yàn)nacos簡單用法,可以跳過springboot項(xiàng)目集成nacos微服務(wù)。
如果你是軟件實(shí)施、運(yùn)維人員,可以關(guān)注nacos官方文檔運(yùn)維監(jiān)控文檔(運(yùn)維指南)。
介紹很詳細(xì),我也覺得我很啰嗦了,這已經(jīng)屬于開發(fā)范疇了。
目標(biāo):項(xiàng)目中集成nacos服務(wù),使用nacos監(jiān)控到打包好并正常運(yùn)行服務(wù)健康情況。集成spring-cloud-starter-alibaba-nacos-discovery和spring-cloud-starter-alibaba-nacos-config。nacos-discovery是服務(wù)發(fā)現(xiàn)組件,nacos-config則是服務(wù)配置組件。
?
項(xiàng)目環(huán)境
需要準(zhǔn)備的環(huán)境:
Maven 3.6.3
JDK17
Linux環(huán)境(CentOS9-Stream)
Linux平臺(tái)安裝JDK
解壓JDK
配置全局環(huán)境變量:vim /etc/profile
配置當(dāng)前用戶環(huán)境變量:vim .bash_profile 或者 .bashrc,加入配置全局變量我所列出的內(nèi)容即可。
執(zhí)行 source 命令立即生效:
關(guān)于環(huán)境變量更多配置可參考個(gè)人公眾號(hào)關(guān)于JDK17的介紹。
驗(yàn)證版本:
?
Linux平臺(tái)安裝maven
當(dāng)然,你也可以到Maven官網(wǎng)下載打包好的二進(jìn)制包,解壓即可用。
加入環(huán)境變量:
執(zhí)行source命令立即生效:source /etc/profile
查看版本
看到以上環(huán)境,證明你的Maven環(huán)境已經(jīng)部署好了。
注意:默認(rèn)Maven鏡倉庫地址很慢,需要更換,推薦阿里云鏡像源。
修改Maven配置文件:
修改默認(rèn)本地倉庫存放目錄:找到 localRepository,將如下內(nèi)容開放:

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

?
?
項(xiàng)目構(gòu)建
注意:如果使用IDE工具構(gòu)建,注意springboot、spring cloud以及spring cloud alibaba版本對應(yīng)關(guān)系。盡量使用阿里云云原生應(yīng)用腳手架官網(wǎng)推薦的版本,有助于后期遇到問題排查。當(dāng)然還有一個(gè)好處,選擇組件時(shí)有中文說明,一目了然。
如果你對于IDE工具使用,實(shí)在有困難,可以在線構(gòu)建。
兩種在線腳手架構(gòu)建方式:
spring腳手架:https://start.spring.io/
阿里云云原生應(yīng)用腳手架:https://start.aliyun.com/
個(gè)人還是比較推薦使用阿里云云原生應(yīng)用腳手架構(gòu)建,便于在線選擇nacos 等微服務(wù)相關(guān)組件。

?
springboot版本可以自己調(diào)試,目前已經(jīng)支持springboot2.7.6和3.0.0配置。之前建議版本為springboot2.6.11,如果使用高版本,選擇nacos相關(guān)組件時(shí)灰色的。

?
構(gòu)建完成,如何打包成jar(目前使用比較多的時(shí)候jar包形式)?少不了JDK和Maven環(huán)境,參考環(huán)境準(zhǔn)備步驟。老項(xiàng)目是有不少使用war包形式。
解壓下載好的springboot項(xiàng)目demo.zip
執(zhí)行Maven安裝命令,這個(gè)過程可能有點(diǎn)緩慢,下載jar包越多,越耗時(shí)間:
?
如果新建的是單體應(yīng)用,在根目錄找到application.properties配置文件,如果構(gòu)建mvc架構(gòu)應(yīng)用,則在demo-start子項(xiàng)目找到application.properties,然后修改spring.cloud.nacos.config.server-addr與spring.cloud.nacos.discovery.server-addr的IP地址。
示例如下:

?
有點(diǎn)納悶,也許是我本地環(huán)境問題,之前很少使用阿里腳手架構(gòu)建項(xiàng)目。感覺使用阿里云云原生應(yīng)用腳手架構(gòu)建,會(huì)出現(xiàn)某些jar包(openfeign)找不到,使用Maven打包出現(xiàn)主清單文件找不到的問題。自己一步一步構(gòu)建,添加微服務(wù)組件,配置nacos則是正常的。
Maven打包遇到找不到依賴:

?
示例如下,引入openfeign:

?
如果不出意外,正常打包,可以使用 java -jar 執(zhí)行jar服務(wù)。
在nacos控制臺(tái)服務(wù)管理可以監(jiān)控到服務(wù),比如我搭建測試環(huán)境,給應(yīng)用區(qū)名稱為:springboot-test。
?
Nacos聯(lián)動(dòng)測試
新建配置:springboot-test.properties

配置詳情:配置的比較隨意,參考看看就行

?
當(dāng)然,你也需要在controller層 Java 代碼里加入如下匹配:
?
提供一種思路??梢愿鶕?jù)業(yè)務(wù)情況而定,將多個(gè)配置封裝到一個(gè)類里面,如下所示,新建
使用到注解:
@Value :通常情況,使用注解取值。
@Component :加入注解,便于被掃描到。
@ConfigurationProperties:引入配置,通過prefix指定配置前綴。
在項(xiàng)目中注入:
?
準(zhǔn)備好集成nacos服務(wù)的jar包:
運(yùn)行服務(wù):nohup 代表脫離終端運(yùn)行,&代表放入后臺(tái)
指定為生產(chǎn)環(huán)境:-Dspring.profiles.active=prod
測試接口:
你也可以使用curl命令請求:
得到輸出結(jié)果:
getConfig>>>>>>>>>>>>發(fā)現(xiàn):配置>>>服務(wù)名稱:nacos服務(wù)
查看日志驗(yàn)證:

驗(yàn)證成功,getConfig日志打印出來了。
?
Nacos監(jiān)控(控制臺(tái))
官方文檔比我演示介紹要更詳細(xì),如果進(jìn)一步使用,請參考官方文檔(運(yùn)維指南)。
控制臺(tái)手冊:https://nacos.io/zh-cn/docs/console-guide.html
?
基本功能演示
nacos 功能比較豐富:
配置管理:動(dòng)態(tài)更新配置、查看歷史版本、監(jiān)聽查詢;
服務(wù)管理:查看、創(chuàng)建服務(wù)、查看訂閱者列表;
權(quán)限列表:管理用戶、角色、權(quán)限配置;
命名空間:默認(rèn)保留空間(public)
集群管理:管理各個(gè)節(jié)點(diǎn)。
登錄mysql,切換到nacos數(shù)據(jù)庫,查看原始users表只有一條數(shù)據(jù),存儲(chǔ)nacos用戶。
此處只演示一下連接上MySQL數(shù)據(jù)庫后,在控制臺(tái)左側(cè)菜單欄找到權(quán)限控制,新建用戶。
示例如下:

?
驗(yàn)證數(shù)據(jù)庫表
驗(yàn)證users表,發(fā)現(xiàn)多了一條數(shù)據(jù),nacos_test成功存入到數(shù)據(jù)庫,至此MySQL與nacos聯(lián)動(dòng)完成。

?
新增配置,對照數(shù)據(jù)庫表

新增配置會(huì)保存在:nacos_config
歷史配置會(huì)保存在:his_config_info
用戶相關(guān)配置保存在:users
角色相關(guān)配置保存在:roles
權(quán)限相關(guān)配置保存在:permissions
監(jiān)控方法可以配合prometheus以及grafana使用。關(guān)于nacos更多用法,目前還在摸索中。
下面這張流程圖思路,可供參考:
?

?
參考資料:
nacos2.x官方文檔:https://nacos.io/zh-cn/docs/v2/quickstart/quick-start.html
nacos2.x github issues:https://github.com/nacos-group/nacos-docker/issues/251
MySQL8.0.x官方文檔第6章節(jié)Security:https://dev.mysql.com/doc/refman/8.0/en/access-control.html
最后,希望對你的工作有所幫助。如果覺得寫得還不錯(cuò),可以點(diǎn)個(gè)小小的贊。
以上總結(jié)僅供參考。
——END——