轉載請標明出處http://www.cnblogs.com/haozhengfei/p/e3db73cb83afb213a3bff43a850d56c4.html
keepalived VS zookeeper
兩者都可以做高可用HA,那么有什么區別呢?
1.從主被動的角度考慮
我們知道,nginx server通常和keepalived進行結合,那么keepalived是怎么知道nginx是否存活呢?是nginx主動向keepalived匯報信息?不是的。keepalived是主動向nginx發送請求,如果有響應,那么則nginx可用。
對於zookeeper而言,HDFS,HBase,Yarn基於zookeeper做高可用,這里的zookeeper就是被動的,也就是說
HDFS,HBase,Yarn主動向zookeeper中寫數據。
2.從負載的角度來考慮
keepalived可以幫助我們做到主從,主從的划分是通過配置文件(
主從的priority之差>50)指定的,如果主沒有掛掉,那么大量的請求通過主然后負載到后端的nginx,而從如果想要起作用只有等到主掛掉。
而利用zookeeper做HA,zookeeper中可以說是“人人平等”,客戶端無論訪問follower,還是observer,異或是leader,都能給我們返回相應的結果,可以很好的實現了
負載均衡,這也可以說是zookeeper的一個優點。
3.從存儲數據的角度
keepalived不可以存儲數據,假設keepalived的主現在有50個連接,如果沒有外部數據庫存儲這些連接的信息,主掛了的話,連接信息也就丟了,所以使用keepalived需要一個外部的數據庫,但是如果主掛了的同時數據庫也掛了,那么就over了,信息就會丟失,或者從起來后,連不上數據庫,那么之前的連接信息也會丟失。
zookeeper可以存儲數據,zookeeper中可以創建一個zNode,里面存放數據,
zookeeper可以做到一個分布式數據的一致性,zookeeper中每個節點的視圖是一致的,數據本身可以做到最終一致性,也就是說其中一個server掛了,其他的server還有存的數據,那么這樣的話就不需要額外的數據庫,zookeeper本身就可以存儲一定量的信息。
這也可以說是zookeeper的另一個優點。
4.從業務的角度
keepalived可以說比較簡單,只需要簡單的配置一下就可以了,使用keepalived的場景:如果我們只需要簡單的知道當前的業務中哪個是主,哪個是從,那么可以選用keepalived。
如果除了高可用以外,比如kafka,storm等還要想zookeeper中寫一些數據,這時候就需要zookeeper。
