linux中zookeeper

linux中zookeeper

安装jdk

tar -zxvf jdk-11.0.1_linux-x64_bin.tar.gz -C /usr/src

sudo vim /etc/profile
输入如下内容
    export JAVA_HOME=/usr/src/jdk-11.0.1

    export JRE_HOME=${JAVA_HOME}/jre

    export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib

    export PATH=.:${JAVA_HOME}/bin:$PATH

shutdown -r now

java -version

安装zookeeper

wget http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.4.10/zookeeper-3.4.10.tar.gz

tar -zxvf zookeeper-3.4.10.tar.gz -C /usr/src

配置zookeeper

zookeeper工作原理,leader选举作为主服务器使用,最少3台服务器

cd /usr/src/zookeeper-3.4.10/conf
cp zoo_sample.cfg zoo.cfg
sudo zoo.cfg

输入如下内容

    # tick时间
    tickTime=2000
    # tick数量
    initLimit=10
    # 请求和响应能够传递的tick数量
    syncLimit=5
    # 保存snapshots的数据目录
    dataDir=/root/zookeeper
    # 客户端端口
    clientPort=2181
    # 最大客户端连接数
    maxClientCnxns=60
    # snapshots保存数量
    autopurge.snapRetainCount=3
    # Purge task interval in hours
    # Set to "0" to disable auto purge feature
    #autopurge.purgeInterval=1
    # server.serverid=你的服务器ip:leader和follower通信端口:选举投票端口
    server.1=yourserverip1:2888:3888
    server.2=yourserverip2:2888:3888
    server.3=yourserverip3:2888:3888

记录serverid到dataDir中
    mkdir /root/zookeeper
    cd /root/zookeeper
    echo 1 > myid

禁用防火墙
    sudo ufw disable 
    sudo ufw status

开启zookeeper
    cd /usr/src/zookeeper-3.4.10/bin
    ./zkServer.sh start
    ./zkServer.sh status

zookeeper结点操作

zookeeper提供的数据保管功能,leader服务器实现更新数据

连接zookeeper
    ./zkCli.sh
    connect yourip:2181                 // 连接其他机器的zookeeper
    ls /                                // 查看根结点
    create /node1 "testnode1"           // 创建结点  
    create /node1/node11 "testnode11" 
    get /node1/node11                   // 获取结点数据  
    get /node1/node11 watch             // 监听结点数据
    set /node1 "data"                   // 修改结点值
    delete /node1                       // 删除节点

短暂结点和持久结点
    create -e /node2                    // 断开连接,自动删除
    create /node2                       // 持久保存

序列号结点          
    create -s /node3                    // 结点名称后面自动添加序号

在java中使用

依赖
    <dependency>
        <groupId>org.apache.zookeeper</groupId>
        <artifactId>zookeeper</artifactId>
        <version>3.5.4-beta</version>
    </dependency>

示例
    package test;

    import java.util.List;

    import org.apache.zookeeper.CreateMode;
    import org.apache.zookeeper.KeeperException;
    import org.apache.zookeeper.WatchedEvent;
    import org.apache.zookeeper.Watcher;
    import org.apache.zookeeper.ZooKeeper;
    import org.apache.zookeeper.ZooDefs.Ids;
    import org.apache.zookeeper.data.Stat;

    public class App 
    {
        private static final String connectString = "yourip1:2181,yourip2:2181,yourip3:2181";
        private static final Integer sessionTimeout = 3000;
        private static ZooKeeper zk = null;
        
        public static void main( String[] args ) throws Exception
        {
            zk = new ZooKeeper(connectString, sessionTimeout, new Watcher(){
            
                @Override
                public void process(WatchedEvent event) {
                    System.out.println(event.getType() + "----" + event.getPath());
                }
            });

            
        }

        public void NodeOperation() {
            try {
                // 创建结点
                String path = zk.create("/node", "hello".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);

                // 获取结点
                List<String> c = zk.getChildren("/", true);

                // 判断结点是否存在
                Stat stat = zk.exists("/node", false);
                if(stat == null) {
                    System.out.println("结点不存在");
                }

                // 获取结点数据
                byte[] data = zk.getData("/node", false, null);

                // 设置结点
                zk.setData("/node", "data".getBytes(), -1);

                // 删除结点
                zk.delete("/node", -1);

            } catch (KeeperException e) {
                e.printStackTrace();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
原文地址:https://www.cnblogs.com/ye-hcj/p/9889585.html