Zookeeper简介
Zookeeper 分布式服务框架是Apache Hadoop 的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等
Zookeeper 作为一个分布式的服务框架,主要用来解决分布式集群中应用系统的一致性问题,它能提供基于类似于文件系统的目录节点树方式的数据存储, Zookeeper 作用主要是用来维护和监控存储的数据的状态变化,通过监控这些数据状态的变化,从而达到基于数据的集群管理。
环境搭建:
环境准备:
centos7
jdk1.8(zookeeper要求Java运行环境,并且需要jdk版本1.6以上。linux查看jdk版本:java -version)
zookeeper安装
1.zookeeper安装包上传,安装:
1.1打开虚拟机,进入终端,输入 ifconfig 查看虚拟机ip地址
1.2通过SSH链接虚拟机
点击connect链接输入密码
1.3上传安装包
链接成功以后,点击黄色文件夹,打开文档界面
文档界面进入usr目录下,点击New Foider选项,新建文件目录名为zookeeper-3.4.6,将安装包上传到该目录
zookeeper-3.4.6下载地址:http://archive.apache.org/dist/zookeeper/zookeeper-3.4.6/
1.4解压安装包
进入到新建的zookeeper-3.4.6安装目录
cd usr/zookeeper-3.4.6/
通过 tar -xzcf zookeeper-3.4.6.tar.gz 命令来进行解压安装包,输入 ll 命令查看是否解压完成
2、在/usr/local创建solrcloud目录,把解压后的文件复制3份到此目录下。分别命名为zookeeper1、zookeeper2、zookeeper3
mkdir /usr/local/solrcloud
mkdir创建文件夹
mv zookeeper-3.4.6 /usr/local/solrcloud/zookeeper1
mv 原文件名 目标文件名 :移动文件的同时,将其改名为“目标文件”名
cd /usr/local/solrcloud
进入到solrcloud目录下
cp -r zookeeper1/ zookeeper2
cp -r 复制:zookeeper1复制一个文件名为zookeeper2的文件
cp -r zookeeper1/ zookeeper3
cp -r 复制:zookeeper1复制一个文件名为zookeeper3的文件3、配置zookeeper: (solrcloud目录下)
在每个zookeeper文件夹下创建data目录,并在data目录下创建一个myid文件,文件内容为zookeeper编号1、2、3
zookeeper文件夹下创建data目录:mkdir zookeeper1/data
data目录下创建myid文件:
echo 1 >> zookeeper1/data/myid
(注:配置完成以后最好查看一下,多执行一次命令就会添加一条,server id 如果和myid对应不上,zk会启动不起来)
4、把zookeeper1下conf目录的zoo_sample.cfg文件复制一份改名为zoo.cfg
4.1 通过下面命令进入zookeeper1目录下的conf文件中
cd usr/local/solrcloud/zookeeper1/conf
4.2 将zoo_sample.cfg文件复制一份改名为zoo.cfg
cp zoo_sample.cfg zoo.cfg
4.3修改zoo.cfg文件:
vi zoo.cfg
进入编辑模式以后按键盘键“i”进行编辑
把dataDir=属性指定为刚创建的data文件夹
clientPort=修改端口(伪分布式由于相同IP,必须更改,集群不需要)
在clientPort下添加以下信息
server.1=127.0.0.1:2881:3881
server.2=127.0.0.1:2882:3882
server.3=127.0.0.1:2883:3883
添加完成以后,按ESC键,输入:wq! 保存并退出 ,Enter回车键退出编辑
2881和3881随便写,不冲突就行。投票端口和选举端口
zookeeper2和zookeeper3重复以上步骤:(重复4.1, 4.2, 4.3步骤)
5,启动zookeeper集群
5.1进入zookeeper目录bin目录下通过 ./zkServer.sh status 启动zookeeper
cd usr/local/solrcloud/zookeeper1/bin/
./zkServer.sh start
5.2查看集群状态:通过./zkServer.sh status来进行查看(集群一定要全部启动以后再查看状态,查看是否全部启动正常)
./zkServer.sh status
查看状态为:一主两从:leader为主机,follower为从机,说明配置完成。
5.3关闭zookeeper:
进入bin目录下,通过./zkServer.sh stop来关闭zookeeper
./zkServer.sh stop
后来启动zookeeper的时候,进入每个目录去启动太麻烦了,就写了一个批量脚本
vi start-zookeeper-all.sh
添加路径,保存并退出
/usr/local/solrcloud/zookeeper1/bin/zkServer.sh start
/usr/local/solrcloud/zookeeper2/bin/zkServer.sh start
/usr/local/solrcloud/zookeeper3/bin/zkServer.sh start
这时候还没有运行权限,需要添加权限:
chmod u+x start-zookeeper-all.sh
添加完成权限以后,通过批量文件就可以启动全部zookeeper了
./start-zookeeper-all.sh
注意:
1、如果查看状态报错:首先看看/bin/zookeeper.out 日志文件,看看报的什么错误;
2. 如果遇到了myid file is missing错误:
2.1 先去看看conf/zoo.cfg配置文件中的dataDir路径是否是你想要配置的路径,是否和异常中的一样;
2.2 如果一样,再去查看有没有myid这个文件,如果没有的话,就在dataDir指定的路径下创建myid,然后 写 入id(需要和server.X一致)的值(1-255),只需要一个数字剩下的啥也不用写;如果路径不一样,myid文件需要和dataDir指定的目录一致,如果有myid文件,查看myid文件中的值是否一致,是否只有一个数字。
2.3 如果都配置正确有可能是因为防火墙导致的,所以查看一下防火墙,或者关闭它试试;
关闭命令:
systemctl status firewalld.service #检查防火墙状态
systemctl stop firewalld.service #关闭防火墙
systemctl disable firewalld.service #禁止开机启动防火墙
关闭SELINUX,通过如下命令:
vim /etc/selinux/config
#SELINUX=enforcing #注释掉
#SELINUXTYPE=targeted #注释掉
SELINUX=disabled #增加
2、如果一直java.net.ConnectException: 拒绝连接:
进入到etc目录下,编辑hosts文件,注释掉 127.0.0.1 的配置,然后再新重启zookeeper试一下