zookeeper的使用:
1.安装zookeeper,并且要知道zookeeper下面的几个主要目录是干什么的。
比如说conf、bin、jar等等
要复制conf里面的文件,然后改下配置
要在vim pro.... 里面添加zk的环境
具体安装zk配置, 请参考该博主的优秀博文 https://www.cnblogs.com/tonylovett/p/5227973.html
补充:启动的时候可能会报错,要检查这几项
a netstat -nltp | grep 2181 如果被占用就-------kill 进程的pid
b 通过sudo service iptables status检查防火墙,如果开启就用命令关掉 sudo service iptables stop
2.zookeeper的基本数据模型
3.zk的作用提现:(重要概念)
A master节点选举模式,主节点挂了以后,从节点(备胎)就会接手工作,并且保证这个节点是唯一的,这也是所谓首脑模式,从而保证我们的集群是高可用的。
B 统一配置文件管理,即只需要部署一台服务器,则可以把相同的配置文件同步更新到其他所有服务器,此操作在云计算中用的特别多,(假设修改了redis统一配置)
C 发布与订阅,类似消息队列mq,dubbo发布者把数据存在znode节点上,订阅者会读取这个数据。(zk相当于一个中介)
D 提供分布式锁,在分布式环境中不同进程(服务器)之间争夺资源,类似于多线程中的锁。
eg:比如说,网盘中有个文件(下面所有的ABCD服务器操作的都是这个文件),A服务器对文件进行读操作,B服务器对文件进行写操作,c服务器删除文件操作,D服务器对文件进行读操作。
面对这么多的服务器(并发),文件该听谁的呢?先来后到?还是最后一个先?
办法就是加一个锁机制,A服务器在对文件操作的时候,其他的服务器要排队。等A操作完以后,下面的服务器才能做操作。
专业的说法就是,A服务器在操作时,其他的服务器阻塞住了,直到A服务器释放了,然后B操作,B释放,然后C操作,C释放.....,以此类推,是一个顺序。
E 集群管理,集群中保证数据的强一致性。
eg:在集群环境中,它的节点都是一致的
比如说有三个节点。A是主节点,B是子节点,C是子节点。
当我们修改A节点中的数据的时候,zk会使用同步机制,A节点的数据会同步到B节点和C节点中(三个节点数据一模一样)。
客户端读取A节点的数据,某天发生了意外,A节点不能继续工作,我们把客户端连接切到B节点,也是能读到数据的。
也就是说,不管客户端连接哪台机器,都能都读取数据的,保持数据的一致性。
补充:如何调整好我们的zk配置 才能达到最优了
4. 熟悉zookeeper常用命令行操作
通过 ./zkCli.sh 打开zk的客户端进行命令行后台,然后help
eg:
ls ls / 查看当前节点下面的子节点
ls2 查看
stat 查出来的东西和ls ls2一样,是他们的整合(节省代码)
get get / 把当前节点里面的数据取出来。 aaa是节点名称,123是值
create 创建节点(后面跟参数可以创建临时节点,永久节点,瞬时节点)eg: create /aaa 123 -------增
create -e 创建临时节点
set 修改节点 --------改
delete 删除节点 --------删
5.zk特性-session(客户端到服务端请求的一次会话)
session如果过期了,session中的zk里的所有的临时节点znode都会被抛弃。
6.zk特性-vatcher机制(重要,需要自己去理解,类似于一个触发器)
针对每个节点的操作,都会有一个监督者,就是vatcher
7. 理解watch事件
当监控的某个对象(节点)发生了变化,就会触发watcher事件
watcher事件类型一:
父节点、子节点 增删改都能触发其watcher。并且增删改的触发事件不同。其中删除父节点,可以设置 delete /节点名称 watch
watcher事件类型二:
ls为父节点设置watcher,创建子节点触发:
NodeChildrenChanged
ls为父节点设置watcher,删除子节点触发:
NodeChildrenChanged
ls为父节点设置watcher,修改子节点不触发事件
补充:
比如说aaa是父节点,ccc是子节点
eg:
ls /aaa watcher ------------------ls为父节点设置watcher
create /aaa/ccc ------------------create 创建子节点
set /aaa/ccc 9090 -----------------改变父节点下面 子节点的值
get /aaa/ccc watch ----------------修改子节点不触发事件.只有这样做才触发。把子节点当做是父节点,删除子节点会触发:NodeDataChanged
watcher 使用场景:
1.统一资源配置。
设置了watcher事件后,每一个节点都有vatcher事件,当修改一个节点,剩下的节点都通知客户端进行改变。
8. 理解ACL 权限控制
特性:
针对节点可以设置相关读写等权限,目的为了保障数据安全
权限permissions 可以指定不同的权限范围以及角色
ACL使用场景:
1.开发、测试人员环境分离,开发者无权操作测试库的节点,只能看
ACL命令行
getAcl:获取某个节点的acl权限信息 eg:getAcl /aaa/bbb
setAcl:设置某个节点的acl权限信息
addauth :输入认证授权信息,注册时输入明文密码(登陆),但是在zk的系统里,密码是以加密的形式存在的
ACL的构成一:
zk的acl通过(scheme id permissions)三个常用来构成权限列表
scheme :代表采用的某种权限机制
id :代表允许访问的用户
permissions :权限组合字符串
ACL的构成二:
world:world下只有一个id,即一个用户,创建节点默认的权限是anyone,组合的写法就是--- world:anyone:[permissions]
auth:代表认证登录,需要注册用户有权限就可以,(明文密码)写法为: auth:user:password:[permissions]
digest:需要对密码加密才能访问(两层加密),写法为:digest:username:BASE64(SHA1(password)):[permissions]
ip:当设置为指定的ip地址,此时限制ip进行访问,比如 ip:192.168.1.1:[permissions]
super:代表超级管理员,拥有所有的权限
ACL的构成三:
权限字符串缩写 crdwa
create:创建子节点
read :获取节点
write :设置节点数据
delete :删除子节点
admin :设置权限
eg:
setAcl /aaa/bbb world:anyone:crwa 设置子节点的权限为增删改,如果你要删除bbb的值就会报错:Authentication is not valid
9. zookeeper 四字命令之一(常用,不用在指定的目录下运行,在装有zk的服务器上面运行就可以了)
stat 查看zk的状态信息 eg: echo stat |nc localhost 2181 --localhost是当前服务器的ip,可以用localhost,也可以用详细ip192.1XXXXX
ruok 查看当前zkserver是否启动 eg: echo ruok |nc localhost 2181
dump 列出未经处理的回话和临时节点 eg: echo dump |nc localhost 2181
conf 查看配置的信息 eg: echo conf |nc localhost 2181
cons 展示连接到服务器的客户端信息 eg: echo cons |nc localhost 2181
envi 环境变量(去查看zk相关的环境变量,把相关的环境变量信息都打印出来) eg:echo envi |nc localhost 2181
mntr 监控zk健康信息 eg: echo mntr |nc localhost 2181
wchs 查看watches的个数 eg: echo wchs |nc localhost 2181
wchc 与 wchp session 与watch及path与watch信息
11 zk的集群
集群:集群就是当一个节点挂掉是没有关系的,因为有心跳机制(选举模式)
搭建注意点:
1.配置数据文件 myid 1/2/3 对应 server.1/2/3 ,最少的集群是3台。
2.通过 ./zkCli.sh -server[ip]:[port] 检测集群是否配置成功