Zookeeper基礎學習

zookeeper的基本數據模型:
1、是一個樹形結構;
2、每一個節點都稱之爲znode,它可以有子節點,也可以有數據;
3、每個節點分爲臨時節點和永久節點,臨時節點在客戶端斷開後就會消失;
4、每個znode都有自己的version,可以通過命令來查看znode的信息;
5、每當節點數據發生變化時,該節點的版本號會累加,刪除/修改節點時,版本號不匹配會報錯;
6、節點可以設置權限acl,可以通過權限來限制用戶的訪問。
zookeeper的作用體現:
1、master節點選舉,主節點掛了之後,從節點會接手工作,並且保證這個節點是唯一的,這就是所謂的首腦模式,從而保證我們的集羣是高可用的;
2、統一配置文件管理,即只需要部署一臺服務器,則可以把相同的配置文件同步更新到其他所有服務器(如:修改了redis的統一配置);
3、發佈與訂閱,類似詳細隊列,dubbo發佈者把數據存在znode上,訂閱者會讀取這個數據;
4、提供分佈式鎖,分佈式環境中不同進程之間爭奪資源,類似於多線程中的鎖;
5、集羣管理,在zk的集羣中可以保證數據的強一致性,當修改一個節點的znode的值時,會把這個數據同步到其他的節點。
zookeeper客戶端基本命令:
ls path [watch]:查看path下有那些node
ls2 path [watch]:查看path下有那些node,並且顯示node的詳細信息
stat path [watch]:查看path的詳細信息
get path [watch]:獲取節點的數據,並且顯示節點的詳細信息
create [-s] [-e] path data acl:創建子節點:
									-e表示創建臨時節點,
									-s表示創建順序節點(zk會自動給節點名加上序號),
									-e和-s都不加,則是默認創建(非順序且永久節點),
									acl表示這個節點的權限,有增刪改查權限
set path data [version]:給節點設置數據:
							version指的就是節點信息中的dataVersion的最新值,
							當在使用set指令時,可以加上本服務器認爲的該節點的最新版本號,如果期間沒有人修改該節點,則可以修改成功,
							如果期間有人修改了該節點,則dataVersion的值就已經發生了變化,此時set指令就會執行失敗,符合樂觀鎖的原理
delete path [version]:刪除一個節點,如果path下面還有子節點,則不能刪除
							version和set指令的作用一致,符合樂觀鎖的原理
zookeeper的watcher機制:
1、針對每個節點的操作,都會有一個監督者-->watcher
2、當監控的某個對象(znode)發生變化,則觸發一個wathcer事件
3、zk中的watcher是一次性的,觸發後,watcher事件就會立即銷燬
父節點watcher事件:
1、通過stat path [watch]設置watcher(或者通過get path [watch]設置watcher)
		通過stat /node_1 watch命令,給node_1節點設置一個watcher事件
		執行create /node_1 123命令,可以看到node_1節點被創建,並且觸發了一個事件:WatchedEvent state:SyncConnected type:NodeCreated path:/node_1
2、事件類型:
	NodeCreated:創建父節點watcher事件(通過stat命令設置事件)
	NodeDataChanged:修改父節點watcher事件(通過watch命令設置事件)
	NodeDeleted:刪除父節點事件
子節點watcher事件:
1、通過ls path [watch]或者ls2 path [watch]命令,對該子節點的父節點設置事件,在增,刪子節點時,就會觸發對應的事件
2、事件類型:
	NodeChildrenChanged:創建/刪除子節點(通過ls命令設置事件)
3、通過ls 命令對父節點設置事件,當修改子節點時,不會觸發事件
4、要想觸發子節點的修改事件,需要使用get /path watch(這裏的path要只想到子節點,類似於父節點watcher事件),再通過set指令,會觸發NodeDataChanged事件
zookeeper的Acl權限:
1、針對節點可以設置相關的權限(crdwa),目的時爲了保障數據的安全性
2、可以制定不同的權限範圍以及角色,就是給不同的角色設置不同的權限
3、getAcl:獲取某個節點的acl權限信息;setAcl:設置某個節點的acl權限信息
4、addauth:輸入認證授權信息,註冊時輸入明文密碼(登錄),但是在zk系統裏面,密碼是以加密的形式存在的
5、zk的acl的構成:[scheme:id:permissions]
		scheme:代表採用的某種權限機制,有以下幾種值:
			world:world下只有一個id,即只有一個用戶:anyone,表示所有人都可以有這些權限
			anth:代表認證登錄,需要註冊用戶有權限,形式:auth:user:password:[permissions]
		id:代表允許訪問的用戶
		permissions:權限組合字符串:
			crdwa:c表示create子節點的權限,r表示read當前節點/子節點的數據,w表示write節點數據,d表示delete當前節點下的子節點,a表示admin權限,可以給節點分配權限
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章