zookeeper

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");
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值