Zookeeper单机版/伪集群搭建

在同一台机器(即伪集群)上,启动三个zookeeper,三个分别使用不同的配置文件

Zookeeper的单机版安装
从官网上下载zookeeper的安装包
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=10000

server.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
更改后的文件如下

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/usr/local/zk-standalone/zookeeper3/data
logDataDir=/usr/local/zk-standalone/zookeeper3/logData
clientPort=2181

进入到zookeeper的安装目录 执行bin/zkServer.sh start

出现 QuorumPeerMain这个进程的时候就说明zookeeper已经安装成功了

[root@zcczxx zk-cluster]# jps
42913 QuorumPeerMain
43081 Jps
接下里进入zookeeper的客户端查看

进入zookeeper的安装目录执行bin/zkCli.sh

执行ls / 查看当前根目录下的节点 发现有一个zookeeper的节点

至此zookeeper的单机版安装成功!

集群版

(1)安装JDK
1.下载linux jdk8的tar包上传至服务器

​ 使用xftp将jdk源码包,上传到/usr/local(软件一般安装到这个目录)

2.解压tar包

tar -zxvf jdk-8u271-linux-x64.tar.gz

删除tar包

rm -f jdk-8u181-linux-x64.tar.gz

3.配置环境变量

/etc/profile文件的改变会涉及到系统的环境,也就是有关Linux环境变量的东西

所以,我们要将jdk配置到/etc/profile,才可以在任何一个目录访问jdk

vim /etc/profile

在profile文件末尾添加如下配置:

export JAVA_HOME=/usr/local/jdk1.8.0_217  #jdk安装目录
 
export JRE_HOME=${JAVA_HOME}/jre
 
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib:$CLASSPATH
 
export JAVA_PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin
 
export PATH=$PATH:${JAVA_PATH}

保存并退出
配置环境立即生效:

source /etc/profile

4.验证是否安装成功
javac
java -version

至此安装配置jdk8结束

(2)Zookeeper压缩包上传到服务器

(3)将Zookeeper解压 ,创建data目录 ,将 conf下zoo_sample.cfg 文件改名为 zoo.cfg

(4)建立/usr/local/zookeeper-cluster目录,将解压后的Zookeeper复制到以下三个目录

mkdir /usr/local/zookeeper-cluster/zookeeper-1

mkdir /usr/local/zookeeper-cluster/zookeeper-2

mkdir /usr/local/zookeeper-cluster/zookeeper-3

配置每一个Zookeeper 的dataDir(zoo.cfg) clientPort 分别为2181 2182 2183
修改2181

vim /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

修改2182

/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

修改2183

/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

2.2.3配置集群
在每个zookeeper的 data 目录下创建一个 myid 文件,内容分别是1、2、3 。这个文件就是记录每个服务器的ID
-------知识点小贴士------

如果你要创建的文本文件内容比较简单,我们可以通过echo 命令快速创建文件

格式为:

echo 内容 >文件名

例如我们为第一个zookeeper指定ID为1,则输入命令

echo 1 > myid

(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地址:服务器之间通信端口:服务器之间投票选举端口

2.2.4启动集群
启动集群就是分别启动每个实例。

zookeeper-1/bin/zkServer.sh start
zookeeper-2/bin/zkServer.sh start
zookeeper-3/bin/zkServer.sh start

启动后我们查询一下每个实例的运行状态

zookeeper-1/bin/zkServer.sh status
zookeeper-2/bin/zkServer.sh status
zookeeper-3/bin/zkServer.sh status

先查询第一个服务Mode为follower表示是跟随者(从)

再查询第二个服务Mod 为leader表示是领导者(主)

查询第三个为跟随者(从)

2.2.5模拟集群异常
(1)首先我们先测试如果是从服务器挂掉,会怎么样

把3号服务器停掉,观察1号和2号,发现状态并没有变化

由此得出结论,3个节点的集群,从服务器挂掉,集群正常

(2)我们再把1号服务器(从服务器)也停掉,查看2号(主服务器)的状态,发现已经停止运行了。

由此得出结论,3个节点的集群,2个从服务器都挂掉,主服务器也无法运行。因为可运行的机器没有超过集群总数量的半数。

(3)我们再次把1号服务器启动起来,发现2号服务器又开始正常工作了。而且依然是领导者。
(4)我们把3号服务器也启动起来,把2号服务器停掉(汗~~干嘛?领导挂了?)停掉后观察1号和3号的状态。发现新的leader产生了~

由此我们得出结论,当集群中的主服务器挂了,集群中的其他服务器会自动进行选举状态,然后产生新得leader

(5)我们再次测试,当我们把2号服务器重新启动起来(汗~~这是诈尸啊!)启动后,会发生什么?2号服务器会再次成为新的领导吗?我们看结果

我们会发现,2号服务器启动后依然是跟随者(从服务器),3号服务器依然是领导者(主服务器),没有撼动3号服务器的领导地位。哎~退休了就是退休了,说了不算了,哈哈。

由此我们得出结论,当领导者产生后,再次有新服务器加入集群,不会影响到现任领导者。

error 错误

安装zookeeper时候,可以查看进程启动,但是状态显示报错:Error contacting service. It is probably not running
安装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文件

你可能感兴趣的:(linux,zookeeper,linux,apache,jdk1.8)