zoukankan      html  css  js  c++  java
  • Zookeeper的安装配置及基本开发

    一、简介

                 Zookeeper 是分布式服务框架,主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等等。

    ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。
    ZooKeeper包含一个简单的原语集,[1] 提供Java和C的接口。
    ZooKeeper代码版本中,提供了分布式独享锁、选举、队列的接口,代码在zookeeper-3.4.3src ecipes。其中分布锁和队列有Java和C两个版本,选举只有Java版本。

    二、工作原理

           Zookeeper的核心是广播,这个机制保证了各个Server之间的同步。实现这个机制的协议叫做Zab协议。Zab协议有两种模式,它们分别是恢复模式(选主)和广播模式(同步)。当服务启动或者在领导者崩溃后,Zab就进入了恢复模式,当领导者被选举出来,且大多数Server完成了和leader的状态同步以后,恢复模式就结束了。状态同步保证了leader和Server具有相同的系统状态。为了保证事务的顺序一致性,zookeeper采用了递增的事务id号(zxid)来标识事务。所有的提议(proposal)都在被提出的时候加上了zxid。实现中zxid是一个64位的数字,它高32位是epoch用来标识leader关系是否改变,每次一个leader被选出来,它都会有一个新的epoch,标识当前属于那个leader的统治时期。低32位用于递增计数。
    每个Server在工作过程中有三种状态:
    LOOKING:当前Server不知道leader是谁,正在搜寻。
    LEADING:当前Server即为选举出来的leader。
    FOLLOWING:leader已经选举出来,当前Server与之同步。


    三、基本配置

    zookeeper的安装和之前的一样,也是有3种安装方式。分为单机、伪集群和集群模式。

    1、首先去apache官网下载zookeeper,目前最新版是3.4.8 ,http://www.apache.org/dyn/closer.cgi/zookeeper/

    2、解压到你需要安装的目录,例如我是放在/home/admin1/下载/zookeeper-3.4.8下面。

    3、在conf目录在做配置:

    zoo.cfg

    (1)如果你是单机模式的话,就需要做如下配置就可以了。

    tickTime=2000
    dataDir=/home/admin1/下载/zookeeper-3.4.8/data
    dataLogDir=/home/admin1/下载/zookeeper-3.4.8/logs
    clientPort=2181


    (2)  如果你是伪分布模式的话,则需要做如下配置:zoo.cfg

    所谓伪集群, 是指在单台机器中启动多个zookeeper进程, 并组成一个集群. 以启动3个zookeeper进程为例.

    tickTime=2000
    initLimit=10
    syncLimit=5
    
    dataDir=/home/admin1/下载/zookeeper-3.4.8/tmp/zookeeper
    
    clientPort=2181
    
    server.1=localhost:2287:3387
    server.2=localhost:2288:3388
    server.3=localhost:2289:3389

    
    
    
    

    1 initLimit: zookeeper集群中的包含多台server, 其中一台为leader, 集群中其余的server为follower. initLimit参数配置初始化连接时, follower和leader之间的最长心跳时间. 此时该参数设置为10, 说明时间限制为10倍tickTime, 即10*2000=20000ms=20s.2 syncLimit: 该参数配置leader和follower之间发送消息, 请求和应答的最大时间长度. 此时该参数设置为5, 说明时间限制为5倍tickTime, 即10000ms.3 server.X=A:B:C 其中X是一个数字, 表示这是第几号server. A是该server所在的IP地址. B配置该server和集群中的leader交换消息所使用的端口. C配置选举leader时所使用的端口. 由于配置的是伪集群模式, 所以各个server的B, C参数必须不同.参照zookeeper0/conf/zoo.cfg, 配置zookeeper1/conf/zoo.cfg, 和zookeeper2/conf/zoo.cfg文件. 只需更改dataDir, dataLogDir, clientPort参数即可.在之前设置的dataDir中新建myid文件, 写入一个数字, 该数字表示这是第几号server. 该数字必须和zoo.cfg文件中的server.X中的X一一对应./home/admin1/下载/zookeeper1/data/myid文件中写入1,/home/admin1/下载/zookeeper2/data/myid文件中写入2,/home/admin1/下载/zookeeper3/data/myid文件中写入3.分别进入/home/admin1/下载//zookeeper1/bin, /home/admin1/下载//zookeeper2/bin, /home/admin1/下载//zookeeper3/bin三个目录, 启动server.

    bin/zkServer.sh  start

    关闭就是后面是stop.
    启动成功后用jps查看进程,
    有ZooKeeperMain就是对的(若没有配置其他
    机器的情况下)


    可以启动客户端测试下:

    bin/zkCli.sh -server localhost:2181


    (注:如果是远程连接,把localhost换成指定的IP即可)

    然后,就可以用一些基础命令,比如 ls ,create ,delete ,get 来测试了(关于这些命令,大家可以查看文档)

    (3)  集群模式的配置和伪集群基本一致.
    由于集群模式下, 各server部署在不同的机器上, 因此各server的conf/zoo.cfg文件可以完全一样.


    四、开发测试

    测试连接,我们可以有3种方法。

    4.1  zkCli.sh

    可以使用帮组命令进入各种操作。



    4.2、在eclipse上操作:

    新建java工程,需要导入zookeeper里面的jar包 ,zookeeper-3.4.8.jar。

    新建createSession.java

    public class CreateSession implements Watcher { 
    
    	private static ZooKeeper zookeeper;
    	public static void main(String[] args) throws IOException, InterruptedException {
    		zookeeper = new ZooKeeper("localhost:2181",5000,new CreateSession());
    		System.out.println(zookeeper.getState());
    		
    		Thread.sleep(Integer.MAX_VALUE);
    	}
    	
    	private void doSomething(){
    		
    		System.out.println("do something");
    	}
    	@Override
    	public void process(WatchedEvent event) {
    	
    		System.out.println("收到事件:"+event);
    		if (event.getState()==KeeperState.SyncConnected){
    			
    			if (event.getType()==EventType.None && null==event.getPath()){
    				doSomething();
    			}
    		}
    	}
    	
    }
    还需要一个接口:

    MyWatcher.java

    public class MyWatcher implements Watcher {
    
    	@Override
    	public void process(WatchedEvent event) {
    		// TODO Auto-generated method stub
    
    	}
    
    }

    运行结果如下:代表连接成功了。



    4.3 使用ZKClient 

    在github中下载源码包,https://github.com/sgroschupf/zkclient

    在新建的eclipse项目中添加库依赖,就可以了。

    测试代码

    import org.I0Itec.zkclient.ZkClient;
    import org.I0Itec.zkclient.serialize.SerializableSerializer;
    
    public class CreateSession {
    
    	public static void main(String[] args) {
    		ZkClient zc = new ZkClient("localhost",10000,10000,new SerializableSerializer());
    		System.out.println("conneted ok!");
    	}
    	
    }



  • 相关阅读:
    Oracle EXPDP/IMPDP示例
    Oracle修改日志归档模式、归档路径以及空间大小的相关测试
    CentOS6.8 安装 Oracle11.2.0.4
    安装ORACLE时 各Linux版本下载地址
    Oracle数据库导入报ORA-39083处理
    oracle跨平台数据迁移 expdp/impdp 字符集问题 导致ORA-02374 ORA-12899 ORA-02372
    ASM路径问题导致数据库不能正常启动 -- 报:ORA-03113: end-of-file on communication channel
    oralce11g RAC 启动后 CRS-0184: Cannot communicate with the CRS daemon.
    Oracle 11g安装时针对不同操作系统所需的依赖包查询地址
    关于oracle RAC心跳线采用直连 还是交换机连接的建议
  • 原文地址:https://www.cnblogs.com/sdksdk0/p/5585050.html
Copyright © 2011-2022 走看看