解決dubbo註冊zookepper服務IP亂入問題的三種方式

最近做一個項目引入了dubbo+zookepper的分佈式服務治理框架。在應用的發佈的時候出現一個怪問題。zookepper服務是起在開發服務器192.168.23.180上。本機起應用服務提供者註冊到192.168.23.180上的dubbo服務可以註冊成功,用dubbo-admin看也是本機的IP:10.1.24.20。本機起的客戶端程序也可以正常調用。但是服務提供者發佈到192.168.23.180服務器上去就不行了。發佈到服務器上註冊的服務地址就變成了124.232.132.94:20883,這個地址消費者根本就找不到,所以老是報連接超時。按道理來說應該是192.168.23.180是服務提供者的地址纔對。開始以爲是代碼裏寫了一個124.232.132.94這樣的地址,搜了一遍沒有找到。搜了一遍服務器的配置也沒有這樣一個地址。這個地址不知道是從哪裏來的。應爲服務提供者和zookepper在一臺機器上,將服務提供者的註冊地址改成127.0.0.1,發現還是一樣的註冊上去後就變成了124.232.132.94。於是懷疑是不是服務器上做了地址轉發什麼的。
上網找了一些資料發現原來是由於服務器上配了DNS的問題。
經過測試解決辦法有以下幾個:
1、去掉服務器上的DNS配置
找到服務器上的/etc/resolv.conf 將DNS配置去掉或配置成8.8.8.8或配成192.168.23.180這樣這臺服務器的DNS不可用。
參考配置如下
#nameserver 222.246.129.80
#nameserver 59.51.78.210
#nameserver 8.8.8.8
nameserver 192.168.23.180
#search localdomain
服務啓動的時候會報一個"未知的名稱或服務"的錯誤,但是不要緊,服務可以正常啓動。也可以正常註冊到zookepper,註冊的地址也是真實的服務器地址。客戶端可以正常訪問。

2、在工程duboo註冊服務配置文件裏指定IP
把管理控制檯中dubbo/webapps/ROOT/WEB-INF/dubbo.properties文件中加入dubbo.protocol.host=192.168.23.180,然後在Dubbo服務的dubbo配置文件<dubbo:protocol name="dubbo" port="20883"  />中加入 host="192.168.23.180",在Dubbo消費者端加入<dubbo:protocol host="192.168.0.123" />的配置。然後重啓Dubbo管理員控制檯、停止消費者端,停止服務提供端,啓動服務提供端,再啓動消費者端。
參考配置如下:
服務提供者provider.xml
<!-- 用dubbo協議在20880端口暴露服務 -->
<dubbo:protocol name="dubbo" host="192.168.23.180" port="20883" />
消費者consumer.xml
<dubbo:protocol host="192.168.23.180" />
配置完了後在dubbo-admin控制檯可以看到服務提供者註冊到zookepper上的dobbo服務已經是正常的192.168.23.180。消費者顯示的還是consumer://124.232.132.94/***** 但不影響調用。

3、在服務器上/etc/hosts,上配置主機名和註冊服務的IP。如:192.168.23.180 host2
沒有配置之前ping 主機名host2 返回的是124.232.132.94
ping host2
PING host2 (124.232.132.94) 56(84) bytes of data.
64 bytes from 124.232.132.94: icmp_seq=1 ttl=55 time=5.67 ms
在/etc/hosts裏配置IP和主機名192.168.23.180 host2 後ping主機名host2返回 192.168.23.180
ping host2
PING host2 (192.168.23.180) 56(84) bytes of data.
64 bytes from host2 (192.168.23.180): icmp_seq=1 ttl=64 time=0.024 ms
配置完後,服務註冊IP地址正常,消費者可以正常訪問。

以上三種方式都可以解決問題,但是第3種方式更加直接方便,更好。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章