Zookeeper完全分布式集群的搭建
一、集群模式
1、单机模式
在zoo.cfg中只配置一个server.id就是单机模式了。
这种模式下,如果当前主机宕机,那么所有依赖于当前zookeeper服务工作的其他服务器都不能在进行正常工作,这种事件称为单节点故障。所以这种模式一般用在测试环境。
2、伪分布式
在zoo.cfg中配置多个server.id,其中ip都是当前机器,而端口各不相同,启动时就是伪集群模式了。
这种模式和单机模式产生的问题是一样的。这种模式也是用在测试环境中。
3、完全分布式
多台机器各自配置zoo.cfg文件,将各自互相加入服务器列表,上面搭建的集群就是这种完全分布式。
这种模式是真实生产环境中使用的zookeeper集群模式。
二、zookeeper完全分布式集群的搭建
搭建zookeeper集群需要最少三台机器,需要安装jdk作为基础支持。此次使用的Zookeeper3.4.7版本。
1、准备虚拟机
准备三台虚拟机,将ip和端口规划好。这里最好将主机名,以及主机名和ip的映射关系配置到/etc/hosts内
vim /etc/hosts # 填入以下内容,如果之前已经添加过,则忽略此操作 127.0.0.1 localhost ::1 localhost 192.168.234.21 spark01 192.168.234.22 spark02 192.168.234.23 spark03
2、安装jdk
如果已经安装,则忽略
1、将jdk安装包上传、解压安装包,并更名,命令如下:
tar -zxvf jdk1.8.0_131.tar.gz -C /data/aicu-tob/software/
2、修改/etc/profile, 在文件行尾加入以下内容后保存退出。
export JAVA_HOME=/data/aicu-tob/software/jdk1.8.0_131
export PATH=$PATH:$JAVA_HOME/bin
3、搭建集群
3.1.下载安装包
下载zookeeper的安装包,下载地址:http://zookeeper.apache.org/ 上传到linux集群环境下,规划自己的管理目录,解压安装包。
mkdir -p /data/aicu-tob/software tar -zxvf zookeeper-3.4.10.tar.gz -C /data/aicu-tob/software
3.2.集群配置
3.2.1 修改配置文件zoo.cfg
# 进入conf目录,复制zoo-sample.cfg重命名为zoo.cfg,通过修改zoo.cfg来对zookeeper进行配置。这个名字固定写死,因为zookeeper启动会检查这个文件,根据这个配置文件里的信息来启动服务。 cd /data/aicu-tob/software/zookeeper-3.4.10/conf cp zoo-sample.cfg zoo.cfg # vim zoo.cfg,此文件中需要修改以下两处: 1、dataDir:指定zookeeper将数据保存在哪个目录下,如果不修改,默认在/tmp下,这个目录下的数据有可能会在磁盘空间不足或服务器重启时自动被linux清理,所以一定要修改这个地址。按个人习惯将其修改为自己的管理目录。 dataDir=/data/aicu-tob/software/zookeeper-3.4.10/data dataLogDir=/data/aicu-tob/software/zookeeper-3.4.10/logs 2、完全分布式:多台机器各自配置,zookeeper有几个节点,就配置几个server。例如本文宗总共三台主机,于是在配置文件末尾加上下面三行,可以填写ip也可以是/etc/hosts的主机名,建议后者,可以充分解耦 server.1=spart01:2888:3888 server.2=spart02:2888:3888 server.3=spart03:2888:3888 # 注意:一定要跟自己的myid配置对应上,否则集群一直处于非正常状态 myid文件中就是N,则对应zoo.cfg 中server.{N} ,关于myid配置,见下一小节 zookeeper服务默认的端口号为2888和3888,2888原子广播端口,3888选举端口,
3.2.2 myid
到dataDir指定目录下生成一个文件叫myid(必须叫这个名字),其中写上一个数字表明当前机器是哪一个编号的机器,注意:本机的myid内容一定要与server.{N}保持一致
# 在spart01主机 vim myid 1
3.2.3.拷贝
#将以上Zookeeper文件夹远程拷贝到另外两台服务器中: scp -r /data/aicu-tob/software/zookeeper-3.4.10 root@spart02 scp -r /data/aicu-tob/software/zookeeper-3.4.10 root@spart03 #然后修改另外两台服务器中的myid文件中的id即可。 #spart02 vim myid 2 #spart03 vim myid 3
4、启动zookeeper
启动zookeeper的各种命令操作如下,可以使用绝对路径操作这些命令,也可使用相对路径操作这些命令,相对路径需要进到zookeeper服务的bin目录进行操作
#启动ZK服务,Zookeeper集群需要每台挨个启动。 bin/zkServer.sh start #停止ZK服务: bin/zkServer.sh stop #重启ZK服务: bin/zkServer.sh restart #查看ZK服务状态: bin/zkServer.sh status # 依次查看三台主机,会发现某一台被选举为leader,其余两台为follower 也可以是用jps命令查看线程
启动集群的时候,集群数量启动没有超过一半,状态会有错误提示,当集群启动数量超过一半就会自动转为正常状态,并且此台使集群进入正常工作状态的服务器会成为leader角色,集群中其他服务器的角色为fllower。 Zookeeper集群模式搭建到此完成。
5、测试zookeeper
5.1 在Zookeeper上测试数据同步
在spart01上操作:
# 1、切换目录 cd /data/aicu-tob/software/zookeeper-3.4.10 # 2、客户登陆, ./bin/zkCli.sh 注意zoo.cfg如果修改了clientPort,例如clientPort=8131,那么此处需要指定参数 ./bin/zkCli.sh -server localhost:8131 # 本实验是登陆本机操作,当然localhost也可以是其他zk主机 WatchedEvent state:SyncConnected type:None path:null [zk: localhost:2181(CONNECTED) 0] ls / [zookeeper] [zk: localhost:2181(CONNECTED) 1] get /zookeeper cZxid = 0x0 ctime = Thu Jan 01 08:00:00 CST 1970 mZxid = 0x0 mtime = Thu Jan 01 08:00:00 CST 1970 pZxid = 0x0 cversion = -1 dataVersion = 0 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 0 numChildren = 1 [zk: localhost:2181(CONNECTED) 3] create /hadoop123 123 //创建一个hadoop123文件并且值为:123 Created /hadoop123 [zk: localhost:2181(CONNECTED) 4] ls / #查看是否创建好了 [hadoop123, zookeeper] [zk: localhost:2181(CONNECTED) 5] get /hadoop123 #获取文件的值 123 cZxid = 0x200000002 ctime = Fri Mar 25 09:54:20 CST 2016 mZxid = 0x200000002 mtime = Fri Mar 25 09:54:20 CST 2016 pZxid = 0x200000002 cversion = 0 dataVersion = 0 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 3 numChildren = 0 [zk: localhost:2181(CONNECTED) 6]
在spart02和spart03上查看在sparrk01上创建文件是否同步过来:
./bin/zkCli.sh -server localhost:8131 [zk: localhost:2181(CONNECTED) 0] ls / #显示hadoop123同步过来了 [hadoop123, zookeeper] [zk: localhost:2181(CONNECTED) 1] get /hadoop123 #获取hadoop123文件内容 123 cZxid = 0x200000002 ctime = Fri Mar 25 09:54:20 CST 2016 mZxid = 0x200000002 mtime = Fri Mar 25 09:54:20 CST 2016 pZxid = 0x200000002 cversion = 0 dataVersion = 0 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 3 numChildren = 0 [zk: localhost:2181(CONNECTED) 2]
5.2 测试Zookeeper故障角色转移
所先查看spark01、spark02、spark03上角色状态
然后把leader干掉,然后会发现选举出一个新的leader,如果重启挂掉的zk,它会变成follower