Zookeeper 安装配置与集群
小感慨一下
眼看着2018年就要过去了,工作也有4年的时间了, 从大学实习到现在,期间换过不同的公司,去魔都闯荡过,虽然最终又回到了最开始的地方,但也算得上是去过远方了。
突然有一天打开csdn 个人中心。我看这个界面陷入了沉思:这四年的工作中我到底积累了什么? 我分享了什么? 发现什么也没有,我觉得我得做点什么。也算是对自己之前工作的一种总结和积累 (ps:主要是不能对不起我唯一的一个粉丝 O(∩_∩)O哈哈~)
对Zookeeper的介绍 ( 内容出处 )
- ZooKeeper是一种分布式协调服务,用于管理大型主机。在分布式环境中协调和管理服务是一个复杂的过程。ZooKeeper通过其简单的架构和API解决了这个问题。ZooKeeper允许开发人员专注于核心应用程序逻辑,而不必担心应用程序的分布式特性。
- ZooKeeper框架最初是在“Yahoo!"上构建的,用于以简单而稳健的方式访问他们的应用程序。 后来,Apache ZooKeeper成为Hadoop,HBase和其他分布式框架使用的有组织服务的标准。 例如,Apache HBase使用ZooKeeper跟踪分布式数据的状态。
环境配置(下载)
- jdk 1.8
- zookeeper-3.4.9
- centos 64位
安装配置
jdk 安装
作为一枚标准的java开发程序猿, jdk的安装时不可避免的, 同时也是因为zookeeper需要基于jdk来运行。
我直接通过本地ssh上传到centos的
- 我已经上传的jdk
- 通过
tar -zxvf jdk-8u191-linux-i586.tar.gz
解压
- 进入解压后的jdk目录, 通过
pwd
查看完整目录
这个就是我jdk的目录, - 添加环境变量
vim /etc/profile
export JAVA_HOME=自己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
使新增变量生效 - 通过
javac -version
查看jdk是否安装成功
问题:
安装glibc 就可以解决问题了
yum install glibc.i686
接下来安装Zookeeper
单机安装
-
上传好的zookeeper文件
-
解压 (命令同上)
-
进入zookeeper目录中,复制conf/zoo_sample.cfg 命名为zoo.cfg (具体配置在集群中讲解)
-
在zookeeper中新建data,logs目录
mkdir 目录名
-
修改zoo.cfg中的dataDir和dataLogDir
-
进入到zookeeper安装目录, 通过./bin/zkServer.sh start
启动 并通过
jps` 查看启动结果
-
单机版的安装很简单, 如果嫌弃每次启动zookeeper都需要进入到zookeeper的安装目录中,
也可以将zookeeper添加到环境变量中
然后source /etc/profile
使新增变量生效 -
启动并查看启动结果
集群安装
现在集群共有两种集群方式
- 集群
- 伪集群(zookeeper安装在同一个机器上, 只修改端口)
我采用的集群, 在三台机器上安装zookeeper
- 关于集群的节点数量选择
Zookeeper 集群中只要有过半的节点是正常的情况下,那么整个集群对外就是可用的。正是基于这个
特性,要将 ZK 集群的节点数量要为奇数(2n+1:如 3、5、7 个节点)较为合适
环境说明
服务器 | 端口 |
---|---|
192.168.87.129 | 2181,2881:3881 |
192.168.87.130 | 2181,2881:3881 |
192.168.87.131 | 2181,2881:3881 |
- 129上的安装:基础安装同单机安装,只是在配置conf中需要添加其他的信息
server.1=192.168.87.129:2881:3881
server.2=192.168.87.130:2881:3881
server.3=192.168.87.131:2881:3881
-
在data目录中新建myid文件, 并将1写入文件中
echo 1 > myid
-
另外两台机器可以通过scp远程复制过去
-
进入130,131服务器中的zookeeper下的data目录, 分别修改myid=2,myid=3
-
启动zookeeper, 通过
zkServer.sh status
来查看集群是否成功
代表zookeeper集群 已经成功
备注:
- 如果防火墙是iptables, 需要在添加以下3行
-A INPUT -m state --state NEW -m tcp -p tcp --dport 2181 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 2881 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3881 -j ACCEPT
- 然后重启防火墙
service iptables restart
- 查看防火墙的状态
service iptables status
- 关闭zookeeper
zkServer.sh stop
Zookeeper 参数说明
- tickTime=2000
tickTime 这个时间是作为 Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每
个 tickTime 时间就会发送一个心跳。
- initLimit=10
initLimit 这个配置项是用来配置 Zookeeper 接受客户端(这里所说的客户端不是用户连接 Zookeeper
服务器的客户端,而是 Zookeeper 服务器集群中连接到 Leader 的 Follower 服务器)初始化连接时最长
能忍受多少个心跳时间间隔数。当已经超过 10 个心跳的时间(也就是 tickTime)长度后 Zookeeper 服
务器还没有收到客户端的返回信息,那么表明这个客户端连接失败。总的时间长度就是 10*2000=20 秒
- syncLimit=5
syncLimit 这个配置项标识 Leader 与 Follower 之间发送消息,请求和应答时间长度,最长不能超过多少
个 tickTime 的时间长度,总的时间长度就是 5*2000=10 秒
- dataDir
dataDir 就是Zookeeper 保存数据的目录,默认情况下Zookeeper 将写数据的日志文件也保存在
这个目录里
- clientPort
clientPort 这个端口就是客户端(应用程序)连接 Zookeeper 服务器的端口,Zookeeper 会监听这个端
口接受客户端的访问请求
- server.A=B:C:D
A 是一个数字,表示这个是第几号服务器
B 是这个服务器的 IP 地址
C 用来集群成员的信息交换,表示这个服务器与集群中的 Leader 服务器交换信息的端口;
D 是在 leader 挂掉时专门用来进行选举 leader 所用的端口
- myid
对应的IP机器上的对应的编号
到此zookeeper单机安装和集群安装已经全部完成。