zookeeper是一个使用树形结构存储数据的数据库,可以拥有高可用集群
它分为leader和follower两种角色,leader负责写入数据,follower负责分担读取数据的压力
一个集群中只有一个leader,它是通过选举算法来实现,机器数必须为2n+1台
集群中的所有机器都参与选举 ,票数最高的机器成为leader,
leader写入的数据通过paxos算法同步到其他机器
zookeeper有三种znode:
1.永久节点 数据持久化 用户不调用删除 永久保存
2.临时节点 客户端连接时保留数据 客户端断开 数据被删除
3.顺序节点 每个被添加的数据都会加上一个编号,应用:抢票,秒杀,分布式主键
zookeeper下载:http://mirrors.hust.edu.cn/apache/zookeeper/
下载后解压,进入config目录复制文件zoo_sample.cfg,修改文件名为zoo.cfg
该文件配置内容:
# 心跳的时间间隔
tickTime=2000
# 初始化同步数据花费的时间 10*tickTime
initLimit=10
# leader和follower之间互相发送心跳 检测对方失效的时间间隔 5*tickTime
syncLimit=5
# 数据文件的存储目录
dataDir=E:\1611\zookeeper\data
# 连接端口
clientPort=2181
# 默认客户端连接的最大数量
#maxClientCnxns=60
#
# Be sure to read the maintenance section of the
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1
zookeeper配置:http://zookeeper.apache.org/doc/current/zookeeperStarted.html
客户端创建znode:首节点需要添加值
使用zkclient连接创建znode:首节点可以添加值也可以不添加
创建maven项目zookeeper-client
pom.xml添加依赖:zkclient
<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
<version>0.10</version>
</dependency>
public class ZkpTest {
public static void main(String[] args) throws Exception {
String zkServers = "localhost:2181"; // ip:端口,多台机器之间用逗号(,)隔开
ZkClient zkClient = new ZkClient(zkServers, 10000, 5000);
//写入(修改)数据和读取数据的方法:writeData(path, object)---zkClient.readData(path)
// 当/user节点不存在事就创建
if (!zkClient.exists("/user")) {
// 创建一个永久节点/user
zkClient.createPersistent("/user");
// 创建两个顺序节点/user/ls 返回值是顺序节点的真实的名字
String znodeName = zkClient.create("/user/ls", "boy", CreateMode.PERSISTENT_SEQUENTIAL);
String znodeName1 = zkClient.create("/user/ls", "boys", CreateMode.PERSISTENT_SEQUENTIAL);
}
// 创建一个零时节点/user/zs
zkClient.createEphemeral("/user/zs", "girl");
// 监控/user/zs节点
zkClient.subscribeDataChanges("/user/zs", new IZkDataListener() {
// 当/user/zs节点被删除时触发
public void handleDataDeleted(String arg0) throws Exception {
}
// 当/user/zs节点被修改时触发
public void handleDataChange(String path, Object data) throws Exception {
System.out.println(path + "---" + data);
}
});
// 与server保持连接
while (true) {
TimeUnit.SECONDS.sleep(5);
}
}
}
public class ZkModify {
public static void main(String[] args) {
String zkServers="localhost:2181";
ZkClient zkClient=new ZkClient(zkServers, 10000, 5000);
zkClient.writeData("/user/zs", "boy");
}
}
它分为leader和follower两种角色,leader负责写入数据,follower负责分担读取数据的压力
一个集群中只有一个leader,它是通过选举算法来实现,机器数必须为2n+1台
集群中的所有机器都参与选举 ,票数最高的机器成为leader,
leader写入的数据通过paxos算法同步到其他机器
zookeeper有三种znode:
1.永久节点 数据持久化 用户不调用删除 永久保存
2.临时节点 客户端连接时保留数据 客户端断开 数据被删除
3.顺序节点 每个被添加的数据都会加上一个编号,应用:抢票,秒杀,分布式主键
zookeeper下载:http://mirrors.hust.edu.cn/apache/zookeeper/
下载后解压,进入config目录复制文件zoo_sample.cfg,修改文件名为zoo.cfg
该文件配置内容:
# 心跳的时间间隔
tickTime=2000
# 初始化同步数据花费的时间 10*tickTime
initLimit=10
# leader和follower之间互相发送心跳 检测对方失效的时间间隔 5*tickTime
syncLimit=5
# 数据文件的存储目录
dataDir=E:\1611\zookeeper\data
# 连接端口
clientPort=2181
# 默认客户端连接的最大数量
#maxClientCnxns=60
#
# Be sure to read the maintenance section of the
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1
zookeeper配置:http://zookeeper.apache.org/doc/current/zookeeperStarted.html
客户端创建znode:首节点需要添加值
使用zkclient连接创建znode:首节点可以添加值也可以不添加
创建maven项目zookeeper-client
pom.xml添加依赖:zkclient
<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
<version>0.10</version>
</dependency>
public class ZkpTest {
public static void main(String[] args) throws Exception {
String zkServers = "localhost:2181"; // ip:端口,多台机器之间用逗号(,)隔开
ZkClient zkClient = new ZkClient(zkServers, 10000, 5000);
//写入(修改)数据和读取数据的方法:writeData(path, object)---zkClient.readData(path)
// 当/user节点不存在事就创建
if (!zkClient.exists("/user")) {
// 创建一个永久节点/user
zkClient.createPersistent("/user");
// 创建两个顺序节点/user/ls 返回值是顺序节点的真实的名字
String znodeName = zkClient.create("/user/ls", "boy", CreateMode.PERSISTENT_SEQUENTIAL);
String znodeName1 = zkClient.create("/user/ls", "boys", CreateMode.PERSISTENT_SEQUENTIAL);
}
// 创建一个零时节点/user/zs
zkClient.createEphemeral("/user/zs", "girl");
// 监控/user/zs节点
zkClient.subscribeDataChanges("/user/zs", new IZkDataListener() {
// 当/user/zs节点被删除时触发
public void handleDataDeleted(String arg0) throws Exception {
}
// 当/user/zs节点被修改时触发
public void handleDataChange(String path, Object data) throws Exception {
System.out.println(path + "---" + data);
}
});
// 与server保持连接
while (true) {
TimeUnit.SECONDS.sleep(5);
}
}
}
public class ZkModify {
public static void main(String[] args) {
String zkServers="localhost:2181";
ZkClient zkClient=new ZkClient(zkServers, 10000, 5000);
zkClient.writeData("/user/zs", "boy");
}
}