摘要:通過本文,我們將完成生產環境的搭建。第二步修改文件,增加支持數據源配置,添加目前只支持數據源的用戶名和密碼。另外,的集群需要個或個以上的節點,并且確保這三個節點之間是可以互相訪問的。也可以故意的關閉某個實例,來驗證集群是否還能正常服務。
前情回顧:
《Spring Cloud Alibaba基礎教程:使用Nacos實現服務注冊與發現》
《Spring Cloud Alibaba基礎教程:支持的幾種服務消費方式》
《Spring Cloud Alibaba基礎教程:使用Nacos作為配置中心》
《Spring Cloud Alibaba基礎教程:Nacos配置的加載規則詳解》
《Spring Cloud Alibaba基礎教程:Nacos配置的多環境管理》
《Spring Cloud Alibaba基礎教程:Nacos配置的多文件加載與共享配置》
《Spring Cloud Alibaba基礎教程:Nacos的數據持久化》
繼續說說生產環境的Nacos搭建,通過上一篇《Nacos的數據持久化》的介紹,我們已經知道Nacos對配置信息的存儲原理,在集群搭建的時候,必須要使用集中化存儲,比如:MySQL存儲。下面順著上一篇的內容,繼續下一去。通過本文,我們將完成Nacos生產環境的搭建。
集群搭建根據官方文檔的介紹,Nacos的集群架構大致如下圖所示(省略了集中化存儲信息的MySQL):
下面我們就來一步步的介紹,我們每一步的搭建細節。
MySQL數據源配置對于數據源的修改,在上一篇《Nacos的數據持久》中已經說明緣由,如果還不了解的話,可以先讀一下這篇再回來看這里。
在進行集群配置之前,先完成對MySQL數據源的初始化和配置。主要分以下兩步:
第一步:初始化MySQL數據庫,數據庫初始化文件:nacos-mysql.sql,該文件可以在Nacos程序包下的conf目錄下獲得。
第二步:修改conf/application.properties文件,增加支持MySQL數據源配置,添加(目前只支持mysql)數據源的url、用戶名和密碼。配置樣例如下:
spring.datasource.platform=mysql db.num=1 db.url.0=jdbc:mysql://localhost:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true db.user=root db.password=
更多介紹與思考,可見查看上一篇《Nacos的數據持久化》。集群配置
在Nacos的conf目錄下有一個cluster.conf.example,可以直接把example擴展名去掉來使用,也可以多帶帶創建一個cluster.conf文件,然后打開將后續要部署的Nacos實例地址配置在這里。
本文以在本地不同端點啟動3個Nacos服務端為例,可以如下配置:
127.0.0.1:8841 127.0.0.1:8842 127.0.0.1:8843
注意:這里的例子僅用于本地學習測試使用,實際生產環境必須部署在不同的節點上,才能起到高可用的效果。另外,Nacos的集群需要3個或3個以上的節點,并且確保這三個節點之間是可以互相訪問的。啟動實例
在完成了上面的配置之后,我們就可以開始在各個節點上啟動Nacos實例,以組建Nacos集群來使用了。
由于本文中我們測試學習采用了本地啟動多實例的情況,與真正生產部署會有一些差異,所以下面分兩種情況說一下,如何啟動各個Nacos實例。
本地測試
本文中,在集群配置的時候,我們設定了3個Nacos的實例都在本地,只是以不同的端口區分,所以我們在啟動Nacos的時候,需要修改不同的端口號。
下面介紹一種方法來方便地啟動Nacos的三個本地實例,我們可以將bin目錄下的startup.sh腳本復制三份,分別用來啟動三個不同端口的Nacos實例,為了可以方便區分不同實例的啟動腳本,我們可以把端口號加入到腳本的命名中,比如:
startup-8841.sh
startup-8842.sh
startup-8843.sh
然后,分別修改這三個腳本中的參數,具體如下圖的紅色部分(端口號根據上面腳本命名分配):
這里我們通過-Dserver.port的方式,在啟動命令中,為Nacos指定具體的端口號,以實現在本機上啟動三個不同的Nacos實例來組成集群。
修改完3個腳本配置之后,分別執行下面的命令就可以在本地啟動Nacos集群了:
sh startup-8841.sh sh startup-8842.sh sh startup-8843.sh
生產環境
在實際生產環境部署的時候,由于每個實例分布在不同的節點上,我們可以直接使用默認的啟動腳本(除非要調整一些JVM參數等才需要修改)。只需要在各個節點的Nacos的bin目錄下執行sh startup.sh命令即可。
Proxy配置在Nacos的集群啟動完畢之后,根據架構圖所示,我們還需要提供一個統一的入口給我們用來維護以及給Spring Cloud應用訪問。簡單地說,就是我們需要為上面啟動的的三個Nacos實例做一個可以為它們實現負載均衡的訪問點。這個實現的方式非常多,這里就舉個用Nginx來實現的簡單例子吧。
在Nginx配置文件的http段中,我們可以加入下面的配置內容:
這樣,當我們訪問:http://localhost:8080/nacos/的時候,就會被負載均衡的代理到之前我們啟動的三個Nacos實例上了。這里我們沒有配置upstream的具體策略,默認會使用線性輪訓的方式,如果有需要,也可以配置上更為復雜的分發策略。這部分是Nginx的使用內容,這里就不作具體介紹了。
這里提一下我在嘗試搭建時候碰到的一個問題,如果您也遇到了,希望下面的說明可以幫您解決問題。
錯誤信息如下:
2019-02-20 16:20:53,216 INFO The host [nacos_server] is not valid Note: further occurrences of request parsing errors will be logged at DEBUG level. java.lang.IllegalArgumentException: The character [_] is never valid in a domain name. at org.apache.tomcat.util.http.parser.HttpParser$DomainParseState.next(HttpParser.java:926) at org.apache.tomcat.util.http.parser.HttpParser.readHostDomainName(HttpParser.java:822) at org.apache.tomcat.util.http.parser.Host.parse(Host.java:71) at org.apache.tomcat.util.http.parser.Host.parse(Host.java:45) at org.apache.coyote.AbstractProcessor.parseHost(AbstractProcessor.java:288) at org.apache.coyote.http11.Http11Processor.prepareRequest(Http11Processor.java:809) at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:384) at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:791) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1417) at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Thread.java:748)
主要原因是,一開始在配置upstream的時候,用了nacos_server作為名稱,而在Nacos使用的Tomcat版本中不支持_符號出現在域名位置,所以上面截圖給出的upstream的名稱是nacosserver,去掉了_符號。
到這里,Nacos的集群搭建就完成了!我們可以通過Nginx配置的代理地址:http://localhost:8080/nacos/來訪問Nacos,在Spring Cloud應用中也可以用這個地址來作為注冊中心和配置中心的訪問地址來配置。讀者可以使用文末的代碼示例來修改原來的Nacos地址來啟動,看是否可以獲取配置信息來驗證集群的搭建是否成功。也可以故意的關閉某個實例,來驗證Nacos集群是否還能正常服務。
深入思考在Nacos官方文檔的指引下,Nacos的集群搭建總體上還是非常順暢的,沒有什么太大的難度。但是值得思考的一個問題跟在上一篇中講數據持久化的思考類似,作為一個注冊中心和配置中心,Nacos的架構是否顯得太過于臃腫?除了Nacos自身之外,還需要依賴更多的中間件來完成整套生產環境的搭建,相較于其他的可以用于服務發現與配置的中間件來說,就不那么有優勢了。尤其對于小團隊來說,這樣的復雜度與成本投入,也是在選型的時候需要去考慮的。
代碼示例本文介紹內容的客戶端代碼,示例讀者可以通過查看下面倉庫中的alibaba-nacos-config-client項目:
Github:https://github.com/dyc87112/SpringCloud-Learning/
Gitee:https://gitee.com/didispace/SpringCloud-Learning/
如果您對這些感興趣,歡迎star、follow、收藏、轉發給予支持!
以下專題教程也許您會有興趣Spring Boot基礎教程
【新版】Spring Cloud從入門到精通
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/11973.html
摘要:通過本文,我們將完成生產環境的搭建。第二步修改文件,增加支持數據源配置,添加目前只支持數據源的用戶名和密碼。另外,的集群需要個或個以上的節點,并且確保這三個節點之間是可以互相訪問的。也可以故意的關閉某個實例,來驗證集群是否還能正常服務。 前情回顧: 《Spring Cloud Alibaba基礎教程:使用Nacos實現服務注冊與發現》 《Spring Cloud Alibaba基礎教...
摘要:在搭建集群之前,我們需要先修改的數據持久化配置為存儲。所以,如果啟動多個默認配置下的節點,數據存儲是存在一致性問題的。為了解決這個問題,采用了集中式存儲的方式來支持集群化部署,目前只要支持的存儲。 前情回顧: 《Spring Cloud Alibaba基礎教程:使用Nacos實現服務注冊與發現》 《Spring Cloud Alibaba基礎教程:支持的幾種服務消費方式》 《Spri...
摘要:之前開放過一臺公益給大家,以方便大家在閱讀我博客中教程時候做實驗。由于目前在連載,所以對應的也部署了一臺,并且也開放出來,給大家學習測試之用。 之前開放過一臺公益Eureka Server給大家,以方便大家在閱讀我博客中教程時候做實驗。由于目前在連載Spring Cloud Alibaba,所以對應的也部署了一臺Nacos,并且也開放出來,給大家學習測試之用。 Nacos控制臺 ...
摘要:下表整理了目前的版本與版本的兼容關系還未所以,不論您是在讀我的基礎教程基礎教程還是正在連載的系列教程。 這篇博文是臨時增加出來的內容,主要是由于最近連載《Spring Cloud Alibaba基礎教程》系列的時候,碰到讀者咨詢的大量問題中存在一個比較普遍的問題:版本的選擇。其實這類問題,在之前寫Spring Cloud基礎教程的時候,就已經發過一篇《聊聊Spring Cloud版本的...
摘要:下面通過這篇,詳細介紹當使用作為配置中心之后,如何實現中修改規則同步到。關于下面改造的原理和分析可以見上一篇中修改規則同步到的頭兩節內容,這里不重復介紹了。但是由于考慮到與的結合使用,略作修改。主要就是中存儲配置的和不要弄錯。 上一篇我們介紹了如何通過改造Sentinel Dashboard來實現修改規則之后自動同步到Apollo。下面通過這篇,詳細介紹當使用Nacos作為配置中心之后...
閱讀 3447·2023-04-26 01:45
閱讀 2222·2021-11-23 09:51
閱讀 3638·2021-10-18 13:29
閱讀 3428·2021-09-07 10:12
閱讀 698·2021-08-27 16:24
閱讀 1765·2019-08-30 15:44
閱讀 2192·2019-08-30 15:43
閱讀 2944·2019-08-30 13:11