zoukankan      html  css  js  c++  java
  • zookeeper集群(linux)和单机(windows)搭建

    Zookeeper集群(linxu)搭建

    环境要求:必须要有jdk环境,本次讲课使用jdk1.8

    3.1结构

    一共节点
    集群的服务器数量一般为2n+1个,(zk服务器集群规模不小于3个节点),要求服务器之间系统时间保持一致。

    3.2上传zk并且解压
    进行解压: tar -zxvf zookeeper-3.4.6.tar.gz
    重命名: mv zookeeper-3.4.6 zookeeper

    3.3 修改zookeeper环境变量

    vi /etc/profile

    export JAVA_HOME=/opt/jdk1.8.0_71       //jdk安装目录

    export ZOOKEEPER_HOME=/usr/local/zookeeper    //zookeeper安装目录

    export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

    export PATH=$JAVA_HOME/bin:$ZOOKEEPER_HOME/bin:$PATH

    source /etc/profile   //使修改的配置生效

    3.4 修改zoo_sample.cfg文件

    //将zoo_sample.cfg的名称更改为zoo.cfg

    cd /usr/local/zookeeper/conf

    mv zoo_sample.cfg  zoo.cfg


    修改conf: vi zoo.cfg 修改两处
    1) dataDir=/usr/local/zookeeper/data(注意同时在zookeeper创建data目录
    2)最后面添加
    server.0=第一台服务器的的ip或者映射名称:2888:3888
    server.1=第一台服务器的的ip或者映射名称:2888:3888
    server.2=第一台服务器的的ip或者映射名称:2888:3888

    3.5 创建服务器标识

    服务器标识配置:
    创建文件夹: mkdir data
    创建文件myid并填写内容为0: vi
    myid (内容为服务器标识 : 0)

    此值为zoo.cfg文件中server.之后的数,数值对应ip

    3.6 克隆虚拟机或者将刚才的配置的东西复制到其他两台服务器上

    需要修改对应的ip和myid文件中的值

    3.7 启动zookeeper
    启动zookeeper:
    路径: /usr/local/zookeeper/bin
    执行: zkServer.sh start  //或者./zkServer.sh start
    (注意这里3台机器都要进行启动)
    状态: zkServer.sh
    status(在三个节点上检验zk的mode,一个leader和俩个follower)

    3.8 启动客户端

    ./zkCli.sh 命令启动客户端

    zoo.cfg文件属性值介绍

    tickTime:心跳时间,为了确保连接存在的,以毫秒为单位,最小超时时间为两个心跳时间

    initLimit:多少个心跳时间内,允许其他server连接并初始化数据,如果ZooKeeper管理的数据较大,则应相应增大这个值

    clientPort:服务的监听端口

    dataDir:用于存放内存数据库快照的文件夹,同时用于集群的myid文件也存在这个文件夹里(注意:一个配置文件只能包含一个dataDir字样,即使它被注释掉了。)

    dataLogDir:用于单独设置transaction log的目录,transaction log分离可以避免和普通log还有快照的竞争

    syncLimit:多少个tickTime内,允许follower同步,如果follower落后太多,则会被丢弃。

    server.A=BCD
    A是一个数字,表示这个是第几号服务器,B是这个服务器的ip地址
    C第一个端口用来集群成员的信息交换,表示的是这个服务器与集群中的Leader服务器交换信息的端口
    D是在leader挂掉时专门用来进行选举leader所用

    zookeeper(windows)单机安装

    解压  zookeeper-3.4.6.tar.gz  文件

    1.在文件的第一级目录下创建data文件夹

    2.将conf目录下的zoo_sample.cfg的名称更改为zoo.cfg

    3.修改zoo.cfg中dataDir的路径,更改为第一步创建的data的路径

     4.先启动bin目录下的zkServer.cmd(服务端),打开后保持窗口不关闭, 接下来打开zkCil.cmd 启动客户端 

    命令行工具的一些简单操作如下:

    • 1. 显示根目录下、文件: ls / 使用 ls 命令来查看当前 ZooKeeper 中所包含的内容
    • 2. 显示根目录下、文件: ls2 / 查看当前节点数据并能看到更新次数等数据
    • 3. 创建文件,并设置初始内容: create /zk "test" 创建一个新的 znode节点“ zk ”以及与它关联的字符串
    • 4. 获取文件内容: get /zk 确认 znode 是否包含我们所创建的字符串
    • 5. 修改文件内容: set /zk "zkbak" 对 zk 所关联的字符串进行设置
    • 6. 删除文件: delete /zk 将刚才创建的 znode 删除
    • 7. 退出客户端: quit
    • 8. 帮助命令: help

    Java连接zookeeper

    导入依赖

    <dependency>
                <groupId>org.apache.zookeeper</groupId>
                <artifactId>zookeeper</artifactId>
                <version>3.4.6</version>
            </dependency>
    public class ZookeeperDemo {
        /**
         * 集群连接地址
         */
        private static final String CONNECT_ADDR = "192.168.110.138:2181,192.168.110.147:2181,192.168.110.148:2181";
        /**
         * session超时时间
         */
        private static final int SESSION_OUTTIME = 2000;
        /**
         * 信号量,阻塞程序执行,用户等待zookeeper连接成功,发送成功信号,
         */
        private static final CountDownLatch countDownLatch = new CountDownLatch(1);
    
        public static void main(String[] args) throws IOException, InterruptedException, KeeperException {
            ZooKeeper zk = new ZooKeeper(CONNECT_ADDR, SESSION_OUTTIME, new Watcher() {
    
                public void process(WatchedEvent event) {
                    // 获取时间的状态
                    KeeperState keeperState = event.getState();
                    EventType tventType = event.getType();
                    // 如果是建立连接
                    if (KeeperState.SyncConnected == keeperState) {
                        if (EventType.None == tventType) {
                            // 如果建立连接成功,则发送信号量,让后阻塞程序向下执行
                            countDownLatch.countDown();
                            System.out.println("zk 建立连接");
                        }
                    }
                }
    
            });
            // 进行阻塞
            countDownLatch.await();
            //创建父节点
    //        String result = zk.create("/testRott", "12245465".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
    //        System.out.println("result:" + result);
            //创建子节点
            String result = zk.create("/testRott/children", "children 12245465".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
            System.out.println("result:"+result);
            zk.close();
        }
    
    }
  • 相关阅读:
    53、Gif 控件GifView 的使用,播放gif图片
    52、图片缩放库 PhotoView
    51、自定义View基础和原理
    Adapter适配器 final int Id 导致选中的Item不在当前界面
    Linux目录结构
    Linux包管理工具分析
    Linux 软件包安装管理
    MySQL配置详解
    MySQL 5.5.x配置文件详解
    Linux Apache2 配置介绍
  • 原文地址:https://www.cnblogs.com/yjc1605961523/p/11929346.html
Copyright © 2011-2022 走看看