1、ZooKeeper概述
(1)概述
zooKeeper是一个经典的分布式数据—致性解决方案,致力于为分布式应用提供一个高性能、高可用,且具有严格顺序访问控制能力的分布式协调存储服务。
- 维护配置信息:能够保证配置信息的高可用和配置文件的一致性
- 分布式锁服务:一个集群是-个分布式系统,由多台服务器组成。为了提高并发度和可靠性,多台服务器上运行着同种服务。当多个服务在运行时就需要协调各服务的进度,有时候需要保证当某个服务在进行某个操作时,其他的服务都不能进行该操作,即对该操作进行加锁,如果当前机器挂掉后,释放锁并fail over到其他的机器继续执行该服务。
- 集群管理:一个集群有时会因为各种软硬件故障或者网络故障,出现某些服务器挂掉而被移除集群,而某些服务器加入到集群中的情况,zookeeper会将这些服务器加入移出的情况通知给集群中的其他正常工作的服务器,以及时调整存储和计算等任务的分配和执行等。此外zookeeper还会对故障的服务器做出诊断并尝试修复。
- 生成分布式唯一ID:在过去的单库单表型系统中,通常可以使用数据库字段自带的auto_increment属性来自动为每条记录生成一个唯一的ID。 但是分库分表后,就无法在依靠数据库的auto_increment属性来唯一标识一 条记录了。此时我们就可以用zookeeper在分布式环境下生成全局唯一ID。 做法如下:每次要生成一个新id时, 创建一个持久顺序节点,创建操作返回的节点序号,即为新ld, 然后把比自己节点小的删除即可数据模型
(2)数据模型
ZooKeeper的数据节点是树状的,每一个节点称为znode
(3)属性
- cZxid:数据节点创建时的事务ID
- ctime:数据节点创建时的时间
- mZxid:数据节点最后一-次更新时的事务ID
- mtime:数据节点最后- -次更新时的时间
- pZxid:数据节点的子节点最后一次被修改时的事务ID
- cversion:子节点的更改次数
- dataVersion:节点数据的更改次数
- acIVersion:节点的ACL的更改次数
- ephemeralOwner:如果节点是临时节点,则表示创建该节点的会话的SessionID;如果节点是持久节点,则该属性值为0
- dataLength:数据内容的长度
- numChildren:数据节点当前的子节点个数
2、在虚拟机中安装jdk
(1)创建一个新的用户
使用的是useradd和passwd命令
(2)解压jdk
tar -xzvf jdk-8u131-linux-x64.tar.gz
(3)配置jdk变量
[root@zhai /]# cd home
[root@zhai home]# ls
20191211 20191213 221 223 zhai1997 zhang zhb1 zhb3 zhb5 zzz
20191212 20191214 222 zhai zhaiuser zhb zhb2 zhb4 zookeeper
[root@zhai home]# cd zookeeper
[root@zhai zookeeper]# ls
jdk1.8.0_131 jdk-8u131-linux-x64.tar.gz zookeeper-3.4.10.tar.gz
[root@zhai zookeeper]# vi .bash_profile
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
iiiii
# User specific environment and startup programs
JAVA_HOME=/home/zookeeper/jdk1.8.0_131
export JAVA_HOME
PATH=$JAVA_HOME/bin:$PATH
export PATH
~
~
~
~
(4)验证
[root@zhai zookeeper]# cd /
[root@zhai /]# java -version
java version "1.7.0_45"
OpenJDK Runtime Environment (rhel-2.4.3.3.el6-i386 u45-b15)
OpenJDK Client VM (build 24.45-b08, mixed mode, sharing)
3、在虚拟机中安装zookeeper
(1)解压
tar -xzvf zookeeper-3.4.10.tar.gz
(2)进入zookeeper的conf目录
cd /home/zookeeper/zookeeper-3.4.10/conf
(3)复制配置文件
cp zoo_sample.cfg zoo.cfg
(4)在zookeeper的根目录下创建data目录
[root@zhai zookeeper-3.4.10]# mkdir data
[root@zhai zookeeper-3.4.10]# ls
bin data ivy.xml README_packaging.txt zookeeper-3.4.10.jar
build.xml dist-maven lib README.txt zookeeper-3.4.10.jar.asc
conf docs LICENSE.txt recipes zookeeper-3.4.10.jar.md5
contrib ivysettings.xml NOTICE.txt src zookeeper-3.4.10.jar.sha1
(5)进入conf目录并编辑zoo.cfg文件
此路径用于存储zookeeper中数据的内存快照、及事物日志文件,将配置文件中的路径修改为手动创建的目录即可
(6)启动zookeeper
[root@zhai /]# cd /home/zookeeper/zookeeper-3.4.10/bin
[root@zhai bin]# .zkServer.sh start
-bash: .zkServer.sh: command not found
[root@zhai bin]# ./zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /home/zookeeper/zookeeper-3.4.10/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
(7)停止zookeeper
[root@zhai bin]# ./zkServer.sh stop
ZooKeeper JMX enabled by default
Using config: /home/zookeeper/zookeeper-3.4.10/bin/../conf/zoo.cfg
Stopping zookeeper ... STOPPED
(8)查看状态
[root@zhai bin]# ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /home/zookeeper/zookeeper-3.4.10/bin/../conf/zoo.cfg
Error contacting service. It is probably not running.
(9)登录
[root@zhai bin]# ./zkCli.sh
Connecting to localhost:2181
2020-10-22 03:41:53,454 [myid:] - INFO [main:Environment@100] - Client environment:zookeeper.version=3.4.10-39d3a4f269333c922ed3db283be479f9deacaa0f, built on 03/23/2017 10:13 GMT