1.为什么要做数据同步?
防止单台机器节点宕机后,数据丢失或者访问不到
2.当Leader宕机后,会发生什么?
其余的Follwer机器会根据特定的规则选择出一个Leader,当集群机器节点存在于半数以上则能继续对外提供服务
3.搭建ZK集群环境
注意:配置任何文件都要找到对应目录 查看当前目录地址:pwd
3.1 搭建zk集群之前,保证每一台机器都要JDK环境,并且机器数量不能小于3台
第一台:192.168.67.41
第二台:192.168.67.42
第三台:192.168.67.43
(根据自身情况选择)
如果安装完系统后默认存在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
4.监控zk
4.1 在linux当中,可以通过再bin目录下使用./zkServer.sh status查看当前服务器的角色以及状态
4.2 windows如何操作zk
4.2.1 找到zk压缩包,将压缩包解压到当前文件夹
4.2.2 将conf文件夹下的zoo_sample.cfg文件改为zoo.cfg
4.2.3 在解压目录下创建一个data文件夹,修改zoo.cfg中dataDir数据目录路径(不是必须)
4.2.4 启动zk,找到bin目录下有一个zkServer.cmd(启动前保证有JDK环境变量)
4.3 操作zk
操作 工具 :ZooInspector
找到对应目录:E:\学习文档\Zookeeper\ZooInspector\build
双击启动jar文件:zookeeper-dev-ZooInspector.jar
5.介绍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所用
6.利用zk原生客户端操作zk服务器
在上面案例中利用到了ZooInterceptor工具操作了zk服务器,那么就相当于利用客户端进行操作
6.1 查看当前zk服务器的目录结构
ls /目录 查看该目录下的所有文件
ls2 /目录 查看该目录下文件的更新次数
6.2 创建节点:不能跳目录创建
create 目录 节点值
示例:
在根目录下创建一个节点,值为空
create /znode ''
在根目录的zookeeper目录下创建一个节点znodeChild,值为znodeValue
create /zookeeper/znodeChild znodeValue
节点分类型:节点分为临时和持久
默认情况下创建的节点为持久节点
创建临时节点如下:(临时节点创建后不能有子节点)
create -e 目录 节点值 [权限]
示例:
create -e /zNodeEphemearl EphemearlValue
6.3 获取节点
get 节点
6.4 修改节点
set 节点 节点值
6.5 删除节点
delete 节点 只能一层一层删除
rmr 节点 递归删除