• Zookeeper standalone operation
• Zookeeper伪集群搭建
• 实战:Zookeeper 集群搭建
1.简介
zookeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件,是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。
ZooKeeper是以Fast Paxos算法为基础的,Paxos 算法存在活锁的问题,即当有多个proposer交错提交时,有可能互相排斥导致没有一个proposer能提交成功,而Fast Paxos作了一些优化,通过选举产生一个leader,只有leader才能提交proposer,具体算法可见Fast Paxos。因此,要想弄懂ZooKeeper首先得对Fast Paxos有所了解。
Zookeeper有三种运行模式:单机模式、伪集群模式和集群模式。
安装zookeeper的先决条件是首先保证已安装Java运行环境。
3.ZooKeeper之特性
ZooKeeper本质上是一个分布式的小文件存储系统。原本是Apache Hadoop的一个组件,现在被拆分为一个Hadoop的独立子项目,在Hbase(Hadoop的另外一个被拆分出来的子项目,用于分布式环境下的超大数据量的DBMS数据库管理系统)中也用到了ZooKeeper集群。ZooKeeper有如下的特性:
3.1.简单
ZooKeeper核心是一个精简的文件系统,它提供了一些简单的文件操作以及附加的功能,例如排序和通知。
3.2.易表达
ZooKeeper的数据结构原型是一棵znode树(类似Linux的文件系统),并且它们是一些已经被构建好的块,可以用来构建大型的协作数据结构和协议。
3.3.高可用性
ZooKeeper可以运行在一组服务器上,同时它们被设计成高可用性,为你的应用程序避免单点故障。
3.4.松耦合交互
ZooKeeper提供的Watcher机制使得各客户端与服务器的交互变得松耦合,每个客户端无需知晓其他客户端的存在,就可以和其他客户端进行数据交互。
3.5.丰富的API
ZooKeeper为开发人员提供了一套丰富的API,减轻了开发人员编写通用协议的负担。
4.1.服务器配置
hostname ip software
服务端:zkmaster IP:192.168.100.150
服务端:zkslaver1 IP:192.168.100.151
服务端:zkslaver2 IP:192.168.100.152
4.1.1单节点zookeeper搭建
下载解压
bin/zkServer.sh start
4.1.2伪分布式集群搭建
1.创建data文件夹1 2 3
创建myid文件并分别写入1 2 3
编辑zoo.cfg配置文件 3个
分别写入以下内容:
启动zookeeper 服务
查看进程
Zookeeper集群搭建
6.安装配置zookeeper
上传zookeeper-3.4.10.tar.gz到linux系统中
[root@xuegod63 ~]# tar -zxvf zookeeper-3.4.10.tar.gz #解压zookeeper
#把解压后的zookeeper移到目录/opt/zookeeper下
[root@xuegod63 ~]# mv zookeeper-3.4.10 /opt/zookeeper
[root@xuegod63 zookeeper]# cd /opt/zookeeper/conf #生成配置文件
[root@xuegod63 conf]# cp zoo_sample.cfg zoo.cfg
#编辑zoo.cfg
[root@xuegod63 ~]# vim /opt/zookeeper/conf/zoo.cfg
#修改内容如下
ticketTime=2000 #服务器之间或客户端与服务器之间维持心跳的时间间隔,每隔tickTime时间就会发送一个心跳。单位毫秒
initLimit=10 #配置 Zookeeper 接受客户端(此客户端不是用户连接 Zookeeper 服务器的客户端,而是 Zookeeper 服务器集群中连接到 Leader 的 Follower ([ˈfɒləʊə®] 追随者)服务器)初始化连接时最长能忍受多少个心跳时间间隔数。当已超过initLimit个tickTime长度后 Zookeeper 服务器还没有收到客户端的返回信息,则表明客户端连接失败。总的时间长度就是 initLimit * tickTime 秒。
syncLimit=5 #配置 Leader 与 Follower 之间发送消息,请求和应答时间长度,最长不能超过多少个 tickTime 的时间长度,总的时间长度就是 syncLimit * tickTime 秒。
clientPort=2181 #Zookeeper服务器监听的端口,以接受客户端的访问请求。
改:12 dataDir=/tmp/zookeeper
改:12 dataDir=/opt/zookeeper/data #Zookeeper 保存数据的目录,默认情况下,Zookeeper 将写数据的日志文件也保存在这个目录里。
#dataLogDir:若没提供的话则用dataDir。zookeeper的持久化都存储在这两个目录里。dataLogDir里是放到的顺序日志(WAL)。而dataDir里放的是内存数据结构的snapshot,便于快速恢复。为了达到性能最大化,一般建议把dataDir和dataLogDir分到不同的磁盘上,以充分利用磁盘顺序写的特性。
在zoo.conf文件最后,添加以下内容:
server.1=192.168.1.163:2888:3888
server.2=192.168.1.164:2888:3888
server.3=192.168.1.165:2888:3888
注:#server.A=B:C:D:其中 A 是一个数字,表示这个是第几号服务器;B 是这个服务器的 ip 地址;C 表示的是这个服务器与集群中的 Leader 服务器交换信息的端口;D 表示的是万一集群中的 Leader 服务器挂了,需要一个端口来重新进行选举,选出一个新的 Leader,此端口就是用来执行选举时服务器相互通信的端口。如果是伪集群的配置方式,由于 B 都是一样,所以不同的 Zookeeper 实例通信端口号不能一样,所以要给它们分配不同的端口号。2888端口是zookeeper服务相互通信使用的,3888端口是zookeeper服务选举使用的
- 配置zookeeper环境变量
[root@xuegod63 ~]# mkdir /opt/zookeeper/data # 创建data目录
[root@xuegod63 ~]# vim /etc/profile
#添加如下内容
ZOOKEEPER_HOME=/opt/zookeeper
PATH=$PATH:${ZOOKEEPER_HOME}/bin
export ZOOKEEPER_HOME
#保存修改
[root@xuegod63 ~]# source /etc/profile
- 在xuegod64和xuegod62上安装zookeeper
[root@xuegod63~]# scp -r /opt/zookeeper/ root@192.168.1.164:/opt/
[root@xuegod63~]# scp -r /opt/zookeeper/ root@192.168.1.165:/opt/
[root@xuegod63 ~]# scp /etc/profile 192.168.1.164:/etc/
[root@xuegod63 ~]# scp /etc/profile 192.168.1.165:/etc/
重新加载文件:
[root@xuegod62 ~]# source /etc/profile
[root@xuegod64 ~]# source /etc/profile
9.添加myid文件
除了修改 zoo.cfg 配置文件,集群模式下还要配置一个文件 myid,这个文件在 上述dataDir 指定的目录下,这个文件里面就只有一个数据就是 A 的值,Zookeeper 启动时会读取这个文件,拿到里面的数据与 zoo.cfg 里面的配置信息比较从而判断到底是那个 server。
[root@xuegod63 dtadmin~]# echo "1" >> /opt/zookeeper/data/myid
[root@xuegod64 dtadmin~]# echo "2" >> /opt/zookeeper/data/myid
[root@xuegod62 dtadmin~]# echo "3" >> /opt/zookeeper/data/myid
10.启动zookeeper
在ZooKeeper集群的每个结点上,执行启动ZooKeeper服务的脚本。
[root@xuegod63 dtadmin~]# zkServer.sh start
[root@xuegod64 dtadmin~]# zkServer.sh start
[root@xuegod62 dtadmin~]# zkServer.sh start
11.验证zookeeper各个节点状态
[root@xuegod63 dtadmin~]# zkServer.sh status
[root@xuegod64 dtadmin~]# zkServer.sh status
[root@xuegod62 dtadmin~]# zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper/bin/../conf/zoo.cfg
Mode: leader
发现xuegod62是leader 其他结点是follower 。ID最大的为leader。
[root@xuegod62 ~]# netstat -antup | grep 888 #leader上监听2888和3888端口
tcp6 0 0 192.168.1.165:3888 :::* LISTEN 3073/java
tcp6 0 0 192.168.1.165:2888 :::* LISTEN 3073/java
其他结点上只监听3888端口:
[root@xuegod63 ~]# netstat -antup | grep 888
tcp6 0 0 192.168.1.163:3888 :::* LISTEN 45118/java
链接客户端测试: