Zookeeper集群搭建/命令行客户端使用/JavaAPI使用

一、集群安装

1.    Zookeeper概念简介:

Zookeeper是一个分布式协调服务;就是为用户的分布式应用程序提供协调服务
    A、zookeeper是为别的分布式程序服务的
    B、Zookeeper本身就是一个分布式程序(只要有半数以上节点存活,zk就能正常服务)
    C、Zookeeper所提供的服务涵盖:主从协调、服务器节点动态上下线、统一配置管理、分布式共享锁、统一名称服务……
    D、虽然说可以提供各种服务,但是zookeeper在底层其实只提供了两个功能:
        管理(存储,读取)用户程序提交的数据;
        并为用户程序提供数据节点监听服务;

Zookeeper常用应用场景:

    服务器状态的动态感知

    配置文件管理

    分布式共享锁

Zookeeper集群的角色:  Leader 和  follower  (Observer)
    只要集群中有半数以上节点存活,集群就能提供服务

2.    zookeeper集群机制

半数机制:集群中半数以上机器存活,集群可用。
zookeeper适合装在奇数台机器上!!!

3.    安装

3.1   机器部署

    安装到3台虚拟机(mini1 mini2 mini3)上
    安装好JDK
3.2  上传
    上传用SFTP命令Alt+p。
3.3  解压

    mkdir /root/apps
    tar -zxvf /root/apps/zookeeper-3.4.5.tar.gz(解压)
3.4  修改配置文件
1、拷贝改名或直接改名
    cp zoo_sample.cfg zoo.cfg
2、vi zoo.cfg
3、添加内容:
    修改数据目录:dataDir=/root/zkdata

    配置节点:
    server.1=mini1:2888:3888 (主机名, 心跳端口、数据端口)
    server.2=mini2:2888:3888
    server.3=mini3:2888:3888
4、在data文件夹下新建myid文件,并写入标志每一台机器在集群的节点名称

    [root@mini1 ~]# mkdir zkdata
    [root@mini1 ~]# echo 1 > zkdata/myid

    [root@mini2 ~]# mkdir zkdata
    [root@mini2 ~]# echo 2 > zkdata/myid
    [root@mini3 ~]# mkdir zkdata
    [root@mini3 ~]# echo 3 > zkdata/myid
5、将集群下发到其他机器上
    scp -r /root/apps/zookeeper-3.4.5 mini2:/root/apps/
    scp -r /root/apps/zookeeper-3.4.5 mini3:/root/apps/
3.1.9.    启动(每台机器)
    ./zkServer.sh start(后面提供了通过shell脚本批量启动集群中的所有节点)
3.1.10.    查看集群状态
1、    jps(查看进程)
2、    zkServer.sh status(查看集群状态,主从信息)

二、命令行客户端使用

列举几个简单的命令

1、启动命令行客户端:[root@mini1 bin]# ./zkCli.sh

2、输入“help”可查看可使用的命令

[zk: localhost:2181(CONNECTED) 1] help
ZooKeeper -server host:port cmd args
        connect host:port
        get path [watch]
        ls path [watch]
        set path data [version]
        rmr path
        delquota [-n|-b] path
        quit 
        printwatches on|off
        create [-s] [-e] path data acl
        stat path [watch]
        close 
        ls2 path [watch]
        history 
        listquota path
        setAcl path acl
        getAcl path
        sync path
        redo cmdno
        addauth scheme auth
        delete path [version]
        setquota -n|-b val path
[zk: localhost:2181(CONNECTED) 2] 

3、查看根节点:

[zk: localhost:2181(CONNECTED) 0] ls /
[app1, zookeeper, eclipse]

4、在第三台机器连接到第二台机器:

[zk: localhost:2181(CONNECTED) 1] connect mini2:2181

5、创建节点

[zk: mini1:2181(CONNECTED) 5] create /app1 "app1 data parent"
Created /app1

6、修改节点内容

[zk: mini2:2181(CONNECTED) 5] set /app1   444
cZxid = 0x100000006
ctime = Wed Oct 31 04:21:50 CST 2018
mZxid = 0x100000010
mtime = Wed Oct 31 04:37:34 CST 2018
pZxid = 0x100000007
cversion = 1
dataVersion = 3
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 3
numChildren = 1

三、Zookeeper的JavaAPI使用

public class SimpleZkClient {

    private static final String conn = "mini1:2181,mini2:2181,mini3:2181";
    private static final Integer sessionTimeOut = 2000;
    ZooKeeper zkClient = null;

    @Before
    public void init() throws Exception {
        zkClient = new ZooKeeper(conn, sessionTimeOut, new Watcher() {
            @Override
            public void process(WatchedEvent event) {
                System.out.println(event.getType());
            }
        });
    }

    @Test
    public void testCreate() throws Exception {
        String newCli = zkClient.create("/eclipse", "hello".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
    }

    @Test
    public  void getChildren() throws Exception {
        List<String> children = zkClient.getChildren("/", true);
        for (String string : children){
            System.out.println(string);
        }
        Thread.sleep(Long.MAX_VALUE);
    }

}

猜你喜欢

转载自blog.csdn.net/weixin_36490014/article/details/83717951