linux zk集群,linux ZooKeeper集群安装
dataDir=/hadoop/zookeeper
clientPort=2181
server.1=hadoop-master:28888:38888
server.2=hadoop-slave01:28888:38888
server.3=hadoop-slave02:28888:38888
tickTime發送心跳時間間隔,單位毫秒
initlimit和sysnclimit,兩者都是以ticktime的總數進行度量(上面的時間為10*2000=20s)。initLimit參數設定了允許所有跟隨者與領導者進行連接并同步的時間,如果在設定的時間內內,半數以上的跟隨者未能完成同步,領導者便會宣布放棄領導地位,然后進行另外一次領導 者選舉。如果這種情況經常發生,通過查看日志中的記錄發現,則表明設定的值太小。
syscLimit參數設定了允許一個跟隨者與領導者進行同步的時間。如果在設定的時間內,一個跟隨者未能完成同步,它將會自己重啟,所有關聯到這個跟隨者的客戶端將連接到另外一個跟隨者。
datadir保存的zk中持久化的數據,zk中存在兩種數據,一種用完即消失,一種需要持久存在,zk的日志也保存在這
創建zookeeper數據目錄
mkdir -p /data/hadoop/zookeeper(三臺服務上都創建)
echo "1" > /data/hadoop/zookeeper/myid? (hadoop-master)
echo "2" > /data/hadoop/zookeeper/myid(hadoop-slave01)
echo "3" > /data/hadoop/zookeeper/myid(hadoop-slave02)
四:啟動
在對應的節點上啟動服務
/bin/zkServer.sh start
三個節點啟動完之后,查看
jps
10060 QuorumPeerMain
9030 NameNode
9228 SecondaryNameNode
13755 Jps
9317 JobTracker
五:測試案例
public class ZooKeeperTest implements Watcher{
private static final int SEESSION_TIMEOUT=10000;
private static final String CONNECTION_STRING="10.0.57.142:2181";
private static final String ZK_PATH="/configTest";
private ZooKeeper zk=null;
private CountDownLatch countDownLatch=new CountDownLatch(1);
/**
* @description 創建zookeeper連接
* @param
* @return
* @throws
*/
public void createConnection(String connectString,int sessionTimeout)
{
this.releaseConnection();
try {
zk = new ZooKeeper(connectString, sessionTimeout, this);
countDownLatch.await();
} catch (InterruptedException e) {
System.out.println("連接創建失敗,發生InterruptedException");
e.printStackTrace();
}
catch (IOException e) {
System.out.println("連接創建失敗,發生IOException");
e.printStackTrace();
}
}
/**
* @description 釋放zookeeper連接
* @param
* @return
* @throws
*/
public void releaseConnection()
{
if(null != zk)
{
try {
this.zk.close();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
/**
* @description 創建節點
* @param
* @return
* @throws
*/
public boolean createPath(String path,String data)
{
try {
if(null == this.zk.exists(path, true))
{
System.out.println("節點創建成功,Path:"+this.zk.create(path, data.getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT));
}
} catch (KeeperException e) {
System.out.println("節點創建失敗 ,發生KeeperException");
e.printStackTrace();
}
catch (InterruptedException e) {
System.out.println("節點創建失敗 ,發生InterruptedException");
e.printStackTrace();
}
return true;
}
/**
* @description 讀取節點數據內容
* @param
* @return
* @throws
*/
public String readData(String path)
{
try {
System.out.println("獲取數據成功,path:"+path);
return new String(this.zk.getData(path, true, null));
} catch (KeeperException e) {
System.out.println("讀取數據失敗 ,發生KeeperException");
e.printStackTrace();
return "";
}
catch (InterruptedException e) {
System.out.println("讀取數據失敗 ,發生InterruptedException");
e.printStackTrace();
return "";
}
}
/**
* @description 更新節點數據內容
* @param
* @return
* @throws
*/
public boolean wirteData(String path,String data)
{
try {
System.out.println( "更新數據成功,path:" + path + ", stat: " +
this.zk.setData( path, data.getBytes(), -1 ) );
}catch (KeeperException e) {
System.out.println("更新數據失敗 ,發生KeeperException");
e.printStackTrace();
}
catch (InterruptedException e) {
System.out.println("更新數據失敗 ,發生InterruptedException");
e.printStackTrace();
}
return true;
}
/**
* @description 刪除指定節點
* @param
* @return
* @throws
*/
public void deleteNode(String path){
try {
this.zk.delete(path, -1);
System.out.println( "刪除節點 成功,path:" + path);
}catch (KeeperException e) {
System.out.println("刪除節點 失敗 ,發生KeeperException");
e.printStackTrace();
}
catch (InterruptedException e) {
System.out.println("刪除節點 失敗 ,發生InterruptedException");
e.printStackTrace();
}
}
/* (non-Javadoc)
* @see org.apache.zookeeper.Watcher#process(org.apache.zookeeper.WatchedEvent)
*/
@Override
public void process(WatchedEvent event) {
System.out.println("收到事件通知:"+event.toString()+"\n");
if(KeeperState.SyncConnected==event.getState())
{
countDownLatch.countDown();
}
}
public static void main(String[] args) throws Exception
{
ZooKeeperTest zkTest = new ZooKeeperTest();
zkTest.createConnection(CONNECTION_STRING, SEESSION_TIMEOUT);
//??if(zkTest.createPath(ZK_PATH, "節點初始內容"))
//??{
//???System.out.println("數據內容:"+zkTest.readData(ZK_PATH));
//???zkTest.wirteData(ZK_PATH, "節點更新內容");
//???System.out.println("數據內容:"+zkTest.readData(ZK_PATH));
//???zkTest.deleteNode(ZK_PATH);
//??}
zkTest.createPath(ZK_PATH, "節點初始內容");
zkTest.createPath("/configTest/a", "節點初始內容");
zkTest.createPath("/configTest/b", "節點初始內容");
System.out.println(zkTest.zk.getChildren(ZK_PATH, true));
zkTest.releaseConnection();
}
}
總結
以上是生活随笔為你收集整理的linux zk集群,linux ZooKeeper集群安装的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 开源sip客户端 linux,开源SIP
- 下一篇: linux退出大于符号,每天一个linu