当前位置: 首页 > Linux

动物园管理员基础

时间:2023-04-06 11:20:07 Linux

1.Zookeeper简介ZooKeeper致力于提供一种高性能、高可用、分布式协调服务,具有严格的顺序访问控制能力。它是由Yahoo创建的,是Google的Chubby的开源实现,也是Hadoop和Hbase的重要组成部分。2.设计目标是简单的数据结构:共享树结构,类似于文件系统,存储在内存中;可搭建集群:为避免单点故障,可3-5台机器组成一个集群,一半以上的机器在正常工作时可以对外提供服务;顺序访问:对于每个读请求,zk都会分配一个全局唯一的增量编号,可用于实现高级协调服务;高性能:基于内存操作,服务于非事务性请求,适用于读操作业务场景。3个zk集群可以达到13wQPS;3、应用场景数据发布订阅(以下均基于数据发布订阅)负载均衡命名服务Master选举集群管理配置管理分布式队列分布式锁4、zookeeperbasiclinux下安装zookeeper:目录结构:bin→storesystem脚本conf→存储配置文件contrib→zk附加功能支持dist-maven→maven仓库文件docs→zk文档lib→依赖第三方库recipes→经典场景示例代码src→zk源码其中bin和conf是两个非常重要的目录并且经常被使用。bin目录:其中zkServer为服务器,启动后默认端口为2181。zkCli是命令行客户端conf目录:这里就不一一列举了,具体可以参考资料。Watcher、ACL权限控制、集群角色了解,其中需要掌握的重点是数据节点和Watcher。5.1Session客户端和服务端之间的会话连接本质上是一个TCP长连接,通过它可以进行心跳检测和数据传输;会话(session)是zookepper的一个非常重要的概念,客户端和服务器之间的任何交互都与会话有关。会话状态图:Zk客户端和服务端连接成功后,创建一个会话。ZK会话在整个运行期间的生命周期中会在不同的会话状态之间切换。这些状态包括:CONNECTING、CONNECTED、RECONNECTING、RECONNECTED、CLOSE一旦客户端开始创建Zookeeper对象,客户端状态将变为CONNECTING状态。同时,客户端开始尝试连接服务器。连接成功后,客户端状态变为CONNECTED。通常,由于断开连接或其他原因,客户端与服务端断开连接,Zookeeper客户端会自动重连服务,同时客户端状态再次变为CONNCTING,直到重新连接,状态再次变为CONNECTED。一般客户端的状态总是在CONNECTING和CONNECTED之间。但是,如果出现会话超时、权限检查、或者客户端主动退出程序等情况,客户端的状态会直接变为CLOSE状态。5.2ZK数据模型ZooKeeper的视图结构类似于标准的Unix文件系统,其中每个节点称为“数据节点”或ZNode,每个znode可以存储数据和挂载子节点,因此可以称为“树”。注意:创建节点时,必须设置一个值,否则节点创建不成功。在Zookeeper中,znode是一个路径类似于Unix文件系统的节点。可以从该节点存储或检索数据。客户端可以对znode进行增删改查,也可以注册一个watcher来监控znode的变化。5.3ZK节点类型节点类型非常重要,是项目实战的基础。A。Znode有两种:ephemeral(create-e/testlinshi/linshitest1client断开zk删除ephemeral类型节点,即linshi节点)persistent(持久)(create-p/testlinshi/linshitest2clientzk不删除persistent类型节点)b.znode有四种目录节点(默认是persistent,persistent)PERSISTENTPERSISTENT_SEQUENTIAL(persistentsequence/test0000000019)EPHEMERALEPHEMERAL_SEQUENTIAL当用-s参数创建znode是顺序节点时,会在znode名称后追加一个值。序号是由父节点c维护的一个单调递增的计数器。在分布式系统中,可以使用序号对所有事件进行全局排序,这样客户端就可以通过序号推断出事件发生的先后顺序。5.4Zookeeper节点状态属性如图5.5所示。ACL保证数据安全。比如查看znodeworldanyonecdrwa的ACL信息。这三个字段是ACL信息。第一个字段表示使用哪种机制,第二个id表示用户,permissions表示相关权限(如只读、读写、管理等),即schemepermissions。zookeeper提供了如下机制(schemes):world:它下面只有一个id,叫anyone,world:anyone代表任何人,zookeeper中对每个人有权限的节点是属于world:anyone的auth:没有需要id,只要通过认证的用户有权限即可(zookeeper支持kerberos认证,也支持用户名/密码形式的认证)digest:其对应的id为username:BASE64(SHA1(password)),需要通过username:password形式通过authenticationip:其对应的id为客户端的IP地址,设置时可以设置一个ip段,如ip:192.168.1.0/16,表示IP段机制匹配前16位是auth:addauthdigestusername:123456#需要先添加一个用户setAcl/testAcl-authauth:username:123456:crwa#然后就可以使用这个用户设置权限,设置auth机制getAcl/testAcl-auth#密码是密文形式存储机制是digest:create/testAcl-digest1123addauthdigestusername1:IkghJ5CIcrw6bRa3Zu2aSo2IblQ=#需要先添加用户setAcl/testAcl-digest1digest:username1:IkghJ5CIcrw6bRa3Zu2aSo2IblQ=:crwa#然后就可以使用了thisuser设置权限,设置Digest机制注意设置digest机制时密码为密文形式getAcl/testAcl-digest1#密码以密文形式存储,密文也可以通过Linux下命令:shell>java-Djava.ext.dirs=/soft/zookeeper-3.4.12/lib-cp/soft/zookeeper-3.4.12/zookeeper-3.4.12.jarorg.apache.zookeeper.server.auth.DigestAuthenticationProviderusername1:123456username1:123456->username1:IkghJ5CIcrw6bRa3Zu2aSo2IblQ=PermissionCREATE,READ,WRITE,DELETE,ADMIN是增删改查,管理权限,这5个权限简写为crwda(即:每个单词的首字母)CREATE(c):创建子节点的权限DELETE(d):删除节点的权限(删除当前节点下任意节点的权限)READ(r):读取节点数据的权限WRITE(w):修改节点数据的权限ADMIN(a):设置子节点权限的权限快照数据,一个是dataLogDir,存放事务日志文件查看快照文件:查看日志文件,使用另一个类LogFormatterjava-cp/usr/local/zookeeper-3.4.14/zookeeper-3.4.14.jar:/usr/local/zookeeper-3.4.14/lib/slf4j-api-1.7.25.jarorg。apache.zookeeper.server.LogFormatter日志.14