zookeeper通常采用集群模式,由多台机器组成,保证zookeeper本身的高可用(死一部分还能继续干活)性,根据其采用的zab算法,集群中只要超过半数机器存活,集群即可继续工作。安装配置zookeeper(zookeeper由java编写)
前提条件:
win,linux都可以,(虚拟机装linux)此处选linux(因为服务器都在linux下跑)
jdk1.6以上。
安装secureCRT linux视频70min
下载安装zookeeper:
http://zookeeper.apache.org/releases.html
******************************************************************
linux常用命令:1.pwd:显示当前工作目录2.ls:查看当前工作目录内容
3.cd:改变当前工作目录
1.虚拟机安装,linux系统在虚拟机上的安装(linux学习Unit01上午55min)
2.secureCRTV5.1或Xshell连接远程云主机/本地虚拟机
******************************************************************
zookeeper启动模式 把zoo-sample.cfg改成zoo.cfg
1.单机模式:在zoo.cfg中只配置一个server.id就是单机模式,单机模式只用在测试zookeeper是否安装成功
2.伪集群模式:在zoo.cfg中配置多个server.id,其中ip都是当前机器
而端口各不相同,启动时就是伪集群模式,一台机器模拟出多台机器。
3.集群模式:多台机器各自配置,由多台真实计算机组成。在zoo.cfg中配置。
关闭网络防火墙:service iptables stop
把ip地址和host名绑定的修改:vim /etc/hosts中设定,把ip和hadoop01等进行绑定
1.安装jdk->2.安装zookeeper->3.配置zookeeper(bin和conf比较重要,多在此两个文件中配置)
/tmp/是linux系统的临时文件夹,里面放临时文件,比如系统自动清理的时候会出现自动清除tmp中文件。
新建work文件夹,在zoo.cfg中配置:如果三台机器则如以下配置,2888代表投票端口☆,3888代表各计算机的传输端口☆。
server.1=hadoop01:2888:3888
server.2=hadoop02:2888:3888
server.3=hadoop03:2888:3888
dataDir=/root/work/zookeeper-3.4.7/tmp
此种配置方式为真集群模式。在/root/work/zookeeper-3.4.7/tmp中编辑vim myid文件,写入1,指定该机器是server.1。
在第二台机器中安装一遍第一台机器的过程。
第三台机器不用再安装一遍,用scp(远程拷贝)命令,把安装jdk和zookeeper的work文件copy到第三台机器。
copy完文件后,需要更改部分配置文件。。。
配置完zookeeper启动zookeeper,进入zookeeper中的bin文件夹,执行./zkServer.sh start文件
然后再在第二台机器上启动./zkServer.sh,然后再启动第三台,然后查看三台机器状态:./zkServer.sh status
zookeeper的使用:
一)、shell脚本下的zookeeper操作。
启动zookeeper:./zkServer.sh start,然后执行连接hadoop02服务器:./zkCli.sh -server hadoop02:2181
2181是客户端连接过来的端口。简单的操作直接:./zkCli.sh。
进入%ZK_HOME%/bin,执行zkCli.sh [-server ip:port] #如不指定,则连接本机
创建:create [-s] [-e] path data [acl] #创建数据解读(znode)
其中-s表示顺序节点,-e表示临时节点,两个都不加则视持久节点,acl指定权限控制,不赋值则不进行任何权限控制。什么都不写就是普通持久节点。
例子:创建/zk-book其中数据为123:Create /zk-book 123
列出:ls path [watch] #列出所有数据节点:ls /
获取: get path [watch],列出 /zk-book中的数据:get /zk-book
更新: set path data [version] --data 为要更新的内容 version指定要基于哪个版本的数据不允许跨级创建,创建时候需要指定创建的数据,不可以删除非空的文件夹。
jps:查看当前有哪些JVM的进程状态的命令。(它不是linux的命令,是java提供的命令)
二)、java API下的操作。
1)导入zookeeper相关的包。
2)创建会话:
Zookeeper(String connetString, int sessionTimeout, Watcher watcher);
Zookeeper(String connetString, int sessionTimeout, Watcher watcher, boolean canBeReadOnly);
Zookeeper(String connetString, int sessionTimeout, Watcher watcher, long session, byte[] sessionPasswd);
Zookeeper(String connetString, int sessionTimeout, Watcher watcher, long session, byte[] sessionPasswd, boolean canBeReadOnly);
参数说明:
connectString -- host:port[,host:port][basePath] 指定的服务器列表,多个host:port之间用英文逗号分隔,还可以选择的指定一个基路径,如果指定了一个基路径,则所有后续操作基于这个基路径进行。用逗号指定多个地址。
sessionTimeOut -- 会话超时时间,以毫秒为单位。客户端和服务器端之间的选择通过心跳包进行维系,如果心跳包超过这个指定时间则认为会话超时失效。
watcher -- 指定默认观察者,如果为null标识不需要观察者。指定的观察者参数,当我们连接状态变化,会通知watcher这个参数。这个通知将会在任何时间点到来。
canBeReadOnly -- 是否支持只读服务。只当一个服务器失去过半连接后不能再进行写入操作时,是否继续支持读支持读取操作。
sessionId,SessionPassword -- 会话编号,会话密码,用来实现会话恢复。
☆注意:整个创建会话的过程是异步的,欧早方法会在初始化连接后即返回,并不代表真正建立好了一个会话,此时会话处于"CONNECTING"状态。
☆注意:当会话真正创建起来后,服务器会发送事件通知给客户端,只有客户端获取这个通知后,会话才真正建立。
3)创建节点:
String create(final String path, byte data[],List<ACL> acl, CreateMode createMode)//同步方式创建,阻塞式
void create(final String path, byte data[], List<ACL> acl, CreateMode createMode, StringCallback cb, Object ctx);//异步方式创建,非阻塞式
参数说明:
path 要创建的数据节点的路径
data [] 节点创建时初始数据内容
acl 节点acl安全策略
createMode 创建模式
PERSTSTENT 持久普通节点
PERSTSTENT_SEQUENTIAL 持久顺序节点
EPHEMERAL 临时节点
EPHEMERAL_SEQUENTIAL 临时顺序节点
cb 回调接口
ctx 传递对象,用来在回调方法中使用,通常是个上下午对象
☆注意:不支持递归创建,即不能在无父节点的情况下创建子节点,尝试创建已存在的节点将失败并抛出异常
☆注意:在不需要进行任何权限控制时,只需传入Ids.OPEN_ACL_UNSAFE即可。
4)删除节点:
public void delete(final String path, int version)//同步方式创建,阻塞式
public void delete(final String path,int version, VoidCallback cb, Object ctx)//异步方式创建,非阻塞式
☆注意:无法排除存在子节点的节点(跟linux系统中删除文件夹一个道理,如果文件夹中还有其它子文件夹无法直接删除),即如果要删除一个节点,必须先删除其所有子节点。
5)读取数据:
getChildren
//同步方式
List<String> getChildren(final String path, Watcher watcher)
List<String> getChildren(String path, boolean watcher)
List<String> getChildren(final String path, Watcher watcher, Stat stat)
List<String> getChildren(final String path, boolean watcher, Stat stat)
//异步方式
void getChildred(final String path, Watcher watcher, ChildrenCallback cb, Object ctx)
void getChildred(String path, boolean watcher, ChildrenCallback cb, Object ctx)
void getChildred(final String path, Watcher watcher, Children2Callback cb2, Object ctx)
void getChildred(String path, boolean watcher, Children2Callback cb2, Object ctx)
参数说明:
path:要创建的数据节点的路径
watcher:观察者,一旦在本子节点获取之后,子节点列表发生变更,服务器端向客户端发送信息,触发watcher中的回调。注意,仅仅是通知而已。
watch:表名是否需要注册一个Watcher,为true则通知默认到默认watcher,如果为false则不使用
cb:回调函数 ctx:上下文对象
stat 指定数据节点的状态信息。用法是在接口中传入一个旧的stat变量,该stat变量会在方法执行过程中,被来自服务端响应的新stat对象替换。
NIO总结(七)--zookeeper
最新推荐文章于 2023-04-20 12:04:42 发布