| 在zoo.cfg中只配置一个server.id就是单机模式了。 |
| |
| 这种模式下,如果当前主机宕机,那么所有依赖于当前zookeeper服务工作的其他服务器都不能在进行正常工作,这种事件称为单节点故障。所以这种模式一般用在测试环境。 |
| 在zoo.cfg中配置多个server.id,其中ip都是当前机器,而端口各不相同,启动时就是伪集群模式了。 |
| |
| 这种模式和单机模式产生的问题是一样的。这种模式也是用在测试环境中。 |
| 多台机器各自配置zoo.cfg文件,将各自互相加入服务器列表,上面搭建的集群就是这种完全分布式。 |
| |
| 这种模式是真实生产环境中使用的zookeeper集群模式。 |
| 搭建zookeeper集群需要最少三台机器,需要安装jdk作为基础支持。此次使用的Zookeeper3.4.7版本。 |
| 准备三台虚拟机,将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 |
如果已经安装,则忽略
| tar -zxvf jdk1.8.0_131.tar.gz -C /data/aicu-tob/software/ |
| export JAVA_HOME=/data/aicu-tob/software/jdk1.8.0_131 |
| export PATH=$PATH:$JAVA_HOME/bin |
下载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 |
| |
| cd /data/aicu-tob/software/zookeeper-3.4.10/conf |
| cp zoo-sample.cfg 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 |
| |
| zookeeper服务默认的端口号为2888和3888,2888原子广播端口,3888选举端口, |
到dataDir指定目录下生成一个文件叫myid(必须叫这个名字),其中写上一个数字表明当前机器是哪一个编号的机器,注意:本机的myid内容一定要与server.{N}保持一致
| |
| scp -r /data/aicu-tob/software/zookeeper-3.4.10 root@spart02 |
| scp -r /data/aicu-tob/software/zookeeper-3.4.10 root@spart03 |
| |
| |
| |
| vim myid |
| 2 |
| |
| |
| vim myid |
| 3 |
启动zookeeper的各种命令操作如下,可以使用绝对路径操作这些命令,也可使用相对路径操作这些命令,相对路径需要进到zookeeper服务的bin目录进行操作
| |
| bin/zkServer.sh start |
| |
| bin/zkServer.sh stop |
| |
| bin/zkServer.sh restart |
| |
| bin/zkServer.sh status |
| |
| 也可以是用jps命令查看线程 |
启动集群的时候,集群数量启动没有超过一半,状态会有错误提示,当集群启动数量超过一半就会自动转为正常状态,并且此台使集群进入正常工作状态的服务器会成为leader角色,集群中其他服务器的角色为fllower。 Zookeeper集群模式搭建到此完成。
在spart01上操作:
| |
| cd /data/aicu-tob/software/zookeeper-3.4.10 |
| |
| |
| ./bin/zkCli.sh |
| |
| 注意zoo.cfg如果修改了clientPort,例如clientPort=8131,那么此处需要指定参数 |
| ./bin/zkCli.sh -server localhost:8131 |
| |
| 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, zookeeper] |
| [zk: localhost:2181(CONNECTED) 1] 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) 2] |
所先查看spark01、spark02、spark03上角色状态
然后把leader干掉,然后会发现选举出一个新的leader,如果重启挂掉的zk,它会变成follower