大部分转载自学长的博客:
zookeeper的配置和zookeeper集群的时间同步设置
zookeeper配置、时间同步
zookeeper介绍
ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。它还支持Java和C语言。
以下是Zookeeper原理图:
前置条件
首先我们需要一个hadoop集群,如果不知道如何搭建一个小型的hadoop集群的同学可以查看我上一篇的博文:
Hadoop的安装、配置、初步使用!(附加集群)
安装包
有需要的小伙伴可以在评论区留言!
老样子,让我们用tar
和mv
命令,对安装包解压、移动并重命名
环境变量
export ZK_HOME=/opt/zk <---这里为zookeeper的路径,因人而异
export PATH=$PATH:$ZK_HOME/bin <---如果已经有PATH,请添加在其中
修改后,我的profile文件如下图所示:
最后别忘了source /etc/profile
使其生效
zookeeper配置
第一步
进入zookeeper目录下的conf文件夹cd /opt/zk/conf
,我们会发现一个名为zoo_sample.cfg
的样本文件,这是给我们的一个模板。可以在这个文件里进行添加,但是要记得保存退出后,将文件名改为zoo.cfg
或者你也可以跟着我,新建一个名为zoo.cfg
的文件
添加的具体内容如下:
# The number of milliseconds of each tick
tickTime=2000
#最大访问数:不限制
maxClientCnxns=0
# The number of ticks that the initial
# synchronization phase can take
#初始化最小进程数:50
initLimit=50
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
#数据目录
dataDir=/opt/zk/zkdata <---zookeeper目录/zkdata,目前还没有zkdata这个文件,我们一会来创建它
#日志目录
dataLogDir=/opt/zk/zkdatalog <---同上
# the port at which the clients will connect
clientPort=2181
#配置三台以上的奇数台可用机器主机名或者ip,注如果不配集群不需要添加以下内容,2888是通信端口,3888是选举通信端口
server.1=hadoop01:2888:3888 <---这里的主机名请根据个人实际情况修改
server.2=hadoop02:2888:3888
server.3=hadoop03:2888:3888
第二步
保存退出后,返回到/opt/zk
zookeeper目录下,使用mkdir
命令,创建数据目录和日志目录,注意这里的目录名要和刚才在zoo.cfg
里的保持一致,这里的操作在集群内的另外几台机器上也要实行
另外,我们可以使用scp /opt/zk.conf/zoo.cfg root@hadoop02:/opt/zk/conf
将配置好的zoo文件发送给集群内的其他机器
第三步
进入刚才建好的/opt/zk/conf
目录,创建myid文件vi myid
,在文件内输入刚才对应server.
的后面的数字
比如我现在在hadoop01上修改,刚才zoo.cfg里
hadoop01的前面是server.1,那么myid里就是1,以此类推,在其他机器上也进行同样的操作
配置集群的时间同步
第一步
首先,先确认是否安装过ntp: rpm -qa | grep ntp
,如果有的话使用yum -y remove
相关文件名命令卸载
安装ntpyum -y install ntp
第二步
修改所有节点的ntp配置文件vi /etc/ntp.conf
,添加如下内容:
#当前节点IP地址
restrict 192.168.23.50 nomodify notrap nopeer noquery
#集群所在网段的网关Gateway,子网掩码Genmask
restrict 192.168.23.1 mask 255.255.255.0 nomodify notrap <---这里为IP地址,最后一位为1
第三步
选择一个机器作为主节点,修改其/etc/ntp.conf
,内容如下:
server 127.127.1.0
fudge 127.127.1.0 stratum 10
其他机器修改/etc/ntp.conf
,将server指向主节点,内容如下:
server 192.168.23.50 <---被设为主节点的IP地址
fudge 192.168.23.50 stratum 10
其中,不管为主节点还是子节点,都要注释如下内容:
第四步
- 启动ntp服务
service ntpd start
- 设置开机自启动
chkconfig ntpd on
- 查看ntp状态
ntpstat
,除主机器外出现如下画面即同步成功:
如果是如下,请耐心等待若干分钟(笔者装了几次,体感大约10分钟才能同步好):
启动和关闭ZooKeeper并验证
启动命令zkServer.sh start
关闭命令zkServer.sh stop
输入jps查看进程,如果出现QuorumPeerMain
服务,即启动成功!
当所有机器执行完上述命令后,再在每台机器上执行zkServer.sh status
查看每台机器的Zookerpeer状态,正确的状态是只有一台机器是leader,其余机器都显示follower,这是根据它们自己投票选举出来的!
示例:
总结
最后还是感谢学长博客提供的诸多帮助!