通過之前的幾篇有關(guān)Nacos的文章臼疫,對于Nacos分別作為服務(wù)注冊中心以及配置中心時(shí)大诸,與Spring Cloud體系結(jié)合的基礎(chǔ)使用方法已經(jīng)講解完畢了。下面我們就要從生產(chǎn)部署角度,介紹Nacos的相關(guān)內(nèi)容伐脖。這里具體說說Nacos的數(shù)據(jù)存儲以及生產(chǎn)配置的推薦狸捕。
數(shù)據(jù)持久化
在之前的教程中喷鸽,我們對于Nacos服務(wù)端自身并沒有做過什么特殊的配置,一切均以默認(rèn)的單機(jī)模式運(yùn)行灸拍,完成了上述的所有功能學(xué)習(xí)做祝。但是砾省,Nacos的單機(jī)運(yùn)行模式僅適用于開發(fā)和測試環(huán)境,對于有高可用要求的生產(chǎn)環(huán)境就不太合適了混槐。
有人說我們可不可以直接通過啟動多個(gè)單機(jī)模式Nacos服務(wù)的方式编兄,來實(shí)現(xiàn)多個(gè)節(jié)點(diǎn)Nacos的高可用嗎?答案是不可以声登!
那我們應(yīng)該如何才能實(shí)現(xiàn)Nacos的高可用集群搭建狠鸳?
在搭建Nacos集群之前,我們需要知道悯嗓,默認(rèn)情況下件舵,Nacos使用內(nèi)嵌的cmdb數(shù)據(jù)庫完成數(shù)據(jù)的存儲。所以脯厨,如果啟動多個(gè)默認(rèn)配置的Nacos節(jié)點(diǎn)铅祸,數(shù)據(jù)存儲是存在不一致問題的。為了解決這個(gè)問題合武,Nacos采用了集中式存儲方式來支持集權(quán)化部署临梗,目前只支持MySQL的存儲。
配置Nacos的MySQL存儲只需要下面三步:
第一步:安裝數(shù)據(jù)庫稼跳,這里選擇的版本:5.7.x
具體安裝步驟這里就不在說明
第二步:初始化MySQL數(shù)據(jù)庫盟庞,初始化文件可以從Nacos工程包下 conf 目錄獲取:
執(zhí)行完畢后可以看到如下圖所示的表結(jié)構(gòu):
第三步:修改Nacos工程包下 ** conf/application.properties**文件岂贩,增加支持MySQL數(shù)據(jù)源的配置:
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://localhost:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root
db.password=123456
這樣茫经,Nacos數(shù)據(jù)存儲到MySQL的配置就完成了,可以嘗試?yán)^續(xù)使用單機(jī)模式啟動Nacos萎津⌒渡。看配置是否生效。
思考
關(guān)于Nacos數(shù)據(jù)的持久化實(shí)現(xiàn)锉屈,與其他的中間件的相比荤傲,在實(shí)現(xiàn)上并沒有采用分布式算法來解決一致性問題,而是采用常規(guī)的集中化存儲來實(shí)現(xiàn)颈渊。由于采用單一數(shù)據(jù)源的方式遂黍,直接解決分布式一致性問題,所以從學(xué)習(xí)角度上來說俊嗽,Nacos的實(shí)現(xiàn)原理會更容易理解和接受雾家。但是,從部署的復(fù)雜度和硬件投入成本來說绍豁,與consul芯咧、zookeeper這些通過算法方式實(shí)現(xiàn)分布式一致性問題的中間件相比,就略顯不足了。
同時(shí)敬飒,在引入MySQL的存儲時(shí)邪铲,由于多了一個(gè)中間件存在,整個(gè)Nacos系統(tǒng)的整體可用性一定會有所下降的无拗。所以為了彌補(bǔ)可用性的下降带到,在生產(chǎn)上MySQL的高可用部署也是必須的(成本再次提高)。不論如何提高英染,可用性都很難達(dá)到100%揽惹,所以這種方式,不論如何提升存儲的可用性税迷,理論上對Nacos集群的自身可用性都會產(chǎn)生微小的影響永丝。
不過上面的思考都是從理論上,粗略討論的箭养,并沒有經(jīng)過詳細(xì)的成本評估與可用性計(jì)算慕嚷。所以,對于實(shí)際應(yīng)用場景毕泌,可能這些成本的增加和可用性的降低并沒有那么大的影響喝检。
下一章節(jié),我們將通過MySQL數(shù)據(jù)庫完成對Nacos管理用戶進(jìn)行自定義撼泛。