SpringCloud+nacos部署在多ip環(huán)境下統(tǒng)一nacos服務注冊ip(親測有效)
SpringCoud+nacos部署在多ip環(huán)境下統(tǒng)一nacos服務注冊ip
場景描述
在部署SpringCoud項目的時候分服務器部署注冊同一個nacos服務,但是在服務器有多個ip存在的同時(內(nèi)外網(wǎng)),就會出現(xiàn)注冊服務ip不同的問題,導致一些接口無法連接訪問,經(jīng)過多次排查終于找到問題并找到解決方法,親測有效!?。?/p>
方法
1.配置固定ip
在springcloud服務下的bootstrap.yml文件中配置
指定ip端口
application.properties下
指定ip端口
spring.cloud.nacos.discovery.ip = 127.0.0.1
spring.cloud.nacos.discovery.port = 8989
2.配置使用內(nèi)網(wǎng)前綴的ip
spring.cloud.inetutils.preferred-networks=10.25.14
使用前綴為10.25.14的ip比如:10.25.14.12,10.25.14.13.
3.配置固定網(wǎng)卡配置項
spring.cloud.nacos.discovery.networkInterface = eth0
親測有效?。?!
擴展:SpringCloud以及Nacos服務注冊IP選擇問題
場景:
微服務部署后,需要相互調(diào)用,其中服務A調(diào)用服務B時發(fā)現(xiàn)無法調(diào)用。其中服務注冊和發(fā)現(xiàn)以及配置中心使用Nacos
分析:
檢查了多遍代碼后,沒有發(fā)現(xiàn)調(diào)用方式有問題,所以只能是網(wǎng)絡問題。通過postman直接調(diào)用服務B,發(fā)現(xiàn)可以調(diào)通,但是使用服務A不行,于是檢查服務A在注冊中心注冊的IP,發(fā)現(xiàn)和并不是服務B啟動機器的IP。這就是問題所在了。
為什么注冊的IP和真實IP不符合呢?原因是Nacos客戶端在注冊服務時會從機器網(wǎng)卡中選擇一個IP來注冊,當機器存在多個網(wǎng)卡(例如存在虛擬網(wǎng)卡)時,所選則的IP可能不是真是的物理機的IP,所以,當注冊了的是非真實IP后,另一臺機器調(diào)用時是不可能調(diào)通的。
解決:
知道問題后,就要解決,查了一下SpringCloud的官方文檔,發(fā)現(xiàn)有一項配置如下:
Sometimes, it is useful to ignore certain named network interfaces so that they can be excluded from Service Discovery registration (for example, when running in a Docker container). A list of regular expressions can be set to cause the desired network interfaces to be ignored.
You can also force the use of only specified network addresses by using a list of regular expressions.
spring: cloud: inetutils: preferredNetworks: - 192.168 - 10.0
該項配置用于指定首選IP,當有多個網(wǎng)卡時,指定該IP地址后(支持正則),客戶端在選擇IP時就會選擇符合preferredNetworks配置的IP地址進行注冊。
同樣的,Nacos也可以配置自己的首選IP以及網(wǎng)卡選擇:
spring.cloud.nacos.discovery.ip: spring.cloud.nacos.discovery.networkInterface
我們選擇其中一個配置就可以,都能達到相同的效果。
補充:
雖然問題解決了,但是還是要更深入的了解一下這個IP選擇的邏輯。翻了一通源碼發(fā)現(xiàn),其大致邏輯如下:
Nacos首先檢查有沒有ip及networkInterface配置,如果有則使用配置的IP,否則檢查networkInterface,并獲取IP,如果兩者都為空,則使用inetUtils.findFirstNonLoopbackHostInfo().getIpAddress()來獲取IP:
而findFirstNonLoopbackHostInfo()的部分邏輯如下:
它最終會返回一個匹配的IPV4地址,并且排除本機回環(huán)網(wǎng)絡(127.0.0.0-127.255.255.255),并且匹配是否是首選網(wǎng)絡(如果配置了preferredNetworks)。
All efforts, only for myself, no longer for others
到此這篇關(guān)于SpringCoud+nacos部署在多ip環(huán)境下統(tǒng)一nacos服務注冊ip的文章就介紹到這了,更多相關(guān)SpringCoud nacos部署服務注冊ip內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Springboot actuator生產(chǎn)就緒功能實現(xiàn)解析
這篇文章主要介紹了Springboot actuator生產(chǎn)就緒功能實現(xiàn)解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-05-05springcloud 中 zuul 修改請求參數(shù)信息的方法
這篇文章主要介紹了springcloud 中 zuul 修改請求參數(shù)信息的方法,需要的朋友可以參考下2018-02-02Spring Boot集成Swagger2項目實戰(zhàn)
在日常的工作中,我們往往需要給前端(WEB端、IOS、Android)或者第三方提供接口,這個時候我們就需要給他們提供一份詳細的API說明文檔。這篇文章我們就來分享一種API文檔維護的方式,即通過Swagger來自動生成Restuful API文檔2018-01-01Java的MyBatis框架中MyBatis Generator代碼生成器的用法
這篇文章主要介紹了Java的MyBatis框架中Mybatis Generator代碼生成器的用法,Mybatis Generator主要被用來生成繁瑣的配置文件來提高效率,需要的朋友可以參考下2016-04-04