分布式设备管理怎么关

分布式设备管理怎么关,第1张

(1)解压为zookeepertar -xf -C /home/myuser/zookeeper/
复制zookeeper文件夹3份,分别重名名为zookeeperA,zookeeperB,zookeeperC。 并且创建数据快照以及日志存放文件夹,命名为zooA,zooB,zooC。 (2)编辑对应的zookeeper配置文件,复制zookeeperconf下zoo_samplecfg为zoocfgcd /home/myuser/zookeeperA/conf
cp zoo_samplecfg zoocfg  
(3)修改zoocfg# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored
# do not use /tmp for storage, /tmp here is just
# example sakes
dataDir=/home/myuser/zooA/data
# the port at which the clients will connect
clientPort=2181
# ZooKeeper server and its port no # ZooKeeper ensemble should know about every other machine in the ensemble # specify server id by creating 'myid' file in the dataDir # use hostname instead of IP address for convenient maintenance
server1=127001:2888:3888
server2=127001:2988:3988
server3=127001:2088:3088
#
# Be sure to read the maintenance section of the
# administrator guide before turning>tickTime:心跳时间,为了确保连接存在的,以毫秒为单位,最小超时时间为两个心跳时间
initLimit:多少个心跳时间内,允许其他server连接并初始化数据,如果ZooKeeper管理的数据较大,则应相应增大这个值
clientPort:服务的监听端口
dataDir:用于存放内存数据库快照的文件夹,同时用于集群的myid文件也存在这个文件夹里(注意:一个配置文件只能包含一个dataDir字样,即使它被注释掉了。)
dataLogDir:用于单独设置transaction log的目录,transaction log分离可以避免和普通log还有快照的竞争
syncLimit:多少个tickTime内,允许follower同步,如果follower落后太多,则会被丢弃。
(4)创建myid文件
cd /home/myuser/zooA/data
sudo sh -c 'echo "1" >> myid'  
其他文件夹类似创建myid文件,zookeeperB为2,zookeeperC为3
(5)启动zookeeper
cd /home/myuser/zookeeperA/bin
sudo sh  zkServersh start
查看zookeeper状态[root@weibo bin]# sh zkServersh status
JMX enabled by default
Using config: /home/weibo/zookeeperA/bin//conf/zoocfg
Mode: follower
启动OK,依次启动另外两台zookeeper,启动第一台zookeeper后,你可以观察bin下的zookeeperout可以看到报错,connection
refused,没有关系,zookeeper需要等待其他另个节点的加入,全部启动之后就正常了。
(6)客户端连接zookeeper
[root@weibo bin]# sh zkClish
Connecting to localhost:2181
2013-05-10 15:00:25,363 [myid:] - INFO  [main:Environment@100] - Client environment:zookeeperversion=345-1392090, built>configs:保存上传的配置文件信息
clusterstatejson:集群状态json
aliases:别名json
live_node:当solr服务器启动的时候,会注册到这里
overseer:保存shard信息
overseer_elect:节点选举
collections:所有的collection

ZooKeeper服务命令:

     在准备好相应的配置之后,可以直接通过zkServersh 这个脚本进行服务的相关 *** 作

1 启动ZK服务:       sh bin/zkServersh start

2 查看ZK服务状态: sh bin/zkServersh status

3 停止ZK服务:       sh bin/zkServersh stop

4 重启ZK服务:       sh bin/zkServersh restart

zk客户端命令

ZooKeeper命令行工具类似于Linux的shell环境,不过功能肯定不及shell啦,但是使用它我们可以简单的对ZooKeeper进行访问,数据创建,数据修改等 *** 作  使用 zkClish -server 127001:2181 连接到 ZooKeeper 服务,连接成功后,系统会输出 ZooKeeper 的相关环境以及配置信息。

命令行工具的一些简单 *** 作如下:

1 显示根目录下、文件: ls / 使用 ls 命令来查看当前 ZooKeeper 中所包含的内容

2 显示根目录下、文件: ls2 / 查看当前节点数据并能看到更新次数等数据

3 创建文件,并设置初始内容: create /zk "test" 创建一个新的 znode节点“ zk ”以及与它关联的字符串

4 获取文件内容: get /zk 确认 znode 是否包含我们所创建的字符串

5 修改文件内容: set /zk "zkbak" 对 zk 所关联的字符串进行设置

6 删除文件: delete /zk 将刚才创建的 znode 删除

7 退出客户端: quit

8 帮助命令: help

9rmr命令

删除节点命令,此命令与delete命令不同的是delete不可删除有子节点的节点,但是rmr命令可以删除,注意路径为绝对路径。

如rmr /zookeeper/znode

10 delquota命令

删除配额,-n为子节点个数,-b为节点数据长度。

如delquota –n 2,请参见listquota和setquota命令。

11printwatches命令

设置和显示监视状态,on或者off。

如printwatches on

listquota命令

显示配额。

如listquota /zookeeper

absolute path is/zookeeper/quota/zookeeper/zookeeper_limits

Output quota for /zookeepercount=2,bytes=-1

解释:

/zookeeper节点个数限额为2,长度无限额。

setAcl命令

设置节点Acl。

此处重点说一下acl,acl由大部分组成:1为scheme,2为user,3为permission,一般情况下表示为scheme:id:permissions。

其中scheme和id是相关的,下面将scheme和id一起说明。

scheme和id

world : 它下面只有一个id, 叫anyone, world:anyone代表任何人,zookeeper中对所有人有权限的结点就是属于world:anyone的

auth : 它不需要id, 只要是通过authentication的user都有权限(zookeeper支持通过kerberos来进行authencation, 也支持username/password形式的authentication)

digest : 它对应的id为username:BASE64(SHA1(password)),它需要先通过username:password形式的authentication

ip : 它对应的id为客户机的IP地址,设置的时候可以设置一个ip段,比如ip:19216810/16, 表示匹配前16个bit的IP段

super : 在这种scheme情况下,对应的id拥有超级权限,可以做任何事情(cdrwa)

permissions

CREATE (c): 创建权限,可以在在当前node下创建child node

DELETE (d): 删除权限,可以删除当前的node

READ (r): 读权限,可以获取当前node的数据,可以list当前node所有的child nodes

WRITE (w): 写权限,可以向当前node写数据

ADMIN (a): 管理权限,可以设置当前node的permission

综上,一个简单使用setAcl命令,则可以为:

setAcl /zookeeper/node1 world:anyone:cdrw

getAcl命令

获取节点Acl。

如getAcl /zookeeper/node1

'world,'anyone

: cdrwa

注:可参见setAcl命令。

sync命令

强制同步。

如sync /zookeeper

由于请求在半数以上的zk server上生效就表示此请求生效,那么就会有一些zk server上的数据是旧的。sync命令就是强制同步所有的更新 *** 作。

redo命令

再次执行某命令。

如redo 10

其中10为命令ID,需与history配合使用。

addauth命令

节点认证。

如addauth digest username:password,可参见setAcl命令 digest处。

使用方法:

一、通过setAcl设置用户名和密码

setAcl pathdigest:username:base64(sha1(password)):crwda

二、认证

addauth digest username:password

delete命令

删除节点。

如delete /zknode1

setquota命令

设置子节点个数和数据长度配额。

如setquota –n 4 /zookeeper/node 设置/zookeeper/node子节点个数最大为4

setquota –b 100 /zookeeper/node 设置/zookeeper/node节点长度最大为100

ZooKeeper 常用四字命令:

      ZooKeeper 支持某些特定的四字命令字母与其的交互。它们大多是查询命令,用来获取 ZooKeeper 服务的当前状态及相关信息。用户在客户端可以通过 telnet 或 nc 向 ZooKeeper 提交相应的命令

1 可以通过命令:echo stat|nc 127001 2181 来查看哪个节点被选择作为follower或者leader

2 使用echo ruok|nc 127001 2181 测试是否启动了该Server,若回复imok表示已经启动。

3 echo dump| nc 127001 2181 ,列出未经处理的会话和临时节点。

4 echo kill | nc 127001 2181 ,关掉server

5 echo conf | nc 127001 2181 ,输出相关服务配置的详细信息。

6 echo cons | nc 127001 2181 ,列出所有连接到服务器的客户端的完全的连接 / 会话的详细信息。

7 echo envi |nc 127001 2181 ,输出关于服务环境的详细信息(区别于 conf 命令)。

8 echo reqs | nc 127001 2181 ,列出未经处理的请求。

9 echo wchs | nc 127001 2181 ,列出服务器 watch 的详细信息。

10 echo wchc | nc 127001 2181 ,通过 session 列出服务器 watch 的详细信息,它的输出是一个与 watch 相关的会话的列表。

11 echo wchp | nc 127001 2181 ,通过路径列出服务器 watch 的详细信息。它输出一个与 session 相关的路径。

Zookeeper 的视图结构是一个树形结构,树上的每个节点称之为数据节点(即 ZNode),每个ZNode 上都可以保存数据,同时还可以挂载子节点。并且Zookeeper的根节点为 "/"。

在 Zookeeper 中,每个数据节点都是有生命周期的,其生命周期的长短取决于数据节点的节点类型。在 Zookeeper 中有如下几类节点:

每个数据节点中除了存储了数据内容之外,还存储了数据节点本身的一些状态信息(State)。

在Zookeeper 中,事务是指能够改变 Zookeeper 服务器状态的 *** 作,我们也称之为事务 *** 作或更新 *** 作,一般包括数据节点创建与删除、数据节点内容更新和客户端会话创建与失效等 *** 作。对于每一个事务请求,Zookeeper 都会为其分配一个全局唯一的事务ID,用 ZXID 来表示,通常是一个 64 位的数字。每一个 ZXID 对应一次更新 *** 作,从这些 ZXID 中可以间接地识别出 Zookeeper 处理这些更新 *** 作请求的全局顺序。

ZXID 是一个 64 位的数字,其中低 32 位可以看作是一个简单的单调递增的计数器,针对客户端的每一个事务请求,Leader 服务器在产生一个新的事务 Proposal 的时候,都会对该计数器进行加 1 *** 作;而高 32 位则代表了 Leader 周期 epoch 的编号,每当选举产生一个新的 Leader 服务器,就会从这个 Leader 服务器上取出其本地日志中最大事务 Proposal 的 ZXID,并从该 ZXID 中解析出对应的 epoch 值,然后再对其进行加 1 *** 作,之后就会以此编号作为新的 epoch,并将低 32 位置 0 来开始生成新的 ZXID。

Zookeeper 中为数据节点引入了版本的概念,每个数据节点都具有三种类型的版本信息(在上面的状态信息中已经介绍了三种版本信息代表的意思),对数据节点的任何更新 *** 作都会引起版本号的变化。其中我们以 dataVersion 为例来说明。在一个数据节点被创建完毕之后,节点的dataVersion 值是 0,表示的含义是 ”当前节点自从创建之后,被更新过 0 次“。如果现在对该节点的数据内容进行更新 *** 作,那么随后,dataVersion 的值就会变成 1。即表示的是对数据节点的数据内容的变更次数。

版本的作用是用来实现乐观锁机制中的 “写入校验” 的。例如,当要修改数据节点的数据内容时,带上版本号,如果数据节点的版本号与传入的版本号相等,就进行修改,否则修改失败。

Zookeeper 提供了分布式数据的发布/订阅功能。一个典型的发布/订阅模型系统定义了一种一对多的订阅关系,能够让多个订阅者同时监听某一个主题对象,当这个主题对象自身状态变化时,会通知所有订阅者,使它们能够做出相应的处理。在 Zookeeper 中,引入了 Watcher 机制来实现这种分布式的通知功能。Zookeeper 允许客户端向服务端注册一个 Watcher 监听,当服务端的一些指定事件触发了这个 Watcher,那么就会向指定客户端发送一个事件通知来实现分布式的通知功能。

从上图可以看出 Zookeeper 的 Watcher 机制主要包括客户端线程、客户端WatchMananger 和 Zookeeper 服务器三部分。在具体工作流程上,简单地讲,客户端在向 Zookeeper 服务器注册 Watcher 的同时,会将 Watcher 对象存储在客户端的 WatchMananger 中。当 Zookeeper 服务器端触发 Watcher 事件后,会向客户端发送通知,客户端线程从 WatchManager 中取出对应的 Watcher 对象来执行回调逻辑。

Watcher是一个接口,任何实现了Watcher接口的类就是一个新的Watcher。Watcher内部包含了两个枚举类:KeeperState、EventType

:客户端接收到的相关事件通知中只包含状态及类型等信息,不包括节点变化前后的具体内容,变化前的数据需业务自身存储,变化后的数据需调用get等方法重新获取;

上面讲到zookeeper客户端连接的状态和zookeeper对znode节点监听的事件类型,下面我们来讲解如何建立zookeeper的watcher监听。在zookeeper中采用zkgetChildren(path, watch)、zkexists(path, watch)、zkgetData(path, watcher, stat)这样的方式为某个znode注册监听。

下表以node-x节点为例,说明调用的注册方法和可监听事件间的关系:

Zookeeper 中提供了一套完善的 ACL(Access Control List)权限控制机制来保障数据的安全。

ACL 由三部分组成,分别是:权限模式(Scheme)、授权对象(ID)和权限(Permission),通常使用“scheme: ​id:permission”来标识一个有效的ACL 信息。下面分别介绍:

174、ACL 超级管理员

zookeeper的权限管理模式有一种叫做super,该模式提供一个超管可以方便的访问任何权限的节点

假设这个超管是:super:admin,需要先为超管生成密码的密文

那么打开zookeeper目录下的/bin/zkServersh服务器脚本文件,找到如下一行:

这就是脚本中启动zookeeper的命令,默认只有以上两个配置项,我们需要加一个超管的配置项

那么修改以后这条完整命令变成了

之后启动zookeeper,输入如下命令添加权限

在服务器集群初始化阶段,我们以 3 台机器组成的服务器集群为例,当有一台服务器server1 启动的时候,它是无法进行 Leader 选举的,当第二台机器 server2 也启动时,此时这两台服务器已经能够进行互相通信,每台机器都试图找到一个 Leader,于是便进入了 Leader 选举流程。

在zookeeper运行期间,leader与非leader服务器各司其职,即便当有非leader服务器宕机或新加入,此时也不会影响leader,但是一旦leader服务器挂了,那么整个集群将暂停对外服务,进入新一轮leader选举,其过程和启动时期的Leader选举过程基本一致。

假设正在运行的有server1、server2、server3三台服务器,当前leader是server2,若某一时刻leader挂了,此时便开始Leader选举。选举过程如下:

observer角色特点:

为了使用observer角色,在任何想变成observer角色的配置文件中加入如下配置:

并在所有server的配置文件中,配置成observer模式的server的那行配置追加:observer,例如:


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/10301190.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-07
下一篇2023-05-07

发表评论

登录后才能评论

评论列表(0条)

    保存