1、上传文件目录说明

上传的文件一般放在 /home/下

安装文件一般在 /usr/local/下

2. 安装zookeeper

2.1将zookeeper-3.4.11.tar.gz拷贝到/home/下

2.2解压、重命名、移动

tar -xvzf zookeeper-3.4.11.tar.gz

mv zookeeper-3.4.11.tar.gz zookeeper

mv zookeeper /usr/local

3. 配置环境变量

vim /etc/profile

export ZOOKEEPER_HOME=/usr/local/zookeeper

export PATH=$PATH:$ZOOKEEPER_HOME/bin;

sourse /etc/profile //刷新文件

4. 目录结构

bin:运行命令

conf:配置文件

contri:附加功能

dist-maven:maven编译后的目录

docs:文档

lib:依赖的jar包

recipes:案例demo代码

src:源码

5. 启动zookeeper

5.1修改conf/

cd /usr/local/zookeeper/conf/

cp zoo_sample.cfg zoo.cfg

zoo.cfg参数说明:tickTime(时间单元)、initLimit(节点同步到master节点的连接时间)、syncLimit(master节点与从节点发消息请求和应答时间)、dataDir(必须配置)、dataLogDir(日志目录)、clientPort(连接服务器端口,默认2181)

5.2启动

cd /usr/local/zookeeper/bin

启动服务端:./zkServer.sh start

启动客户端:./zkCli.sh

6. Linux端命令

启动客户端之后:

help:查看zk命令

ls:ls  / (/代表根节点,/下的目录代表子节点)

ls2:ls  /+状态信息(stat /)

get:get  / 获得当前节点的数据

session:客户端与服务端的会话、可设置超时时间、心跳结束session过期、session过期临时节点znode被抛弃

心跳机制:客户端向服务端的ping包请求,或者不删、挂了才删,重新连接后如果心跳机制未超时,临时节点还存在

create /zkfk zkfk-data:创建一个zkfk目录,zkfk-data节点

create -e /zkfk/temp zdfk-data 在temp目录下创建一个zkfk-data临时节点(-e)

create -s /zkfk/seq seq:创建sequence目录,名称自动增长(-s)

set /zkfk new-data 1:修改zkfk节点,zkfk-data -> new-data,版本号加1,1代表最新版本号

delete /zkfk/seq0000000005 1:删除目录,版本号为1的目录

watcher:监督每个节点的操作,znode变化时触发,触发后立即销毁,父子节点增删改能够触发

stat /zkfk/one watch:创建时触发watch(父)

get /zkfk/one watch:get时设置,当修改、删除时触发watch(父)

ls /zkfk watch:创建、删除子节点时触发watch(子)

get /zkfk/one watch:修改时触发watch(子)

acl:权限控制,getAcl(获取节点权限信息),setAcl(设置节点权限信息),addauth(输入认证授权信息)

crdwa:create(创建子节点)、read、delete(删除子节点)、wirte、admin(设置权限)

setAcl /zkfk/one world:anyone:crwa:设置权限,不能删除

addauth digest fk:fk:添加用户fk,密码fk或登录

setAcl /zkfk/one auth:fk:fk:cdrwa:通过认证信息设置权限

setAcl /zkfk/one digest:fk:xJ0PRXcE29ROsbH4WtFbbjYdsP8=:cdrwa:通过认证信息设置权限

setAcl /zkfk/ip ip:192.168.1.103:cdrwa:通过ip设置权限

超级管理员权限:

vim zkServer.sh修改如下

重启服务

四字命令:是有自身的简短命令与服务器进行交互(先:yum install nc )

echo stat | nc localhost 2181:查看当前ip端口stat信息

echo ruok | nc localhost 2181:查看当前ip端口zk是否启动

echo dump | nc localhost 2181:查看当前ip端口未经处理的会话和临时节点

echo conf | nc localhost 2181:查看当前ip端口服务器配置信息

echo confs| nc localhost 2181:查看当前ip端口连接到服务器的客户端信息

echo envi| nc localhost 2181:查看当前ip端口环境变量

mntr:健康信息

wchs:watch信息

4lw.commands.whitelist=*:开启所有四字命令,修改zookeeper/conf/zoo.cfg文件,加载最后一行,重启

wchc:watch节点

wchp:watch路径

7. 集群

7.1选举模式:

master节点down机器,子节点会竞争,有一个子节点成为master节点,若开始的master节点恢复,则成为子节点

7.2伪分布式集群搭建

  1. 在 zookeeper/conf/zoo.cfg中添加:

server.1=192.168.107.128:2888:3888

server.2=192.168.107.128:2889:3889

server.3=192.168.107.128:2890:3890

说明:2888端口(集群中同步数据的端口)、3888端口(选举模式下选举端口)

  1. 修改1中的dataDir=/usr/local/zookeeper/dataDir,并在对应目录下创建myid文件
  2. 将zookeeper文件复制两份,命名:zookeeper02、zookeeper03

cp zookeeper zookeeper02 -rf

cp zookeeper zookeeper03 -rf

  1. 修改zookeeper02、zookeeper03中重复2步骤:并将dataDir改为自己目录、改clientPort
  2. 启动三个zookeeper的服务端:./zkServer.sh start
  3. 客户端连接服务端:./zkCli.sh -server localhost:2181 更改节点,在连接其他服务端,可查看到节点已经更改 即:同步。

7.3真分布式集群搭建

1、准备三台服务器,为了区分zookeeper,分别命名为:zookeeper、zookeeper_c01、zookeeper_c02, ip分别为:

CeantOS64(zookeeper):192.168.107.128

CeantOS64_clon01(zookeeper_c01):192.168.107.130

CeantOS64_clon02(zookeeper_c02):192.168.107.131

2、分别在三台服务气的 zookeeper/conf/zoo.cfg中添加:

server.1=192.168.107.128:2888:3888

server.2=192.168.107.130:2888:3888

server.3=192.168.107.131:2888:3888

其中clientPort都设置为2181,dataDir改为各自的目录,分别在各自dataDir对应的目录下创建myid文件夹,值分别为1、2、3

3、启动三台zookeeper服务,并客户端连接,在任意服务器创建、修改删除zNode都会同步到其他机器

4、查看主从节点:./zkServer.sh status

8.Java客户端连接zookeeper服务

8.1会话重连:

/**

*连接服务端

*@param zkServerPath:zk服务端地址端口,例如192.168.1.1:2181

*@param timeout:超时时间,例如5s:5000

*@param ZKConnectSessionWatcher:watcher

**/

Zookeeper zk = new Zookeeper(zkServerPath,timeout,new ZKConnectSessionWatcher());

/**

*会话重连(根据sessionId和sessionPasswod)

*前三个参数同上

*@param sessionId:zk.getSessionId()

*@param sessionPasswd:zk.getSessionpasswd()

**/

Zookeeper zk = new Zookeeper(connectZkPath,timeout,ZKConnectSessionWatcher(),

sessionId,sessionPasswd);

8.2创建节点

/**

*同步方式创建节点

*@param path:节点路径

*@param data:节点数据byte[]

*@param cals:权限, Ids.属性

*@param CreateMode:CreateMode.属性(临时节点、持久节点、顺序节点)

**/

zk.create(path,data,acls,CreateMode.EPHEMERAL);

/**

*异步方式创建节点

*前四个参数与上面一样

*@param new CreateCallBack():回调函数

*@param ctx:创建节点后做的一些操作,如:返回信息({‘create’:’success’}”)、执行sql、消 息队列发送消息等

**/

zk.create(path,data,acls,CreateMode.PERSISTENT,new CreateCallBack(),ctx);

8.3修改节点

/**

*@param path :节点路径,如:/node

*@param data :节点数据byte[],如:”nodeData”.getBytes()

*@param version :版本号(相当于乐观锁,get /  后显示的dataVersion

* @return Stat :执行之后显示的信息,与get / 返回的信息一致

**/

Stat status = zk.setData(path,data,version);

异步与8.2类似

8.4删除节点

/**

*@param path :节点路径

*@param version : 版本号(相当于乐观锁,get /  后显示的dataVersion

**/

zk.delete(path,version);

异步与8.2类似,同步方式无返回值,建议使用异步方式

8.5CountDownLatch

CountDownLatch:计数器、用于多线程(可暂停、继续)

.await():阻塞当前线程

.countDown():减1,当countDown的值为0时,await()才不阻塞

检查集群中各个中间件是否正常:正常,则启动,不正常,启动不了

8.6节点查询

State state = new State();

CountDownLatch countDown = new CountDownLatch (1);

/**

*@param path:节点路径

*@param b:是否注册watch事件

*@ state:状态,get /path 获得的信息

*@return bytes[]:节点值

**/

byte[] bytes = zk.getZookeeper().getData(String path,boolean b,State state);//异步方式参考8.2

countDown.await();//挂起线程不运行,直到countDown值为0,线程才开始运行

/**

*获取事件的监听方法

*EventType.属性:创建、删除、修改、修改子节点

**/

@override

public void process(WatchEvent event){

try{

if(event.getType == EventType.属性){

...

count.countDown();

}

}catch(...){

...

}

}

8.7子节点查询

查询父节点下的子节点

/**

*同步

*@param path:节点路径

*@param watch:是否开启watcher

*@return childList:子节点列表

**/

List<String> childList = zkServer.getZookeeper().getChildren(String path,boolean watch);

同8.6重写process方法

/**

*异步

*@前两个参数同上

*@param new ChildrenCallBack():类实现了ChildrenCallBack接口或者Children2CallBack(),重*写processResult()

*@return ctx:查询成功返回值

**/

List<String> childList = zkServer.getZookeeper().getChildren(String path,boolean watch,

new ChildrenCallBack(),Object ctx);

 

8.8判断节点是否存在

Stat stat = zk.getZookeeper().exist(String path,boolean watch);//与上面一样

stat==null?xx:xxx;

异步与上面一样

 

8.9自定义用户权限

List<ACL> acls = new ArrayList<ACL>();

Id id1 = new Id(“digest”,DigestAuthenticationProvider.generateDigest(id1:123456));//定义用户

Id id2 = new Id(“digest”,DigestAuthenticationProvider.generateDigest(id2:123456));user:pwd

acls.add(new ACL(Perms.ALL,id1));//用户设置权限

acls.add(new ACL(Perms.READ,id2));

acls.add(new ACL(Perms.DELETE | Perms.CREATE,id2));//用户设置多个权限

zk.createZKNode(String path,byte[] b,acls);//目录添加用户权限

//用户必须addAuthInfo后才能操作节点

zk.getZookeeper().addAuthInfo(“digest”,”id2:123456”.getBytes());//参数:schema,用户名:密码

zk.createZKNode(path/子节点,byte[] b,Ids.属性);//在添加自定义用户权限的节点下添加子节点

8.10 ip权限

List<ACL> aclsIp = new ArrayList<ACL>();

Id idIp = new Id(“ip”,”192.168.1.1”);//定义ip用户

aclsIp.add(new ACL(Perms.ALL,idIp));//ip用户添加权限

zk.createZKNode(String path,byte[] b,aclsIp);

//当前ip必须是定义的权限ip才能操作(即:ip为192.168.1.1的机器才能对节点操作)

zk.getZookeeper().setData(String path,byte[] b,int version);

Zookeeper节点增删改查与集群搭建(笔记)的更多相关文章

  1. zkCli的使用 常用的节点增删改查命令用法

    zkCli的使用 常用的节点增删改查命令用法 1. 建立会话  命令格式:zkCli.sh -timeout 0 -r -server ip:port ./zkCli.sh -server -time ...

  2. Zookeeper demo增删改查

    Zookeeper 的增删改查demo代码 public class SimpleZkClient { private static final String connectString = &quo ...

  3. SSM整合_年轻人的第一个增删改查_基础环境搭建

    写在前面 SSM整合_年轻人的第一个增删改查_基础环境搭建 SSM整合_年轻人的第一个增删改查_查找 SSM整合_年轻人的第一个增删改查_新增 SSM整合_年轻人的第一个增删改查_修改 SSM整合_年 ...

  4. DOM操作 JS事件 节点增删改查

    --------------------------习惯是社会的巨大的飞轮和最可贵的维护者.——威·詹姆斯 day 49 [value属性操作] <!DOCTYPE html><ht ...

  5. java中XML操作:xml与string互转、读取XML文档节点及对XML节点增删改查

    一.XML和String互转: 使用dom4j程式变得很简单 //字符串转XML String xmlStr = \"......\"; Document document = D ...

  6. 28.zookeeper单机(Standalones模式)和集群搭建笔记

    zookeeper单机(Standalones模式)和集群搭建: 前奏: (1).zookeeper也可以在windows下使用,和linux一样可以单机也可以集群,具体就是解压zookeeper-3 ...

  7. 25.redis集群搭建笔记

    ###Redis集群### 0.准备 软件: redis-3.0.0.gem redis-3.0.0.tar.gz#源码   1.安装ruby环境 redis基于ruby槽位计算,hash算法技术,k ...

  8. Redis集群搭建笔记

    系统为CentOS7,创建9001-9006 6个文件夹,复制 redis-server redis.conf 文件到6个新文件夹下 redis.conf文件配置如下: port 9001 daemo ...

  9. Zookeeper详解-伪分布式和集群搭建(八)

    说到分布式开发Zookeeper是必须了解和掌握的,分布式消息服务kafka .hbase 到hadoop等分布式大数据处理都会用到Zookeeper,所以在此将Zookeeper作为基础来讲解. Z ...

随机推荐

  1. 【原创】Linux基础之linux常用命令之文本替换

    linux常用命令之文本替换 1 vi vi test_file :%s/h/h1/g 注释:全文替换,将h替换为h1 :1,4s/h/h1/g 注释:将第1行到第4行的h替换为h1 :%s/\n/, ...

  2. 关于PHP上传文件时配置 php.ini 中的 upload_tmp_dir

    在<PHP 5.3 入门经典>9.6.3 的试一试中(P235),给出了一个上传文件的例子,这里的文件格式为jpeg图片(image/jpeg).如果之前未配置 php.ini 中的 up ...

  3. python学习记录20181207

    1.python中函数指针的用法 直接把函数名赋值给变量,不需要加上()和形参 如: def add(num1,num2): return num1+num2 fun = add 2.打印输出列表需要 ...

  4. iOS -- Effective Objective-C 阅读笔记 (6)

    1: 在 既有类中使用 关联对象存放自定义数据 有时候需要在对象中存放相关信息, 这是我们经常会从对象所属的类中继承一个子类, 然后改用这个子类对象, 然而并非所有的情况下都能这么做,  有时候类的实 ...

  5. Sass 增强语法的样式表

    功能: 完全兼容CSS3 相对CSS,扩展了变量.嵌套和mixins 对控制颜色和其他值的非常有用的方法 高级功能,如库的直接控制 良好的格式,自定义输出 语法 对于Sass,有两种语法. 一种叫SC ...

  6. P1265 公路修建 最小生成树

    题目描述 某国有n个城市,它们互相之间没有公路相通,因此交通十分不便.为解决这一“行路难”的问题,政府决定修建公路.修建公路的任务由各城市共同完成. 修建工程分若干轮完成.在每一轮中,每个城市选择一个 ...

  7. win10下如何解决U盘连接上电脑但不显示的问题

    问题:U盘插上电脑之后,任务栏上有U盘连接上的显示,但是在磁盘符和U盘管理器上没有它的显示. 方法: 1.在任务栏上点击win图标,再点击“设置”(或直接使用快捷键win+i)进入到win10下的“设 ...

  8. Selenium切换窗口,警告框处理,调用JavaScript代码

    多窗口切换 在页面操作过程中有时候点击某个链接会弹出新的窗口,这时就需要主机切换到新打开的窗口上进行操作. WebDriver提供了switch_to.window()方法,可以实现在不同的窗口之间切 ...

  9. GA:GA优化BP神经网络的初始权值、阈值,从而增强BP神经网络的鲁棒性—Jason niu

    global p global t global R % 输入神经元个数,此处是6个 global S1 % 隐层神经元个数,此处是10个 global S2 % 输出神经元个数,此处是4个 glob ...

  10. PBRT笔记(5)——相机模型

    Camera class Camera { public: //实现相机在一定时间内进行特定的运动 AnimatedTransform CameraToWorld; //快门开/关数据,可以用于计算动 ...