集群三部曲(一):完美的Zookeeper集群搭建

    今天搭建Zookeeper集群时,遇到了一些问题,好头疼的说,不过,也通过自己动手实践理解了许多,总的来说,实践出真知,当真不错。下面说下集群的搭建吧,希望能够帮助大家。

    一、环境:虚拟机CentOs7系统,完整的环境,请确认已安装JDK,Zookeeper,可通过克隆已配置好的虚拟机环境,如下:

    具体的克隆步骤自行百度,很简单。注意集群部署的节点至少为3个,更多时为奇数个。此次开启3个节点进行集群部署。

    二、网络配置:默认的NAT连接,可保证虚拟机之间的连接

    (1)修改主机名

vim /etc/sysconfig/network

    修改后内容为:

# Created by anaconda
NETWORKING=yes
HOSTNAME=slave01

    其他两个虚拟机同样如此设置,分别命名为:slave02,slave03。

    (2)修改主机IP地址

vim /etc/sysconfig/network-scripts/ifcfg-lo

    该文件名称可能不尽相同,但前缀一致,修改后内容为:

DEVICE=lo
IPADDR=虚拟机IP
NETMASK=255.255.255.0
NETWORK=网络地址
# If you're having problems with gated making 127.0.0.0/8 a martian,
# you can change this to something else (255.255.255.255, for example)
BROADCAST=127.255.255.255
ONBOOT=yes
NAME=loopback

    根据自己虚拟机的IP进行设置,查看IP的命令:ifconfig,其他两个虚拟机同样如此设置,文件里的参数表示为(若无,可忽略),设置完成后,执行命令 service network restart:   

DEVICE=eth0                 //指出设备名称
BOOTPROT=static             //启动类型 dhcp|static,使用桥接模式,必须是static
HWADDR=00:06:5B:FE:DF:7C    //硬件Mac地址
IPADDR=192.168.0.2          //IP地址
NETMASK=255.255.255.0       //子网掩码
NETWORK=192.168.0.0         //网络地址
GATEWAY=192.168.0.1         //网关地址
ONBOOT=yes                  //是否启动应用
TYPE=Ethernet               //网络类型

    (3)设置主机名与IP地址映射

vim /etc/hosts

    修改后内容为:

#127.0.0.1      slave01 localhost.localdomain localhost
::1             slave01
虚拟机IP1      slave01
虚拟机IP2      slave02
虚拟机IP3      slave03

    注意,将/etc/hosts中的127.0.1.1这一行注释掉,后面启动可能会拒绝连接的错误。其他两个虚拟机同样如此设置,注意映射的主机名和IP不要弄乱了。

    三、网络连通测试

    前面所有的配置完成后,重启这三个虚拟机,使主机名生效,然后分别在三个虚拟机上测试连通性:

#在slave01上测试
ping slave02
ping slave03
#在slave02上测试
ping slave01
ping slave03
#在slave03上测试
ping slave01
ping slave02

    测试以上命令,若通过,则表示三台虚拟机之间互通。当然也可以测试下与外网的连通性:

ping www.baidu.com

    四、Zookeeper集群搭建

    (1)环境配置,省略,请配置好需要的环境

    (2)Zookeeper配置文件zoo.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/local/zookeeper/data
# the port at which the clients will connect
clientPort=2181
server.0=slave01:2888:3888
server.1=slave02:2888:3888
server.2=slave03:2888:3888

    注意参数的意义,在此不多说了。注意,dataDir的路径,修改完配置文件后,务必在该路径下生成设置的文件夹,如上data文件夹,同时,server.0、server.1、server.2和data文件夹下的myid文件中的值对应,该myid自己创建并添加对应的值,分别为:0,1,2。

    (3)完成配置后,进行集群测试

#在slave01上启动Zookeeper

./zkServer.sh start

#在slave02上启动Zookeeper

./zkServer.sh start

#在slave03上启动Zookeeper

./zkServer.sh start

    启动后显示为:

[hadoop@slave01 bin]$ ./zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED

    执行命令 jps 可查看是否启动成功,有该进程存在:

[hadoop@slave01 bin]$ jps
5370 Jps
5342 QuorumPeerMain

    当三台虚拟机都成功启动后,分别在各自虚拟机上执行如下命令:

[hadoop@slave01 bin]$ ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Mode: follower
[hadoop@slave02 bin]$ ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Mode: leader
[hadoop@slave03 bin]$ ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Mode: follower

    启动和查看status时,注意防火墙是否关闭,CentOs7默认为firewall:

查看防火墙状态:firewall-cmd –-state
关闭防火墙:systemctl stop firewalld.service


    至此,Zookeeper集群已经部署成功了(另外,最好使用Hadoop创建的用户进行操作,root用户未测试,大家可以试一试)。

文章来源:

Author:海岸线的曙光
link:https://my.oschina.net/u/3747963/blog/1635507