1 准备:安装之前请自行安装jdk(如java8)
2 使用wget 命令或者xshell editplus工具远程上传tar包到Linux
(1)使用wget 命令下载zookeeper安装包到linux环境下
命令: wget http://archive.apache.org/dist/zookeeper/zookeeper-3.4.14/zookeeper-3.4.14.tar.gz
(2)推荐方法zookeeper-3.4.14.tar.gz(或者zookeeper-3.4.6.tar.gz等自己选择下载):
点击下载: https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/
3 解压zookeeper到安装目录(安装目录自己指定如:/usr/local/zk-standalone/)
tar -zxvf zookeeper-3.4.14.tar.gz -C /usr/local/zk-standalone/
重命名:
mv zookeeper-3.4.14.tar.gz zookeeper
进入到zookeeper的conf目录
cd zookeeper/conf/ && cp zoo_sample.cfg zoo.cfg
有三个文件,zookeeper的配置文件叫做zoo.cfg,这里边没有,我们把 zoo_sample.cfg 拷贝一份出来,
使用vim 编辑器编辑zoo.cfg 这是原本的配置,
我们需要更改的地方有以下几点
dataDir是zookeeper的数据目录,可以任意选择,但是这个目录必须要提前创建好,zookeeper是不会帮你创建的
dataDir=/usr/local/zk-standalone/zookeeper3/data
dataLogdir是zookeeper的日志目录,应该要谨慎的选择日志目录,目录必须要提前创建好,如果将日志存放在比较繁忙的设备上,将大大影响系统性能
dataLogDir=/usr/local/zk-standalone/zookeeper3/logData限制zookeeper的客户端链接数量,设置为0或者不设置表示取消对并发连接的设置
maxClientCnxns=0
最小会话超时时间和最大会话超时时间
minSessionTimeout=4000
maxSessionTimeout=10000server.id 其中1表示这是第几号server,用来做集群中的区别的192.168.9.103是该server所在的ip地址
2888是该server和集群中的leader通信端口,3888是选举leader的端口
server.1=zkcluster:2881:3881
注意:
指定主机名和ip映射关系=>Linux下/etc/hosts文件
写入如:192.168.9.103 zkcluster
在之前设置的dataDir中新建myid文件,写入一个数字,该数字表示这是第几号server,该数字必须和zoo.cfg文件中的server.X中的X一 一对应
#在dataDir中创建myid文件并写入 1
echo 1 >myid
#查看myid
cat myid
更改后的文件如下
# 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/zk-standalone/zookeeper3/data
logDataDir=/usr/local/zk-standalone/zookeeper3/logData
# the port at which the clients will connect
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
#
# Be sure to read the maintenance section of the
进入到zookeeper的安装目录 执行bin/zkServer.sh start
如图所示,使用jps命令查看进程是否启动成功
出现 QuorumPeerMain这个进程的时候就说明zookeeper已经安装成功了
[root@sh_c zk-cluster]# jps
42913 QuorumPeerMain
43081 Jps
接下里进入zookeeper的客户端查看
进入zookeeper的安装目录执行bin/zkCli.sh
执行ls / 查看当前根目录下的节点 发现有一个zookeeper的节点
至此zookeeper的单机版安装成功!
(1)安装JDK 【此步骤省略】。
(2)Zookeeper压缩包上传到服务器
(3)将Zookeeper解压 ,创建data目录 ,将 conf下zoo_sample.cfg 文件改名为 zoo.cfg
(4)建立/usr/local/zookeeper-cluster目录,将解压后的Zookeeper复制到以下三个目录
/usr/local/zookeeper-cluster/zookeeper-1
/usr/local/zookeeper-cluster/zookeeper-2
/usr/local/zookeeper-cluster/zookeeper-3
修改/usr/local/zookeeper-cluster/zookeeper-1/conf/zoo.cfg
clientPort=2181 dataDir=/usr/local/zookeeper-cluster/zookeeper-1/data dataLogDir=/usr/local/zk-cluster/zookeeper-1/logData |
修改/usr/local/zookeeper-cluster/zookeeper-2/conf/zoo.cfg
clientPort=2182 dataDir=/usr/local/zookeeper-cluster/zookeeper-2/data dataLogDir=/usr/local/zk-cluster/zookeeper-2/logData |
修改/usr/local/zookeeper-cluster/zookeeper-3/conf/zoo.cfg
clientPort=2183 dataDir=/usr/local/zookeeper-cluster/zookeeper-3/data dataLogDir=/usr/local/zk-cluster/zookeeper-3/logData |
-------知识点小贴士------ 如果你要创建的文本文件内容比较简单,我们可以通过echo 命令快速创建文件 格式为: echo 内容 >文件名 例如我们为第一个zookeeper指定ID为1,则输入命令
|
(2)在每一个zookeeper 的 zoo.cfg配置客户端访问端口(clientPort)和集群服务器IP列表。
集群服务器IP列表如下
server.1=192.168.25.140:2881:3881 server.2=192.168.25.140:2882:3882 server.3=192.168.25.140:2883:3883 |
解释:server.服务器ID=服务器IP地址:服务器之间通信端口:服务器之间投票选举端口
启动集群就是分别启动每个实例。
启动后我们查询一下每个实例的运行状态
先查询第一个服务Mode为follower表示是跟随者(从)
再查询第二个服务Mod 为leader表示是领导者(主)
查询第三个为跟随者(从)
把3号服务器停掉,观察1号和2号,发现状态并没有变化
由此得出结论,3个节点的集群,从服务器挂掉,集群正常
(2)我们再把1号服务器(从服务器)也停掉,查看2号(主服务器)的状态,发现已经停止运行了。
由此得出结论,3个节点的集群,2个从服务器都挂掉,主服务器也无法运行。因为可运行的机器没有超过集群总数量的半数。
由此我们得出结论,当集群中的主服务器挂了,集群中的其他服务器会自动进行选举状态,然后产生新得leader
(5)我们再次测试,当我们把2号服务器重新启动起来(汗~~这是诈尸啊!)启动后,会发生什么?2号服务器会再次成为新的领导吗?我们看结果
我们会发现,2号服务器启动后依然是跟随者(从服务器),3号服务器依然是领导者(主服务器),没有撼动3号服务器的领导地位。哎~退休了就是退休了,说了不算了,哈哈。
由此我们得出结论,当领导者产生后,再次有新服务器加入集群,不会影响到现任领导者。
安装zookeeper-3.4.6的时候,启动正常没报错,但zkServer.sh status查看状态的时候却出现错误,如下:
JMX enabled by default
Using config: /hadoop/zookeeper/bin/../conf/zoo.cfg
Error contacting service. It is probably not running.
jps查看进程,却发现进程已启动
7313 QuorumPeerMain
如:没有jps命令时
安装open-jdk后发现jps不能用,此时需要安装另外一个包才能使用
通过以下命令进行安装:
sudo yum install java-1.8.0-openjdk-devel.x86_64
在网上查阅资料一共有三种解决方法:
如果配置了日志(dataLogDir=/usr/local/zk-cluster/zookeeper-1/logData)可以首先查看日志记录
1,打开zkServer.sh 找到status)
STAT=`echo stat | nc localhost $(grep clientPort "$ZOOCFG" | sed -e 's/.*=//') 2> /dev/null| grep Mode`
在nc与localhost之间加上 -q 1 (是数字1而不是字母l)
如果已存在则去掉
注:因为zookeeper是3.4.5版本,所以在我的zkServer.sh脚本文件里根本没有这一行,所以没有生效2,调用sh zkServer.sh status 遇到这个问题。百度,google了后发现有人是修改sh脚本里的一个nc的参数来解决,可在3.4.5的sh文件里并没有找到nc的调用。配置文档里指定的log目录没有创建导致出错,手动增加目录后重启,问题解决。
注:我想不是日志的问题所以这个方法根本就没有试3,创建数据目录,也就是在你zoo.cfg配置文件里dataDir指定的那个目录下创建myid文件,并且指定id,改id为你zoo.cfg文件中server.1=localhost:2888:3888中的 1.只要在myid头部写入1即可.
注:在我第二次安装的时候,没有将myid文件创建在dataDir指定的那个目录下,也报了该错误。之后在dataDir指定的那个目录下创建myid文件就没有报错。4 因为防火墙没有关闭。关闭防火墙:
#查看防火墙状态
service iptables status 或者systemctl status iptables
#关闭防火墙
service iptables stop 或者 systemctl stop iptables
#查看防火墙开机启动状态
chkconfig iptables --list
#关闭防火墙开机启动
chkconfig iptables off注意:我的确在开始时候没有关闭防火墙,但是当我关闭防火墙之后也没有解决问题。
5 没有建立主机和ip之间的映射关系。
建立主机和ip之间映射关系的命令为 vim /etc/hosts 在文件的末端加入各个主机和ip地址之间的映射关系就可以了。
注意:只有在建立了映射关系之后,才可以将在同一个网段下的机器利用主机名进行文件传递。问题解决!
Linux的/etc/hosts文件