Zookeeper分布式开源框架
一、zookeeper简介
zookeeper中文动物园管理员,作为其他分布式组件的协调调度,本身也是分布式,支持集群,在集群当中有选举机制,主从复制,以及读写分离等等比较重点的概念
zk支持统一命名服务,以及统一资源管理等
Zookeeper集群机制:本身zk支持单节点,但是主要特性还是在集群环境当中凸显,在集群中有一个Leader(领导者)和多个Follower(跟随者)
当Leader节点挂掉之后会重新选举Leader当做领导者,同时可以做到数据同步
Zookeeper集群机制数据结构:
zk中默认有一个根节点,根节点下可以创建子节点以及数据,子节点分为临时节点和持久节点
二、zookeeper环境搭建
1、安装一台虚拟机,配置好网卡,设置静态IP
2、克隆虚拟机,更改网卡
2.1 编辑网卡文件,使用命令
vi /etc/sysconfig/network-scripts/ifcfg-eno167xxxxxxxxxxxxx
按i,将IPADDR内容修改为静态IP地址,比如192.168.7.77
修改完毕,按esc,使用:wq!保存并且推出
重启网卡服务 service network restart
重启完毕,通过命令:ip addr命令查看当前虚拟机IP
2.2 使用Xshell连接
1.关闭防火墙
关闭:systemctl stop firewalld.service
禁用:systemctl disable firewalld.service
2.使用Xshell新建一个会话,会话名称自定义,主机写虚拟机地址
输入用户名和密码然后点击确定,点击连接,点击接受并保存
3、搭建ZK环境
3.1 搭建之前保证虚拟机有JDK环境,ZK运行需要依赖于JDK
卸载自带JDK,先通过命令:
rpm -qa|grep java查找当前是否安装JDK
卸载命令:rpm -e --nodeps java-oepnxxxxxxxxxx
安装JDK:
上传jdk安装包:
通过XFTP上传,切换到/usr/local目录,新建一个文件夹为java,进入到java文件夹然后上传
切换到/usr/local/java目录
解压JDK压缩包
tar -zxvf xxxxxxxxxxxxxxxx
解压完成JDK后配置环境变量:
vi /etc/profile 切换到最后一行,粘贴对应环境变量:
export JAVA_HOME=/usr/local/java/jdk1.8.0_121
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
source /etc/profile 重新加载该文件
java -version查看
搭建ZK集群:
1.将Zookeeper的tar包上传到对应/usr/local/zookeeper当中
2.切换到 cd /usr/local/zookeeper
3.tar -zxvf zookeeper.xxx.tar.gz
4.vi /etc/profile文件配置环境变量
export JAVA_HOME=/usr/local/java/jdk1.8.0_121
export ZOOKEEPER_HOME=/usr/local/zookeeper/zookeeper-3.4.10
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$ZOOKEEPER_HOME/bin:$PATH
5.切换到zookeeper解压目录的conf文件夹下面
cd /usr/local/zookeeper/zookeeper-3.4.10/conf
mv zoo_sample.cfg zoo.cfg
6.修改zoo.cfg文件
vi /usr/local/zookeeper/zookeeper-3.4.10/conf/zoo.cfg
将dataDir修改为自己的目录:dataDir=/usr/local/zookeeper/zookeeper-3.4.10/data
在文件末尾加入如下内容:
server.0=192.168.7.66:2888:3888
server.1=192.168.7.77:2888:3888
server.2=192.168.7.88:2888:3888
7.在/usr/local/zookeeper/zookeeper-3.4.10/data下面创建一个myid文件,文件内容为机器标识,第一台机器就是0
8.将zookeeper内容复制到本地,从本地再次上传到另外两台服务器的对应文件夹
9.重复第4个步骤以及第7个步骤
10.切换到zookeeper解压目录的bin 文件夹下,然后通过./zkServer.sh start命令启动zk服务
如果权限不够则使用chmod 777 ./*.sh赋权
11.查看zk启动状态 命令:zkServer.sh status 停止zk使用命令:./zkServer.sh stop
4、zookeeper具体步骤
1.为什么要做数据同步?
防止单台机器节点宕机后,数据丢失或者访问不到
2.当Leader宕机后,会发生什么?
其余的Follwer机器会根据特定的规则选择出一个Leader,当集群机器节点存在于半数以上则能继续对外提供服务
3.搭建ZK集群环境
注意:配置任何文件都要找到对应目录 查看当前目录地址:pwd
3.1 搭建zk集群之前,保证每一台机器都要JDK环境,并且机器数量不能小于3台
第一台:192.168.7.66
第二台:192.168.7.77
第三台:192.168.7.88
如果安装完系统后默认存在JDK应该如何操作:
1.查找当前系统当中存在的jdk
npm -qa |grep java
2.使用rmp -e --nodeps jdk-openxxxxxxxxx
如何配置JDK:
1.在/usr/local下新建了一个文件夹java,将JDK的tar包上传到Linux系统对应目录当中
2.切换到对应目录,找到刚刚上传的tar包
cd /usr/local/java 可以通过ll命令查看当前目录下的所有文件
3.解压jdk安装包
tar -zxvf jdk-1.8xxxxxx.tar.gz
4.配置jdk环境变量,更改环境变量文件
vi /etc/profile
5.切换到该文件的最后一行,然后编辑(按i),将对应内容复制或者手写到该文件当中
如有疑问请搜索:Linux配置JDK环境变量,将对应配置目录改为自己目录即可
3.2 配置ZK集群
3.2.1 首先在/usr/local下创建一个文件夹zookeeper,将本地windows计算机当中的zookeeper-3.6.10.tar.gz包上传到Linux系统对应目录当中
3.2.2 切换到/usr/local/zookeeper目录当中
3.2.3 使用tar -zxvf zookeeper-3.4.10.tar.gz解压到当前文件夹
3.2.4 编辑系统环境变量,加入zk环境变量
vi /etc/profile
文件末尾加入如下内容(路径根据自身情况进行书写)
export JAVA_HOME=/opt/jdk1.8.0_71
export ZOOKEEPER_HOME=/usr/local/zookeeper
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$ZOOKEEPER_HOME/bin:$PATH
3.2.5 将zookkeeper解压目录的conf文件夹下的zoo_sample.cfg 改名为zoo.cfg
mv zoo_sample.cfg zoo.cfg
3.2.6 修改对应的zoo.cfg
3.2.6.1 修改dataDir内容指向到自定义地址,建议在zookeeper解压目录下新建一个data文件夹,然后指向到该文件夹
dataDir是数据文件存放地址
3.2.6.2 在zoo.cfg文件末尾加入集群机器配置关系
server.myid(zk机器标识)=IP地址:2888:3888
server.0=192.168.7.66:2888:3888
server.1=192.168.7.77:2888:3888
server.2=192.168.7.88:2888:3888
3.2.6.3 esc,:wq!保存并退出
3.2.7 创建对应服务器标识
要知道当前在那一台服务器,然后创建对应myid标识
cd /usr/local/zookeeper/zookeeper-3.4.10/data
创建myid文件 vi myid
编辑myid文件加入对应服务器标识
3.3 注意问题
我们可以在一台机器上配置完JDK以及zk和环境变量后,将当前机器关闭,右键克隆
克隆完成需要改对应IP地址和Myid文件配置:
IP地址更改:
vi /etc/sysconfig/network-scripts/ifcfg-eno167xxxxxxxxxxxxx
将IPADDR内容修改为静态IP地址,比如192.168.7.77
Myid文件改为对应服务器标识即可
集群环境各个机器节点需要通信
集群机器需要关闭防火墙
conentos7关闭防火墙:
systemctl stop firewalld.service
systemctl disable firewalld.service
3.4 启动zk服务
切换到对应bin目录:
cd /usr/local/zookeeper/zookeeper-3.4.10/bin
启动zk服务:./zkServer.sh start
停止zk服务:./zkServer.sh stop
重启zk服务:./zkServer.sh restart
5、监控zk
5.1 在linux当中,可以通过再bin目录下使用./zkServer.sh status查看当前服务器的角色以及状态
6、 windows如何操作zk
6.1 找到zk压缩包,将压缩包解压到当前文件夹
6.2 将conf文件夹下的zoo_sample.cfg文件改为zoo.cfg
6.3 在解压目录下创建一个data文件夹,修改zoo.cfg中dataDir数据目录路径(不是必须)
6.4 启动zk,找到bin目录下有一个zkServer.cmd(启动前保证有JDK环境变量)
6.5操作zk
操作 工具 :ZooInspector
找到对应目录:E:\学习文档\Zookeeper\ZooInspector\build
双击启动jar文件:zookeeper-dev-ZooInspector.jar
7、介绍zoo.cfg文件内容
tickTime代表心跳时间,一般情况下来讲,每一台服务器会定时发送心跳,如果超过该时间没有发送心跳则代表当前服务器宕机,最小超时时间为两个心跳时间
initLimit:多少个心跳时间内,允许其他server连接并初始化数据,如果ZooKeeper管理的数据较大,则应相应增大这个值
clientPort:服务的监听端口,默认为2181
dataDir:用于存放内存数据库快照的文件夹,同时用于集群的myid文件也存在这个文件夹里(注意:一个配置文件只能包含一个dataDir字样,即使它被注释掉了。)
syncLimit:多少个tickTime内,允许follower同步,如果follower落后太多,则会被丢弃。
server.A=B:C:D:
A是一个数字,表示这个是第几号服务器,B是这个服务器的ip地址
C第一个端口用来集群成员的信息交换,表示的是这个服务器与集群中的Leader服务器交换信息的端口
D是在leader挂掉时专门用来进行选举leader所用
8、利用zk原生客户端操作zk服务器
在上面案例中利用到了ZooInterceptor工具操作了zk服务器,那么就相当于利用客户端进行操作
8.1 查看当前zk服务器的目录结构
ls /目录 查看该目录下的所有文件
ls2 /目录 查看该目录下文件的更新次数
8.2 创建节点:不能跳目录创建
create 目录 节点值
示例:
在根目录下创建一个节点,值为空
create /znode ''
在根目录的zookeeper目录下创建一个节点znodeChild,值为znodeValue
create /zookeeper/znodeChild znodeValue
节点分类型:节点分为临时和持久
默认情况下创建的节点为持久节点
创建临时节点如下:(临时节点创建后不能有子节点)
create -e 目录 节点值 [权限]
示例:
create -e /zNodeEphemearl EphemearlValue
8.3 获取节点
get 节点
8.4 修改节点
set 节点 节点值
8.5 删除节点
delete 节点 只能一层一层删除
rmr 节点 递归删除