導航:首頁 > 異常信息 > zookeeper集群網路拒絕連接

zookeeper集群網路拒絕連接

發布時間:2022-05-12 10:13:15

Ⅰ 為什麼我的zookeeper集群模式跑不起來

在zookeeper的選舉過程中,為了保證選舉過程最後能選出leader,就一定不能出現兩台機器得票相同的僵局,所以一般的,要求zk集群的server數量一定要是奇數,也就是2n+1台,並且,如果集群出現問題,其中存活的機器必須大於n+1台,否則leader無法獲得多數server的支持,系統就自動掛掉。所以一般是3個或者3個以上節點。

Ⅱ 如何解決java介面訪問ZooKeeper時的connectionloss錯誤

常見錯誤日誌如下:
org.apache.zookeeper.KeeperException$ConnectionLossException: KeeperErrorCode = ConnectionLoss

1. 原因:
是因為ZooKeeper建立連接時採用非同步操作,連接操作後並不能保證ZK連接已成功。如果在ZK連接成功前的這個小時間窗口去訪問ZK,就會碰到如上錯誤。
2. 解決思路
我們在新建ZK連接後要等一段時間,保證連接成功後再訪問ZK。

3. 網上比較贊同的解決方案:
主要利用兩個Java類:

(1)java.util.concurrent.CountDownLatch:
一個同步輔助類,類似倒數計數,直到計數器為0時才能對資源「解鎖」。未解鎖前等待該資源的進程只能被阻塞。

主要方法:
public CountDownLatch(int count); /* 構造函數,參數指定計數次數 */
public void countDown(); /* 當前線程調用此函數,則計數減一 */
public void await() throws InterruptedException; /* 此函數會一直阻塞當前線程,直到計時器的值為0為止 */

(2)org.apache.zookeeper.Watcher
ZooKeeper有一個很有用的功能,就是集群上每一個變化都可以通知到自定義的Watchcer。

Ⅲ 如何解決zookeeper client端與server端連接不上的問題

方法一
1、滑鼠右鍵點擊「計算機」,選擇「設備管理器」;
2、找到"網路適配器「並點擊它;
3、對網卡進行更新,然後看是否能連接上網路。
方法二
1、在電腦桌面的最右下端找到紅圈標記的圖標;
2、點擊"打開網路和共享中心」;
3、點擊「更改適配器」;
4、嘗試設置其他的聯網方式連接網路。
方法三
1、下載一個360衛士加速球;
2、點擊「網速」,再點擊「斷網急救箱」;
3、在彈出的頁面中選擇「全面診斷」。

Ⅳ zookeeper集群起不起來

(1)解壓為zookeepertar -xf -C /home/myuser/zookeeper/
復制zookeeper文件夾3份,分別重名名為zookeeperA,zookeeperB,zookeeperC。 並且創建數據快照以及日誌存放文件夾,命名為zooA,zooB,zooC。 (2)編輯對應的zookeeper配置文件,復制zookeeperconf下zoo_sample.cfg為zoo.cfgcd /home/myuser/zookeeperA/conf
cp zoo_sample.cfg zoo.cfg
(3)修改zoo.cfg# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
dataDir=/home/myuser/zooA/data
# the port at which the clients will connect
clientPort=2181
# ZooKeeper server and its port no. # ZooKeeper ensemble should know about every other machine in the ensemble # specify server id by creating 'myid' file in the dataDir # use hostname instead of IP address for convenient maintenance
server.1=127.0.0.1:2888:3888
server.2=127.0.0.1:2988:3988
server.3=127.0.0.1:2088:3088
#
# Be sure to read the maintenance section of the
# administrator guide before turning>tickTime:心跳時間,為了確保連接存在的,以毫秒為單位,最小超時時間為兩個心跳時間
initLimit:多少個心跳時間內,允許其他server連接並初始化數據,如果ZooKeeper管理的數據較大,則應相應增大這個值
clientPort:服務的監聽埠
dataDir:用於存放內存資料庫快照的文件夾,同時用於集群的myid文件也存在這個文件夾里(注意:一個配置文件只能包含一個dataDir字樣,即使它被注釋掉了。)
dataLogDir:用於單獨設置transaction log的目錄,transaction log分離可以避免和普通log還有快照的競爭
syncLimit:多少個tickTime內,允許follower同步,如果follower落後太多,則會被丟棄。
(4)創建myid文件
cd /home/myuser/zooA/data
sudo sh -c 'echo "1" >> myid'
其他文件夾類似創建myid文件,zookeeperB為2,zookeeperC為3
(5)啟動zookeeper
cd /home/myuser/zookeeperA/bin
sudo sh zkServer.sh start
查看zookeeper狀態[root@weibo bin]# sh zkServer.sh status
JMX enabled by default
Using config: /home/weibo/zookeeperA/bin/../conf/zoo.cfg
Mode: follower
啟動OK,依次啟動另外兩台zookeeper,啟動第一台zookeeper後,你可以觀察bin下的zookeeper.out可以看到報錯,connection
refused,沒有關系,zookeeper需要等待其他另個節點的加入,全部啟動之後就正常了。
(6)客戶端連接zookeeper
[root@weibo bin]# sh zkCli.sh
Connecting to localhost:2181
2013-05-10 15:00:25,363 [myid:] - INFO [main:Environment@100] - Client environment:zookeeper.version=3.4.5-1392090, built>configs:保存上傳的配置文件信息
clusterstate.json:集群狀態json
aliases:別名json
live_node:當solr伺服器啟動的時候,會注冊到這里
overseer:保存shard信息
overseer_elect:節點選舉
collections:所有的collection

Ⅳ zookeeper集群後客戶端怎麼連接

如果使用Curator
CuratorFrameworkFactory.newClient(
connectionInfo,
5000,
3000,
retryPolicy);

其中connectionInfo:格式host1:port1,host2:port2,...(伺服器列表)

Ⅵ hbase連接java時,zookeeper總是連接不上,但是確實已經啟動,每次連接,都報錯

HBase的安裝包裡面有自帶zookeeper的。很多系統部署也是直接啟動上面的zookeeper。 本來也是沒有問題的,想想吧,系統里也只有hbase在用zookeeper。先啟動zookeeper,再將hbase起來就好了 ? 但是今天遇到了一個很蛋疼的問題。和同事爭論了很久。 ? 因為我們是好多hbase集群共用一個zookeeper的,其中一個集群需要從hbase 0.90.二 升級到hbase 0.9二上,自然,包也要更新。但是其中一台regionserver上面同時也有跑zookeeper,而zookeeper還是用hbase 0.90.二 自帶的zookeeper在跑。 ? 現在好了,升級一個regionserver,連著zookeeper也要受到牽連,看來必須要重啟,不然,jar包替換掉,可能會影響到zk正在跑的經常。但是重啟zk畢竟對正在連接這個zk的client端會有短暫的影響

Ⅶ 為什麼不使用ZooKeeper

ZooKeeper作為發現服務的問題

ZooKeeper(註:ZooKeeper是著名Hadoop的一個子項目,旨在解決大規模分
布式應用場景下,服務協調同步(Coordinate
Service)的問題;它可以為同在一個分布式系統中的其他服務提供:統一命名服務、配置管理、分布式鎖服務、集群管理等功能)是個偉大的開源項目,它
很成熟,有相當大的社區來支持它的發展,而且在生產環境得到了廣泛的使用;但是用它來做Service發現服務解決方案則是個錯誤。

在分布式系統領域有個著名的 CAP定理(C-
數據一致性;A-服務可用性;P-服務對網路分區故障的容錯性,這三個特性在任何分布式系統中不能同時滿足,最多同時滿足兩個);ZooKeeper是個

CP的,即任何時刻對ZooKeeper的訪問請求能得到一致的數據結果,同時系統對網路分割具備容錯性;但是它不能保證每次服務請求的可用性(註:也就

是在極端環境下,ZooKeeper可能會丟棄一些請求,消費者程序需要重新請求才能獲得結果)。但是別忘了,ZooKeeper是分布式協調服務,它的

職責是保證數據(註:配置數據,狀態數據)在其管轄下的所有服務之間保持同步、一致;所以就不難理解為什麼ZooKeeper被設計成CP而不是AP特性

的了,如果是AP的,那麼將會帶來恐怖的後果(註:ZooKeeper就像交叉路口的信號燈一樣,你能想像在交通要道突然信號燈失靈的情況嗎?)。而且,
作為ZooKeeper的核心實現演算法 Zab,就是解決了分布式系統下數據如何在多個服務之間保持同步問題的。

作為一個分布式協同服務,ZooKeeper非常好,但是對於Service發現服務來說就不合適了;因為對於Service發現服務來說就算

返回了包含不實的信息的結果也比什麼都不返回要好;再者,對於Service發現服務而言,寧可返回某服務5分鍾之前在哪幾個伺服器上可用的信息,也不能
因為暫時的網路故障而找不到可用的伺服器,而不返回任何結果。所以說,用ZooKeeper來做Service發現服務是肯定錯誤的,如果你這么用就慘
了!

而且更何況,如果被用作Service發現服務,ZooKeeper本身並沒有正確的處理網路分割的問題;而在雲端,網路分割問題跟其他類型的
故障一樣的確會發生;所以最好提前對這個問題做好100%的准備。就像 Jepsen在
ZooKeeper網站上發布的博客中所說:在ZooKeeper中,如果在同一個網路分區(partition)的節點數(nodes)數達不到
ZooKeeper選取Leader節點的「法定人數」時,它們就會從ZooKeeper中斷開,當然同時也就不能提供Service發現服務了。

如果給ZooKeeper加上客戶端緩存(註:給ZooKeeper節點配上本地緩存)或者其他類似技術的話可以緩解ZooKeeper因為網
絡故障造成節點同步信息錯誤的問題。 Pinterest與 Airbnb公
司就使用了這個方法來防止ZooKeeper故障發生。這種方式可以從表面上解決這個問題,具體地說,當部分或者所有節點跟ZooKeeper斷開的情況
下,每個節點還可以從本地緩存中獲取到數據;但是,即便如此,ZooKeeper下所有節點不可能保證任何時候都能緩存所有的服務注冊信息。如果
ZooKeeper下所有節點都斷開了,或者集群中出現了網路分割的故障(註:由於交換機故障導致交換機底下的子網間不能互訪);那麼ZooKeeper

會將它們都從自己管理范圍中剔除出去,外界就不能訪問到這些節點了,即便這些節點本身是「健康」的,可以正常提供服務的;所以導致到達這些節點的服務請求
被丟失了。(註:這也是為什麼ZooKeeper不滿足CAP中A的原因)

更深層次的原因是,ZooKeeper是按照CP原則構建的,也就是說它能保證每個節點的數據保持一致,而為ZooKeeper加上緩存的做法

目的是為了讓ZooKeeper變得更加可靠(available);但是,ZooKeeper設計的本意是保持節點的數據一致,也就是CP。所以,這樣

一來,你可能既得不到一個數據一致的(CP)也得不到一個高可用的(AP)的Service發現服務了;因為,這相當於你在一個已有的CP系統上強制栓了
一個AP的系統,這在本質上就行不通的!一個Service發現服務應該從一開始就被設計成高可用的才行!

如果拋開CAP原理不管,正確的設置與維護ZooKeeper服務就非常的困難;錯誤會 經常發生,
導致很多工程被建立只是為了減輕維護ZooKeeper的難度。這些錯誤不僅存在與客戶端而且還存在於ZooKeeper伺服器本身。Knewton平台
很多故障就是由於ZooKeeper使用不當而導致的。那些看似簡單的操作,如:正確的重建觀察者(reestablishing
watcher)、客戶端Session與異常的處理與在ZK窗口中管理內存都是非常容易導致ZooKeeper出錯的。同時,我們確實也遇到過
ZooKeeper的一些經典bug: ZooKeeper-1159 與 ZooKeeper-1576;
我們甚至在生產環境中遇到過ZooKeeper選舉Leader節點失敗的情況。這些問題之所以會出現,在於ZooKeeper需要管理與保障所管轄服務
群的Session與網路連接資源(註:這些資源的管理在分布式系統環境下是極其困難的);但是它不負責管理服務的發現,所以使用ZooKeeper當
Service發現服務得不償失。

做出正確的選擇:Eureka的成功

我們把Service發現服務從ZooKeeper切換到了Eureka平台,它是一個開
源的服務發現解決方案,由Netflix公司開發。(註:Eureka由兩個組件組成:Eureka伺服器和Eureka客戶端。Eureka伺服器用作

服務注冊伺服器。Eureka客戶端是一個java客戶端,用來簡化與伺服器的交互、作為輪詢負載均衡器,並提供服務的故障切換支持。)Eureka一開
始就被設計成高可用與可伸縮的Service發現服務,這兩個特點也是Netflix公司開發所有平台的兩個特色。(
他們都在討論Eureka)。自從切換工作開始到現在,我們實現了在生產環境中所有依賴於Eureka的產品沒有下線維護的記錄。我們也被告知過,在雲平
台做服務遷移註定要遇到失敗;但是我們從這個例子中得到的經驗是,一個優秀的Service發現服務在其中發揮了至關重要的作用!

首先,在Eureka平台中,如果某台伺服器宕機,Eureka不會有類似於ZooKeeper的選舉leader的過程;客戶端請求會自動切

到新的Eureka節點;當宕機的伺服器重新恢復後,Eureka會再次將其納入到伺服器集群管理之中;而對於它來說,所有要做的無非是同步一些新的服務

注冊信息而已。所以,再也不用擔心有「掉隊」的伺服器恢復以後,會從Eureka伺服器集群中剔除出去的風險了。Eureka甚至被設計用來應付范圍更廣

的網路分割故障,並實現「0」宕機維護需求。當網路分割故障發生時,每個Eureka節點,會持續的對外提供服務(註:ZooKeeper不會):接收新
的服務注冊同時將它們提供給下游的服務發現請求。這樣一來,就可以實現在同一個子網中(same side of
partition),新發布的服務仍然可以被發現與訪問。

但是,Eureka做到的不止這些。正常配置下,Eureka內置了心跳服務,用於淘汰一些「瀕死」的伺服器;如果在Eureka中注冊的服
務,
它的「心跳」變得遲緩時,Eureka會將其整個剔除出管理范圍(這點有點像ZooKeeper的做法)。這是個很好的功能,但是當網路分割故障發生時,

這也是非常危險的;因為,那些因為網路問題(註:心跳慢被剔除了)而被剔除出去的伺服器本身是很」健康「的,只是因為網路分割故障把Eureka集群分割
成了獨立的子網而不能互訪而已。

幸運的是,Netflix考慮到了這個缺陷。如果Eureka服務節點在短時間里丟失了大量的心跳連接(註:可能發生了網路故障),那麼這個
Eureka節點會進入」自我保護模式「,同時保留那些「心跳死亡「的服務注冊信息不過期。此時,這個Eureka節點對於新的服務還能提供注冊服務,對

於」死亡「的仍然保留,以防還有客戶端向其發起請求。當網路故障恢復後,這個Eureka節點會退出」自我保護模式「。所以Eureka的哲學是,同時保
留」好數據「與」壞數據「總比丟掉任何」好數據「要更好,所以這種模式在實踐中非常有效。

最後,Eureka還有客戶端緩存功能(註:Eureka分為客戶端程序與伺服器端程序兩個部分,客戶端程序負責向外提供注冊與發現服務接
口)。
所以即便Eureka集群中所有節點都失效,或者發生網路分割故障導致客戶端不能訪問任何一台Eureka伺服器;Eureka服務的消費者仍然可以通過

Eureka客戶端緩存來獲取現有的服務注冊信息。甚至最極端的環境下,所有正常的Eureka節點都不對請求產生相應,也沒有更好的伺服器解決方案來解
決這種問題時;得益於Eureka的客戶端緩存技術,消費者服務仍然可以通過Eureka客戶端查詢與獲取注冊服務信息,這點很重要。

Eureka的構架保證了它能夠成為Service發現服務。它相對與ZooKeeper來說剔除了Leader節點的選取或者事務日誌機制,

樣做有利於減少使用者維護的難度也保證了Eureka的在運行時的健壯性。而且Eureka就是為發現服務所設計的,它有獨立的客戶端程序庫,同時提供心
跳服務、服務健康監測、自動發布服務與自動刷新緩存的功能。但是,如果使用ZooKeeper你必須自己來實現這些功能。Eureka的所有庫都是開源
的,所有人都能看到與使用這些源代碼,這比那些只有一兩個人能看或者維護的客戶端庫要好。

維護Eureka伺服器也非常的簡單,比如,切換一個節點只需要在現有EIP下移除一個現有的節點然後添加一個新的就行。Eureka提供了一

web-based的圖形化的運維界面,在這個界面中可以查看Eureka所管理的注冊服務的運行狀態信息:是否健康,運行日誌等。Eureka甚至提供
了Restful-API介面,方便第三方程序集成Eureka的功能。

Ⅷ 請教一個zookeeper連接太頻繁會爆錯誤的問題

Tomcat啟動,初始化webcontext;初始化spring, spring初始某些些bean,這些bean包括了zookeeper的連接相關的bean;這時zkClient(獨立線程)已經連接上伺服器了,但是classloader沒有載入到org/apache/zookeeper/proto/SetWatches類;spring初始化失敗,導致Tomcat webcontext初始化也失敗,應用在掛起狀態,但zkClient線程還是正常的;zookeeper伺服器重啟,zkClient開始重連,連接上zookeeper伺服器;zkClient觸發watch的一些代碼,ClassLoader嘗試載入org/apache/zookeeper/proto/SetWatches類,但是發現找不到類,於是拋出異常;zkClient捕獲到異常,認為重連失敗,close掉connection,休眠幾秒之後,再次重連;於是出現了zkClient反復重試連接zookeeper伺服器,而且都是秒連秒斷的情況。

Ⅸ zookeeper連接報錯:Unable to read additional data from client

zookeeper服務端和客戶端的jar版本不一致導致的
從zookeeper服務端安裝目錄的根目錄復制zookeeper-xxx.jar到客戶端即可

Ⅹ java連接zookeeper的時候報錯,請問下是什麼原因啊

常見錯誤日誌如下:
org.apache.zookeeper.KeeperException$ConnectionLossException: KeeperErrorCode = ConnectionLoss

1. 原因:
是因為ZooKeeper建立連接時採用非同步操作,連接操作後並不能保證ZK連接已成功。如果在ZK連接成功前的這個小時間窗口去訪問ZK,就會碰到如上錯誤。
2. 解決思路
我們在新建ZK連接後要等一段時間,保證連接成功後再訪問ZK。

3. 網上比較贊同的解決方案:
主要利用兩個Java類:

(1)java.util.concurrent.CountDownLatch:
一個同步輔助類,類似倒數計數,直到計數器為0時才能對資源「解鎖」。未解鎖前等待該資源的進程只能被阻塞。

主要方法:
public CountDownLatch(int count); /* 構造函數,參數指定計數次數 */
public void countDown(); /* 當前線程調用此函數,則計數減一 */
public void await() throws InterruptedException; /* 此函數會一直阻塞當前線程,直到計時器的值為0為止 */

(2)org.apache.zookeeper.Watcher
ZooKeeper有一個很有用的功能,就是集群上每一個變化都可以通知到自定義的Watchcer。

閱讀全文

與zookeeper集群網路拒絕連接相關的資料

熱點內容
網路共享中心沒有網卡 瀏覽:552
電腦無法檢測到網路代理 瀏覽:1410
筆記本電腦一天會用多少流量 瀏覽:713
蘋果電腦整機轉移新機 瀏覽:1403
突然無法連接工作網路 瀏覽:1163
聯通網路怎麼設置才好 瀏覽:1261
小區網路電腦怎麼連接路由器 瀏覽:1145
p1108列印機網路共享 瀏覽:1238
怎麼調節台式電腦護眼 瀏覽:797
深圳天虹蘋果電腦 瀏覽:1033
網路總是異常斷開 瀏覽:641
中級配置台式電腦 瀏覽:1097
中國網路安全的戰士 瀏覽:659
同志網站在哪裡 瀏覽:1458
版觀看完整完結免費手機在線 瀏覽:1484
怎樣切換默認數據網路設置 瀏覽:1145
肯德基無線網無法訪問網路 瀏覽:1342
光纖貓怎麼連接不上網路 瀏覽:1578
神武3手游網路連接 瀏覽:996
局網列印機網路共享 瀏覽:1024