ZOOKEEPER叢集搭建及測試
阿新 • • 發佈:2022-04-29
①. zk是由java編寫的需要java執行環境,所以大家首先要安裝JDK
具體安裝步驟,不再贅述
②. 首先進入zk的conf目錄,將zoo_sample.cfg檔案改名為zoo.cfg,並修改內容
tickTime=2000 #ZK中的一個時間單元。ZK中所有時間都是以這個時間單元為基礎,進行整數倍配置的。例如,session的最小超時時間是2*tickTime。 initLimit=5 #Leader允許Follower在 initLimit 時間內完成這個工作 syncLimit=2 #心跳檢測,Leader發出心跳包在syncLimit之後,還沒有從F那裡收到響應,那麼就認為這個F已經不線上了 dataDir=/usr/local/zookeeper/data #我們需要在此目錄下建立myid用於標識zk節點,對應server.x,事務日誌也會儲存在這裡 dataLogDir=/usr/local/zookeeper/logs #事務日誌輸出目錄 clientPort=2181 #對外提供的埠號,預設2181 server.1=zk1:2888:3888 #server.x跟myid對應,兩個通訊埠第一個埠用於F和L之間的資料同步和其它通訊,第二個埠用於Leader選舉過程中投票通訊。 server.2=zk2:2888:3888 server.3=zk3:2888:3888
③. 設定myid, 在zk根目錄建立前面zoo.cfg中配置的dataDir指定的資料夾,建立myid,myid中的值需與server.x保持一致
④. 都設定完之後,記得檢查一下各節點埠是否打通,並且關閉防火牆
⑤. 進入bin目錄,執行 sh zkServer.sh start & 命令,通過JPS檢查是否啟動,並且檢視日誌:
tail -fn 100 zookeeper.out,第一個節點啟動,會報如下異常:
此時不做理會,當所有節點啟動完成之後即恢復正常
2017-09-14 14:50:24,993 [myid:2] - INFO [QuorumPeer[myid=2]/0:0:0:0:0:0:0:0:2181:QuorumPeer$QuorumServer@149] - Resolved hostname: 192.168.116.127 to address: /zk2 2017-09-14 14:50:24,995 [myid:2] - WARN [QuorumPeer[myid=2]/0:0:0:0:0:0:0:0:2181:QuorumCnxManager@400] - Cannot open channel to 3 at election address /zk2:3888 java.net.ConnectException: 拒絕連線 at java.net.PlainSocketImpl.socketConnect(Native Method) at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339) at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200) at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182) at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) at java.net.Socket.connect(Socket.java:579) at org.apache.zookeeper.server.quorum.QuorumCnxManager.connectOne(QuorumCnxManager.java:381) at org.apache.zookeeper.server.quorum.QuorumCnxManager.connectAll(QuorumCnxManager.java:426) at org.apache.zookeeper.server.quorum.FastLeaderElection.lookForLeader(FastLeaderElection.java:843) at org.apache.zookeeper.server.quorum.QuorumPeer.run(QuorumPeer.java:822)
,使用 sh zkServer.sh status檢查節點狀態,一般myid大的為leader
客戶端驗證是否成功:
private final static String CONNECT_STRING = "zk1:2181,zk2:2181,zk3:2181"; private final static int SESSION_TIMEOUT = 2000; private ZooKeeper zk = null; @Before public void init() throws Exception { zk = new ZooKeeper(CONNECT_STRING, SESSION_TIMEOUT, new ZKWatcher()); } @Test public void create() throws Exception { String cResponse = zk.create("/app-01", "hello this is app-01 node".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT); Thread.sleep(1000); System.out.println("--->create:" + cResponse); } @Test public void get() throws Exception { System.out.println(zk.getChildren("/", new ZKWatcher())); } @Test public void set() throws Exception { System.out.println(zk.setData("/app-01", "this is app-01 node.update count 4".getBytes(), -1)); } @Test public void getData() throws Exception { System.out.println(new String(zk.getData("/app-01/hello", new ZKWatcher(), null))); // Thread.sleep(Long.MAX_VALUE); }
或使用工具:ZooInspector連線,檢查使用情況以及服務端狀態