zookeeper與keepalived的高可用區別?

zookeeper和keepalived都能實現高可用 , 那麼這兩者有什麼區別呢?


keepalived與zookeeper都可以用來實現高可用,另外常見的還有DNS。先看看優缺點,就可以看出在實現高可用時的區別。高可用一般跟負載均衡會一起考慮,所以下面的比較也會提到負載均衡能力。

1、Keepalived:

優點:簡單,基本不需要業務層面做任何事情,就可以實現高可用,主備容災。而且容災的宕機時間也比較短。

缺點:也是簡單,因為VRRP、主備切換都沒有什麼複雜的邏輯,所以無法應對某些特殊場景,比如主備通信鏈路出問題,會導致腦裂。同時,keepalived也不容易做負載均衡。

2、zookeeper:

優點:可以支持高可用,負載均衡。本身是個分散式的服務。

缺點:跟業務結合的比較緊密。需要在業務代碼中寫好ZK使用的邏輯,比如註冊名字。拉取名字對應的服務地址等。

3、DNS

優點:不複雜,同時與業務結合的不是很緊密,通過簡單的邏輯就可以實現負載均衡。

缺點:DNS容災是更新DNS伺服器需要時間,宕機時間比較長。

所以,區別很明顯。從簡單性來說:Keepalived最簡單,DNS次之,ZK最複雜。從負載均衡能力來看,zookeeper最強,DNS次之,Keepalived最弱。從與業務的緊密程度來看:ZK最緊密,DNS次之,Keepalived基本跟業務層面沒有關係。

所以使用場景,個人看法,對於框架級別的業務可能會選擇ZK,僅僅需要做容災的用Keepalived。DNS的方法介乎兩者中間。


ZooKeeper是一個分散式的,開放源碼的分散式應用程序協調服務,是Google的Chubby一個開源的實現,是Hadoop和Hbase的重要組件。它是一個為分散式應用提供一致性服務的軟體,提供的功能包括:配置維護、名字服務、分散式同步、組服務等。

ZooKeeper的目標就是封裝好複雜易出錯的關鍵服務,將簡單易用的介面和性能高效、功能穩定的系統提供給用戶。

ZooKeeper包含一個簡單的原語集,[1] 提供Java和C的介面。

ZooKeeper代碼版本中,提供了分散式獨享鎖、選舉、隊列的介面,代碼在zookeeper-3.4.3src
ecipes。其中分布鎖和隊列有Java和C兩個版本,選舉只有Java版本。

Keepalived的作用是檢測web伺服器的狀態,如果有一台web伺服器死機,或工作出現故障,Keepalived將檢測到,並將有故障的web伺服器從系統中剔除,當web伺服器工作正常後Keepalived自動將web伺服器加入到伺服器群中,這些工作全部自動完成,不需要人工干涉,需要人工做的只是修復故障的web伺服器。

一句話:zookeeper主要就是為了保持數據的一致性來的,舉個栗子,通俗點就是 本來是存儲在各個伺服器上的配置文件,現在我不存儲在各個伺服器上了,我就把全部配置文件都存儲在zookeeper伺服器上,應用伺服器需要的時候,就來zookeeper伺服器上取。

而keepalived實現了伺服器的自動切換,業務的不中斷。

當然zookeeper和keepalived都是可以做集群的。


keepalive只可以選出一台機器作為主機,所以keepalive只能實現M:1的備份

zookeeper可以選出N台機器作為主機,它可以實現M:N的備份


推薦閱讀:

zookeeper在dubbo到底起了什麼作用,dubno如何解決了阿里的高並發問題?

TAG:ZooKeeper | 高可用 |