在CentOS7部署zookeeper集群以及简单API使用
2016-04-12 16:18
941 查看
一.部署zookeeper集群
zookeeper是一个针对大型分布式系统的协调系统,提供的功能有统一名称服务、分布式同步等。
1.上传zk安装包
2.解压 tar -xzvf zookeeper-3.4.6.tar.gz -C app/
3.配置(先在一台节点上配置)
3.1添加一个zoo.cfg配置文件
进入配置文件目录: cd /home/koushengrui/app/zookeeper-3.4.6/conf/
复制现有的配置文件模板,并命名为zoo.cfg:cp zoo_sample.cfg zoo.cfg
3.2修改配置文件(zoo.cfg)
dataDir=/home/koushengrui/app/zookeeper-3.4.6/data
server.1=server1:2888:3888
server.2=server2:2888:3888
server.3=server3:2888:3888
其中2888是leader与follower通信的端口,3888是选举通信的端口。
3.3在dataDir目录中创建一个myid文件,里面内容是server.N中的N(server.2里面内容为2)
echo "1" > myid
3.4将配置好的zk拷贝到其他节点
scp -r /home/koushengrui/app/zookeeper-3.4.6 server2:/home/koushengrui/app/ ,这里不要加sudo
scp -r /home/koushengrui/app/zookeeper-3.4.6 server3:/home/koushengrui/app/
3.5注意:在其他节点上一定要修改myid的内容
在server2应该将myid的内容改为2 (echo "2" > myid)
在server3应该讲myid的内容改为3 (echo "3" > myid)
4.启动集群
分别启动zk
./zkServer.sh start
这个时候若严格按照上面步骤部署,且已经关闭防火墙的话(很重要,在防火墙这里吃过大亏,如何关闭centos7的防火墙在之前博客有细讲),则zookeeper应该已经正常启动起来了,用下面命令看各节点的身份(是leader还是follower):
./zkServer.sh status
二.ZooKeeper简单API的使用
zookeeper的每个节点称为znode,znode除了本身能够包含一部分数据外,还能拥有子节点。znode的数据主要是协调的数据,如状态、配置等信息,当znode的数据发生变化或者子节点发生变化时,基于Watcher机制,会发出相应的通知给订阅其状态变化的客户端。
ZooKeeper有4个构造器:
ZooKeeper(String connectString, int sessionTimeout, Watcher watcher)
ZooKeeper(String connectString, int sessionTimeout, Watcher watcher, boolean canBeReadOnly)
ZooKeeper(String connectString, int sessionTimeout, Watcher watcher, long sessionId, byte[] sessionPasswd)
ZooKeeper(String connectString, int sessionTimeout, Watcher watcher, long sessionId, byte[] sessionPasswd, boolean canBeReadOnly)
可见,最简单的是第一种,要传3个参数。
如:
ZooKeeper zk = new ZooKeeper("192.168.2.128:2181,192.168.2.129:2181,192.168.2.130:2181", 2000, null);第一个参数是zookeeper服务器的地址,ip:port形式,port是在zoo.cfg中配置的,默认是2181,比较推荐的做法是传入zookeeper集群中所有节点的地址以逗号拼成的字符串,如192.168.2.128:2181,192.168.2.129:2181,192.168.2.130:2181。因为如果只写单个节点的地址,如192.168.2.128:2181,万一该节点刚好掉线了的话,之后调用zookeeper实例的方法时就会报错。第二个参数是会话超时时间,以毫秒为单位,超过了这个时间还没有连上zookeeper集群的话就会报错,注意不能传0。第三个参数是Watcher实例(Watcher是个接口,只有一个process(WatchedEvent
event)方法,需要我们写一个Watcher接口的实现类,匿名类也可以),如果不为null的话,则之后调用byte[] getData(String path, boolean watch, Stat stat)或者getChildren(String path, boolean watch)方法时,如果第二个传入的是true,则就会将此Watcher实例注册为监听。
注意ZooKeeper的Watcher是一次性的,主要触发了,watcer就不再监听了,要想继续监听,需要重新做注册,可以在process()方法中注册监听,这样在触发了watcher之后又立刻注册监听,就可以达到一直监听的目的。
示例:
public class TestCyclicWatcher {
static ZooKeeper zk = null;
static String path = "/test";
static {
try {
zk = new ZooKeeper("192.168.153.128:2181", 5000, new Watcher() {
public void process(WatchedEvent event) {
try {
zk.getData(path, true, null);
if (event.getType() != EventType.None) {
System.out.println(event.getPath());
System.out.println(event.getType());
System.out.println(event.getState());
}
} catch (Exception e) {
e.printStackTrace();
}
}
});
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) throws Exception {
System.out.println(new String(zk.getData(path, true, null)));
Thread.sleep(Integer.MAX_VALUE);
}
}
zookeeper是一个针对大型分布式系统的协调系统,提供的功能有统一名称服务、分布式同步等。
1.上传zk安装包
2.解压 tar -xzvf zookeeper-3.4.6.tar.gz -C app/
3.配置(先在一台节点上配置)
3.1添加一个zoo.cfg配置文件
进入配置文件目录: cd /home/koushengrui/app/zookeeper-3.4.6/conf/
复制现有的配置文件模板,并命名为zoo.cfg:cp zoo_sample.cfg zoo.cfg
3.2修改配置文件(zoo.cfg)
dataDir=/home/koushengrui/app/zookeeper-3.4.6/data
server.1=server1:2888:3888
server.2=server2:2888:3888
server.3=server3:2888:3888
其中2888是leader与follower通信的端口,3888是选举通信的端口。
3.3在dataDir目录中创建一个myid文件,里面内容是server.N中的N(server.2里面内容为2)
echo "1" > myid
3.4将配置好的zk拷贝到其他节点
scp -r /home/koushengrui/app/zookeeper-3.4.6 server2:/home/koushengrui/app/ ,这里不要加sudo
scp -r /home/koushengrui/app/zookeeper-3.4.6 server3:/home/koushengrui/app/
3.5注意:在其他节点上一定要修改myid的内容
在server2应该将myid的内容改为2 (echo "2" > myid)
在server3应该讲myid的内容改为3 (echo "3" > myid)
4.启动集群
分别启动zk
./zkServer.sh start
这个时候若严格按照上面步骤部署,且已经关闭防火墙的话(很重要,在防火墙这里吃过大亏,如何关闭centos7的防火墙在之前博客有细讲),则zookeeper应该已经正常启动起来了,用下面命令看各节点的身份(是leader还是follower):
./zkServer.sh status
二.ZooKeeper简单API的使用
zookeeper的每个节点称为znode,znode除了本身能够包含一部分数据外,还能拥有子节点。znode的数据主要是协调的数据,如状态、配置等信息,当znode的数据发生变化或者子节点发生变化时,基于Watcher机制,会发出相应的通知给订阅其状态变化的客户端。
ZooKeeper有4个构造器:
ZooKeeper(String connectString, int sessionTimeout, Watcher watcher)
ZooKeeper(String connectString, int sessionTimeout, Watcher watcher, boolean canBeReadOnly)
ZooKeeper(String connectString, int sessionTimeout, Watcher watcher, long sessionId, byte[] sessionPasswd)
ZooKeeper(String connectString, int sessionTimeout, Watcher watcher, long sessionId, byte[] sessionPasswd, boolean canBeReadOnly)
可见,最简单的是第一种,要传3个参数。
如:
ZooKeeper zk = new ZooKeeper("192.168.2.128:2181,192.168.2.129:2181,192.168.2.130:2181", 2000, null);第一个参数是zookeeper服务器的地址,ip:port形式,port是在zoo.cfg中配置的,默认是2181,比较推荐的做法是传入zookeeper集群中所有节点的地址以逗号拼成的字符串,如192.168.2.128:2181,192.168.2.129:2181,192.168.2.130:2181。因为如果只写单个节点的地址,如192.168.2.128:2181,万一该节点刚好掉线了的话,之后调用zookeeper实例的方法时就会报错。第二个参数是会话超时时间,以毫秒为单位,超过了这个时间还没有连上zookeeper集群的话就会报错,注意不能传0。第三个参数是Watcher实例(Watcher是个接口,只有一个process(WatchedEvent
event)方法,需要我们写一个Watcher接口的实现类,匿名类也可以),如果不为null的话,则之后调用byte[] getData(String path, boolean watch, Stat stat)或者getChildren(String path, boolean watch)方法时,如果第二个传入的是true,则就会将此Watcher实例注册为监听。
注意ZooKeeper的Watcher是一次性的,主要触发了,watcer就不再监听了,要想继续监听,需要重新做注册,可以在process()方法中注册监听,这样在触发了watcher之后又立刻注册监听,就可以达到一直监听的目的。
示例:
public class TestCyclicWatcher {
static ZooKeeper zk = null;
static String path = "/test";
static {
try {
zk = new ZooKeeper("192.168.153.128:2181", 5000, new Watcher() {
public void process(WatchedEvent event) {
try {
zk.getData(path, true, null);
if (event.getType() != EventType.None) {
System.out.println(event.getPath());
System.out.println(event.getType());
System.out.println(event.getState());
}
} catch (Exception e) {
e.printStackTrace();
}
}
});
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) throws Exception {
System.out.println(new String(zk.getData(path, true, null)));
Thread.sleep(Integer.MAX_VALUE);
}
}
相关文章推荐
- 在CentOS7部署zookeeper集群以及简单API使用
- 《Linux内核分析》读书笔记(四章)
- Linux特殊权限:SUID、SGID、SBIT
- Linux下后台执行脚本
- centos 5.8下搭建extmail服务的总结
- Linux下的Postfix邮件服务器
- linux线程资源回收方法
- centos+git+gitolite 安装和部署
- 【fsck】检查并修复linux文件系统
- linux基础学习之 ARM嵌入式第一个程序
- centos6 系统优化脚本
- 使用BASH编写Linux Shell脚本——1. Linux 介绍
- linux --> Linux变量之$#, $*, $@含义
- linux 发布脚本
- 使用Bash编写Linux Shell脚本-2.使用外壳语言
- LINUX IPTABLES 设定
- Centos7 安装mysql数据库
- 运维系列之二 Linux文件种类和扩展名
- Linux链接库四(多个库文件链接顺序问题)
- 使用Bash编写Linux Shell脚本-4.脚本初探