zookeeper面試1-9

Jeff的技術棧發表於2022-04-08

1.選舉機制

SID:伺服器ID。用來唯一標識一臺ZooKeeper叢集中的機器,每臺機器不能重複,和myid一致。
ZXID:事務ID。ZXID是一個事務ID,用來標識一次伺服器狀態的變更。在某一時刻, 叢集中的每臺機器的ZXID值不一定完全一樣
Epoch:每個Leader任期的代號。沒有Leader時同一輪投票過程中的邏輯時鐘值是

半數機制,超過半數的投票通過,即通過。
第一次啟動選舉規則:投票過半數時,伺服器 myid 大的勝出當leader
第二次啟動選舉規則:①EPOCH大的直接勝出 ②EPOCH相同,事務id大的勝出 ③事務id相同,任期代號id大的勝出

2.生產叢集安裝多少zookeeper合適?

安裝奇數臺。
生產經驗:
10 臺伺服器:3 臺 zk;
20 臺伺服器:5 臺 zk;
100 臺伺服器:11 臺 zk;
200 臺伺服器:11 臺 zk
伺服器臺數多:好處,提高可靠性;壞處:提高通訊延時

3.常用命令

ls、get、create、delete

4.zookeeper是什麼?

zookeeper是一個分散式的協調服務,提供的功能包括:配置維護、域名服務、分散式同步、組服務等。

5.zookeeper怎麼保證主從節點的狀態同步?

zookeeper的核心是原子廣播,相當於一個大的事務,要麼都成功,要麼都失敗。

6.叢集中為什麼要有主節點?

在分散式環境中,有些業務邏輯只需要叢集中的某一臺機器進行執行,其他的機器可以共享這個結果,這樣可以大大減少重複計算,提高效能,所以就需要主節點。

7.叢集中有3臺伺服器,其中一個節點當機,這個時候zookeeper還可以使用嗎?

可以繼續使用,單數伺服器半數以上正常就可以正常使用

8.說一下zookeeper的通知機制?

客戶端端會對某個znode建立一個watcher事件,當該znode發生變化時,這些客戶端會收到zookeeper的通知,然後客戶端可以根據znode變化來做出業務上的改變。

9.zookeeper分散式鎖

加鎖進行資源保護
go-zookeeper 新增分散式鎖的方法為NewLock(c *Conn, path string, acl []ACL)。
鎖的結構體為:
type Lock struct {
	c        *Conn
	path     string
	acl      []ACL
	lockPath string
	seq      int
}

這個結構體實現了三個方法:Lock(),LockWithData(data []byte)和Unlock()

lock := zk.NewLock(conn, "/root/lock", zk.WorldACL(zk.PermAll)) //加鎖
time.Sleep(time.Second*1) // 1 秒後釋放鎖
lock.Unlock()  //解鎖

相關文章