Zookeeper
网站:hadoop.apache.org
Storm (速度最快),spark ,yarn三个分布式计算框架
Zookeeper中有80%是读取数据,20%是写入数据
下载地址:http://zookeeper.apache.org/,其中的alpha与beta都是不稳定版,下载成功解压后找到bin目录,其中的zkServer.cmd和zkCli.cmd分别是电脑版的服务端与客户端,双击可能运行不成功,因为没有配置文件,在conf目录下有个zoo_sample.cfg文件,将它拷贝一份并改名为zoo.cfg,再次双击其中的服务端,即可成功。
详解配置文件:
tickTime:zk中的一个时间单位,心跳的时间间隔
initLimit=10:初始化同步数据花费的时间,10个tickTime
syncLimit=5:leader和follower相互发送心跳检测对方失效的时间间隔,5个tickTime。
clientPort=2181:端口
dataDir:数据文件的储存位置,默认存在磁盘
maxClientCnxns=60:最大的客户端连接
Zk保证高可用的原理:
Zookeeper是一个数据库,是一个使用树状结构存储结构的数据库,可以拥有高可用的集群,机器分为两种角色leader+follower。Leader负责写入,follower负责分担读的压力,一个集群只有一个leader通过选举算法来实现,必须确保机器个数为2n+1个,集群中的所有机器都参与选举,票数最高的机器成为leader,leader写入的数据通过paxos算法,将所有数据同步。
Zookeeper的结构:
树结构包含多个znode每个节点都可以有一个值和多个节点,根节点是“/”
Zookeeper有三种znode:
1:永久节点 数据被持久化 用户不调用删除 不会删除
2:临时节点 客户端连接时才保留数据,客户端断开数据被删除 注册中心master/slave
3:顺序节点 用于抢票和秒杀,它有分布式主键,
具体命令(在windows下)
可以在doc下操作,也可以在zk的客户端下操作
zkCli -server ip:端口 连接zk的服务端,在doc下(前提是在path下配置了zk的home)
1. 显示根目录下、文件: ls / 使用 ls 命令来查看当前 ZooKeeper 中所包含的内容
2. 显示根目录下、文件: ls2 / 查看当前节点数据并能看到更新次数等数据
3. 创建文件,并设置初始内容: create /zk "test" 创建一个新的 znode节点“ zk ”以及与它关联的字符串
-s 创建一个顺序节点 -e创建一个临时节点
4. 获取文件内容: get /zk 确认 znode 是否包含我们所创建的字符串
5. 修改文件内容: set /zk "zkbak" 对 zk 所关联的字符串进行设置
6. 删除文件: delete /zk 将刚才创建的 znode 删除
7. 退出客户端: quit
8. 帮助命令: help
Zookeeper常用四字命令:
ZooKeeper 支持某些特定的四字命令字母与其的交互。它们大多是查询命令,用来获取 ZooKeeper 服务的当前状态及相关信息。用户在客户端可以通过 telnet 或 nc 向 ZooKeeper 提交相应的命令
1. 可以通过命令:echo stat|nc 127.0.0.1 2181 来查看哪个节点被选择作为follower或者leader
2. 使用echo ruok|nc 127.0.0.1 2181 测试是否启动了该Server,若回复imok表示已经启动。
3. echo dump| nc 127.0.0.1 2181 ,列出未经处理的会话和临时节点。
4. echo kill | nc 127.0.0.1 2181 ,关掉server
5. echo conf | nc 127.0.0.1 2181 ,输出相关服务配置的详细信息。
6. echo cons | nc 127.0.0.1 2181 ,列出所有连接到服务器的客户端的完全的连接 / 会话的详细信息。
7. echo envi |nc 127.0.0.1 2181 ,输出关于服务环境的详细信息(区别于 conf 命令)。
8. echo reqs | nc 127.0.0.1 2181 ,列出未经处理的请求。
9. echo wchs | nc 127.0.0.1 2181 ,列出服务器 watch 的详细信息。
10. echo wchc | nc 127.0.0.1 2181 ,通过 session 列出服务器 watch 的详细信息,它的输出是一个与 watch 相关的会话的列表。
11. echo wchp | nc 127.0.0.1 2181 ,通过路径列出服务器 watch 的详细信息。它输出一个与 session 相关的路径。
在eclipse中安装zookeeper的插件
eclipse插件更新地址:http://www.massedynamic.org/eclipse/updates/
在eclipse中的玩法:
先加依赖(maven中):
<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
<version>0.10</version>
</dependency>
其次创建一个连接,需要注意的是,在客户端创建的znode的值在eclipse中取出是会报错,因为在客户端储存的数据类型是byte[],所以在eclipse中取出时需要将ZkSerializer换成 BytesPushThroughSerializer(),
ZkClient zkClient = new ZkClient(zkServers, sessionTimeout, connectionTimeout, zkSerializer)
例:
ZkClient zkClient=new ZkClient(url,10000,5000,new BytesPushThroughSerializer());
参数详解:
参数1:zkServers,zookeeper服务器地址,用“,”分隔。
参数2:sessionTimeout,会话超时时间,单位毫秒,默认为30000ms。
参数3:connectionTimeout,连接超时时间。
参数4:IZkConnection接口的实现类。
参数5:zkSerializer,自定义序列化实现。
Eclipse中的一些操作
创建一个永久节点,如
zkClient.createPersistent("/db/driverClass","com.mysql.jdbc.Driver");
创建一个临时节点,如
zkClient.createEphemeral("/user/zs", "gril");
创建一个永久顺序节点,如
zkClient.create("/user/ls", "boy",CreateMode.PERSISTENT_SEQUENTIAL)
创建一个临时顺序节点,如
zkClient.create("/user/ls","boy",CreateMode.EPHEMERAL_SEQUENTIAL);
获取节点值:
zkClient.readData("/db/driverClass")
重新设置节点值:
zkClient.writeData("/db/driverClass","oracle.jdbc.OracleDriver");
Zookeeper的集群配置,可以参考这位前辈:
http://blog.youkuaiyun.com/liaomin416100569/article/details/71642091