四、Zookeeper单机和集群

为什么使用Zookeeper?

大部分分布式应用需要一个主控、协调器或控制器来管理物理分布的子进程(如资源、任务分配等)
目前,大部分应用需要开发私有的协调程序,缺乏一个通用的机制
协调程序的反复编写浪费,且难以形成通用、伸缩性好的协调器
ZooKeeper:提供通用的分布式锁服务,用以协调分布式应用

Zookeeper能帮我们做什么?

Hadoop2.0,使用Zookeeper的事件处理确保整个集群只有一个活跃的NameNode,存储配置信息等.
HBase,使用Zookeeper的事件处理确保整个集群只有一个HMaster,察觉HRegionServer联机和宕机,存储访问控制列表等.

Zookeeper的特性

Zookeeper是简单的
Zookeeper是富有表现力的
Zookeeper具有高可用性
Zookeeper采用松耦合交互方式
Zookeeper是一个资源库

Zookeeper单机
单机模式:

1) 首先下载zookeeper压缩包
wget http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.4.8/zookeeper-3.4.8.tar.gz

2) 解压缩

首先创建文件夹,这里放到/user/local/zk/cloud/文件夹下
tar -zxvf zookeeper-3.4.8.tar.gz -C /user/local/zk/cloud/zookeeper1
tar -zxvf zookeeper-3.4.8.tar.gz -C /user/local/zk/cloud/zookeeper2
tar -zxvf zookeeper-3.4.8.tar.gz -C /user/local/zk/cloud/zookeeper3

3)运行单价环境
跳转到对应目录:cd /usr/local/zk/cloud/zookeeper1/conf
修改配置文件名:mv zoo_sample.cfg zoo.cfg
跳转到对应目录:cd /usr/local/zk/cloud/zookeeper1/bin
启动zookeeper :./zdServer.sh start

4) 使用java 客户端连接ZooKeeper
跳转到对应目录:cd /usr/local/zk/cloud/zookeeper1/bin
启动zookeeper客户端 :./zkCli.sh -server 127.0.0.1:2181
启动完成之后测试一下:
create /name “xiangping”
get /name :如果可以得到值就可以了

5) 关闭
跳转到对应目录:cd /usr/local/zk/cloud/zookeeper1/bin
关闭zookeeper :./zdServer.sh stop

Zookeeper集群(单机中做集群)
所谓 “伪分布式集群” 就是在,在一台PC中,启动多个ZooKeeper的实例。“完全分布式集群” 是每台PC,启动一个ZooKeeper实例。

ZooKeeper不存在明显的master/slave关系,各个节点都是服务器,leader挂了,会立马从follower中选举一个出来作为leader.

由于没有主从关系,也不用配置SSH无密码登录了,各个zk服务器是自己启动的,互相之间通过TCP端口来交换数据

创建环境目录

1.切换到/usr/local/zk/cloud/路径下,把解压好的zookeeper复制三份,zookeeper1,zookeeper2,zookeeper3

2.创建三个myid文件:

~ echo “1” > /usr/local/zk/cloud/zookeeper1/myid
~ echo “2” > /usr/local/zk/cloud/zookeeper2/myid
~ echo “3” > /usr/local/zk/cloud/zookeeper3/myid

注意:myid只能为数字,因为我试验了下,包含英文的话zk启动不起来,抛出异常

3.修改配置文件

vi /usr/local/zk/cloud/zookeeper1/conf/zoo.cfg

initLimit=10
syncLimit=5
dataDir=/usr/local/zk/cloud/data/zookeeper1
clientPort=2181
server.1=127.0.0.1:2888:3888
server.2=127.0.0.1:2889:3889
server.3=127.0.0.1:2890:3890

vi /usr/local/zk/cloud/zookeeper2/conf/zoo.cfg

initLimit=10
syncLimit=5
dataDir=/usr/local/zk/cloud/data/zookeeper2
clientPort=2182
server.1=127.0.0.1:2888:3888
server.2=127.0.0.1:2889:3889
server.3=127.0.0.1:2890:3890

vi /usr/local/zk/cloud/zookeeper3/conf/zoo.cfg

initLimit=10
syncLimit=5
dataDir=/usr/local/zk/cloud/data/zookeeper3
clientPort=2183
server.1=127.0.0.1:2888:3888
server.2=127.0.0.1:2889:3889
server.3=127.0.0.1:2890:3890

启动每台机器

cd /usr/local/zk/cloud/
/zookeeper1/bin/zkServer.sh start
/zookeeper2/bin/zkServer.sh start
/zookeeper3/bin/zkServer.sh start

测试zookeeper集群:

cd /usr/local/zk/cloud/
/zookeeper1/bin/zkCli.sh -server 127.0.0.1:2181
启动完成之后:
create /name “xiangping”

cd /usr/local/zk/cloud/
/zookeeper2/bin/zkCli.sh -server 127.0.0.1:2182
启动完成之后:
get /name : 如果可以得到—”xiangping”就ok了

cd /usr/local/zk/cloud/
/zookeeper3/bin/zkCli.sh -server 127.0.0.1:2183
启动完成之后:
get /name : 如果可以得到—”xiangping”就ok了

zookeeper集群(多台机器集群)

我们使用三台机器搭建Zookeeper集群

设置ip地址与机器名分别为:

192.168.100.104 zookeeper1
192.168.100.105 zookeeper2
192.168.100.106 zookeeper3

1、 修改机器IP 可以在网络连接中直接使用鼠标操作

2、 修改机器名vim /etc/sysconfig/network 修改如下配置:HOSTNAME=机器名称,HOSTNAME=为你的机器名称,三台机器分别设置为:zookeeper1、zookeeper2、zookeeper3

3、 修改机器名称与IP地址对应关系:vim /etc/hosts

添加如下配置:

192.168.100.104 zookeeper1

192.168.100.105 zookeeper2

192.168.100.106 zookeeper3

4、 解压下载好的zookeeper-3.4.5.tar.gz

修改zoo.cfg文件
dataDir=/usr/local/zk/cloud/zookeeper-3.4.5/data

在文件中添加配置:

server.1=hadoop4:2888:3888

server.2=hadoop5:2888:3888

server.3=hadoop6:2888:3888

zook.cfg文件内容如下:

# The number of milliseconds of each tick

tickTime=2000

# The number of ticks that the initial

# synchronization phase can take

initLimit=10

# The number of ticks that can pass between

# sending a request and getting an acknowledgement

syncLimit=5

# the directory where the snapshot is stored.

# do not use /tmp for storage, /tmp here is just

# example sakes.

dataDir=/usr/zookeeper/data

# the port at which the clients will connect

clientPort=2181

#

# Be sure to read the maintenance section of the

# administrator guide before turning on autopurge.

#

# http://zookeeper.apache.org/doc/current
/zookeeperAdmin.html#sc_maintenance

#

# The number of snapshots to retain in dataDir

#autopurge.snapRetainCount=3

# Purge task interval in hours

# Set to "0" to disable auto purge feature

#autopurge.purgeInterval=1

server.1=zookeeper1:2888:3888
server.2=zookeeper2:2888:3888
server.3=zookeeper3:2888:3888

1.tickTime:CS通信心跳时间
Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个 tickTime 时间就会发送一个心跳。tickTime以毫秒为单位。
tickTime=2000

2.initLimit:LF初始通信时限
集群中的follower服务器(F)与leader服务器(L)之间初始连接时能容忍的最多心跳数(tickTime的数量)。
initLimit=5

3.syncLimit:LF同步通信时限
集群中的follower服务器与leader服务器之间请求和应答之间能容忍的最多心跳数(tickTime的数量)。
syncLimit=2

4.dataDir:数据文件目录
Zookeeper保存数据的目录,默认情况下,Zookeeper将写数据的日志文件也保存在这个目录里。
dataDir=/usr/zookeeper/data

5.clientPort:客户端连接端口
客户端连接 Zookeeper 服务器的端口,Zookeeper 会监听这个端口,接受客户端的访问请求。
clientPort=2181

6.服务器名称与地址:集群信息(服务器编号,服务器地址,LF通信端口,选举端口)
这个配置项的书写格式比较特殊,规则如下:
server.N=YYY:A:B

server.1=zookeeper1:2888:3888

server.2=zookeeper2:2888:3888

server.3=zookeeper3:2888:3888

5、 创建myid文件:在zoo.cfg中设置的dataDir对应的目录中(/usr/local/zk/cloud/zookeeper-3.4.5/data)创建myid文件

并添加如下内容:echo “N” > myid (N为唯一id(最方便可以写机器名称最后一位数字))

添加内容以后:touch myid

注意三台机器都要设置

6、 启动zookeeper进入zookeeper-3.4.5的bin目录:./zkServer.sh start 注意三台机器都要启动

使用 ./zkServer.sh status 可以查看状态,三台机器中有一台会是leader状态其它是follower状态

7、 测试zookeeper

进入zookeeper-3.4.5的bin目录:./zkCli.sh

创建一个文件 create /name “xiangping”

使用另外一台机器登录zookeeper: ./zkCli.sh

get /name -如果能获取到xiangping就可以了

阅读更多
所属专栏: Zookeeper
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭