1、安装及配置
首先,再安装前,需要安装并配置好JDK(选择Oracle Java8 SE)。
其次,需要下载Zookeeper安装包,比如本例:zookeeper-3.4.9.tar.gz(可从Apache网站上下载http://www.apache.org/dyn/closer.cgi/zookeeper/),建议选择相对稳定的版本,不要选择最新版。
然后需要对其进行解压,解压的目标目录可以自定义,比如本例为/usr/server等:
[root@ZookeeperA server]# tar –zxvf zookeeper-3.4.9.tar.gz
打开 /etc/profile文件,并在文件末尾加入如下路径信息:
export ZOOKEEPER_HOME=/usr/server/zookeeper-3.4.9
export PATH=$PATH:$ZOOKEEPER_HOME/bin:$ZOOKEEPER_HOME/conf
然后使修改生效:
[root@ZookeeperA /]# source /etc/profile
最后,需要创建两个必备的目录(可以在任意路径下,本例在zookeeper的主目录下创建),一个用于装数据,另一个用于装日志,这两个目录必须创建,否则将会在使用过程中报错;
建议不要使用同一个目录,目录名建议采用data和log:
[root@ZookeeperA zookeeper-3.4.9]# mkdir data
[root@ZookeeperA zookeeper-3.4.9]# mkdir log
2、配置集群
2.1、修改主机名
需要事先将每一台服务器名称修改成指定的主机名:
[root@localhost /]# hostname
Localhost.localdomain
本例设置主机名分别为ZookeeperA、ZookeeperB和ZookeeperC,其中针对ZookeeperA的设置如下所示:
[root@localhost /]# hostnamectl --static set-hostname ZookeeperA
[root@localhost /]# hostname
ZookeeperA
2.2、配置主机
首先需要配置主机的访问列表,在/etc/hosts文件中,将集群中的所有主机及其IP地址进行配置及映射,如下所示:
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.1.70 ZookeeperA
192.168.1.71 ZookeeperB
192.168.1.72 ZookeeperC
其中黑色内容为配置的内容,分别配置了ZookeeperA、ZookeeperB和ZookeeperC三台服务器可以互访,需要分别在这三台机器的/etc/hosts文件添加此内容。
特别需要注意:
127.0.0.1一行一定不能做修改,若做了修改(比如讲本机名称localhost进行了映射),zookeeper启动后将会出现无法连接网络错误;
在分布式环境中,一定要忘记本机 (localhost/127.0.0.1) 的概念,完全用静态IP来设置和定义。
127.0.0.1 localhost ZookeeperA localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.1.70 ZookeeperA
192.168.1.71 ZookeeperB
192.168.1.72 ZookeeperC
2.3、配置文件
需要进入zookeeper的conf路径下,将已存在的一个模板文件(zoo_sample.cfg)复制成zookeeper的配置文件(zoo.cfg)
[root@ZookeeperA conf]# cp zoo_sample.cfg zoo.cfg
首先,要在zoo.cfg文件中修改数据路径以及增加log日志路径设置,如下所示:
数据路径,用于存放myid文件等
dataDir=/usr/server/zookeeper-3.4.9/data
日志文件路径,用于存放日志
dataLogDir=/usr/server/zookeeper-3.4.9/log
然后打开该文件并添加如下代码:
server.70=ZookeeperA:2888:3888
server.71=ZookeeperB:2888:3888
server.72=ZookeeperC:2888:3888
本例设定仅使用三台服务器作为zookeeper的集群,按照如下格式进行配置:
server.id=host:port:port
其中其中host名称和port可以自定义,参数的含义如下:
例子中,ZookeeperA、ZookeeperB和ZookeeperC为三台服务器的主机名,service.70通常会配置成master主机,其他的配置成slave主机。
其次,第一个port(2888,默认端口号,可以自定义)是“从服务器(follower)”连接到”主服务器(leader)“的端口号,第二个port(3888,默认端口号,可以自定义)是进行leadership选举的端口号
2.4、设置MYID
然后在zoo.cfg 文件中配置的dataDir参数的路径下(此路径可以任意修改,默认为”/tmp/zookeeper”),创建myid文件,并将与本机对应的service.n(本例为70~72)的n写入文件,通常service. 后面的的数字n可以取IP地址的最后一位,比较好识别。
[root@ZookeeperA data]# vi myid
若本机为ZookeeperA,IP设为192.168.1.70,则文件内容如下
70
然后将本机配置和安装内容全部复制到其他机器中:
[root@ZookeeperA data]# scp –r zookeeper-3.4.9/ KafkaB:/usr/server/zookeeper-3.4.9
[root@ZookeeperA data]# scp –r zookeeper-3.4.9/ KafkaC:/usr/server/zookeeper-3.4.9
再分别到ZookeeperB和ZookeeperC中修改dataDir参数指定的路径下的myid文件内容,将与本机对应的service.n(本例为70~72)的n写入文件,如本机为ZookeeperB,IP设为192.168.1.71,则文件内容如下
71
为ZookeeperC,IP设为192.168.1.72,则文件内容如下
72
也可以采用Linux中简便写法(文件中仅有一行):
[root@ZookeeperA data]# echo “72” > /usr/server/zookeeper-3.4.9/data/myid
2.5、配置防火墙
最后,打开防火墙端口:2888、3888、2181,具体开放的端口是那个,需要根据配置的服务器参数:server.id=host:port:port以及zoo.cfg中clientPort参数来确定:
[root@ZookeeperA zookeeper]# firewall-cmd --permanent --zone=public --add-port=2888/tcp
[root@ZookeeperA zookeeper]# firewall-cmd --permanent --zone=public --add-port=3888/tcp
[root@ZookeeperA zookeeper]# firewall-cmd --permanent --zone=public --add-port=2181/tcp
3、启动集群
配置完成后,需要分别在每一台服务器上执行启动,首先进入zookeeper安装目录下的bin目录下,执行zkServer启动即可(建议,在启动集群之前,将每台服务器重启动一次):
[root@ZookeeperA bin]# zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /usr/server/zookeeper-3.4.9/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
然后再执行如下命令:
[root@ZookeeperA bin]# jps
2983 QuorumPeerMain
3128 Jps
当看你到此信息,其中包含QuorumPeerMain(Zookeeper的进程名)时,代表当前结点成功启动;若没有启动,可以通过如下命令,查看启动过程出现的问题:
[root@ZookeeperA bin]# zkServer.sh start-foreground
此命令将会列出启动时遇到的各种异常错误等信息。
可以在任意一台主机上执行如下命令,查看当前主机在集群中节点的状态:
[root@ZookeeperB bin]# zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/server/zookeeper-3.4.9/bin/../conf/zoo.cfg
Mode: follower
本例显示ZookeeperB机器处于zookeeper的follower模式。
[root@ZookeeperC bin]# zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/server/zookeeper-3.4.9/bin/../conf/zoo.cfg
Mode: leader
本例显示ZookeeperC机器处于zookeeper的leader模式。
4、客户端访问
配置完成后,可以使用zookeeper自带的控制台客户端来查看安装是否成功。
[root@ZookeeperB bin]# ./zkCli.sh -server ZookeeperA:2181
Connecting to ZookeeperA:2181
2016-09-14 18:03:43,829 [myid:] - INFO [main:Environment@100] – Client
…
Welcome to ZooKeeper!
…
[zk: ZookeeperA:2181(CONNECTED) 0]
至此,已经成功进入了客户端,并链接到了ZookeeperA服务器的2181端口。
通过如下命令可以查看节点:
[zk: ZookeeperA:21810(CONNECTED) 0] ls /
[zookeeper]
[zk: ZookeeperA:21810(CONNECTED) 1]