• 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();
                }
            }
        }
    
  • 相关阅读:
    Ionic开发手机App常用的软件
    Windows的Ionic环境配置
    百度静态资源公共库
    我的程序员之路
    angular.bind
    响应式布局之使用bootstrap
    初识bootstrap
    使用css3实现响应式布局
    mysql-阅读笔记1
    mysql优化
  • 原文地址:https://www.cnblogs.com/ye-hcj/p/9889585.html
Copyright © 2020-2023  润新知