ZooKeeper 集群搭建
1、ZooKeeper 软件安装须知
鉴于 ZooKeeper 本身的特点,服务器集群的节点数推荐设置为奇数台。我这里我规划为三台,为别为 potter2、potter3、potter4。
zookeeper集群不用依赖于任何东西。除了JDK。
2、具体安装
上网找 ZooKeeper 的软件安装,并下载下来
下载地址:http://mirrors.hust.edu.cn/apache/ZooKeeper/
版本号:ZooKeeper-3.4.10.tar.gz。
3、进入安装
3.1、获取安装包。并且上传到服务器
上传可以按Alt+p,直接把压缩包进linux就可以
3.2、解压到apps安装目录
tar -zxvf zookeeper-3.4.10.tar.gz -C apps/
3.3、修改配置文件
1. 进入到/home/potter/apps/zookeeper-3.4.10/conf目录下,找到zoo_sample.cfg文件。
2. 将zoo_sample.cfg文件更改名字为zoo.cfg
3. 输入命令: vi zoo.cfg
配置参数解析:
tickTime
基本事件单元,以毫秒为单位。它用来控制心跳和超时,默认情况下最小的会话超时时间为两倍的 tickTime。
initLimit
此配置表示,允许 follower (相对于 leader 而言的“客户端”)连接并同步到 leader 的初始化连接时间,它以 tickTime 的倍数来表示。当超过设置倍数的 tickTime 时间,则连接失败。
syncLimit
此配置表示, leader 与 follower 之间发送消息,请求和应答时间长度。如果 follower 在设置的时间内不能与 leader 进行通信,那么此 follower 将被丢弃。
dataDir
存储内存中数据库快照的位置
注意:如果需要保留日志信息,那么可以考虑配置 dataLogDir 的位置,这个位置就是日志的存储目录。通常情况下是分开存储的。并且应该谨慎地选择日志存放的位置,使用专用的日志存储设备能够大大地提高系统的性能,如果将日志存储在比较繁忙的存储设备上,那么将会在很大程度上影响系统的性能。
clientPort
监听客户端连接的端口,默认是 2181,最好不要修改
最后再增加 ZooKeeper 的服务器列表信息,格式为:
server.id=主机名:心跳端口:选举端口
例子:server.1=hadoop01:2888:3888
其中 id 虽然可以随便写,但是有两点要求,第一不能重复,第二范围是 1-255,并且对应服务器列表上还得存在对应的 id 文件,具体看下面操作
4. 然后分发至其他服务器:
[potter@potter2 apps]$ scp -r zookeeper-3.4.10/ potter@potter3:$PWD
[potter@potter2 apps]$ scp -r zookeeper-3.4.10/ potter@potter4:$PWD
5. 然后是最重要的步骤,一定不能忘了。
去你的各个 ZooKeeper 服务器节点,新建目录 dataDir=/home/potter/apps/zkdata,这个目录就是你在 zoo.cfg 中配置的 dataDir 的目录,建好之后,在里面新建一个文件,文件名叫 myid,里面存放的内容就是服务器的 id,就是 server.2=potter2:2888:3888 当中的 id,就是 2,那么对应的每个服务器节点都应该做类似的操作
拿服务器 hadoop01 举例:
[potter@potter2 data]$ mkdir zkdata
[potter@potter2 zkdata]# echo 1 > myid
6. 配置环境变量
[potter@potter2 ~]$ vi .bashrc
export ZOOKEEPER_HOME=/home/potter/apps/zookeeper-3.4.10
export PATH=$PATH:$ZOOKEEPER_HOME/bin
保存退出,一定要执行 source ~/.bashrc
每一个节点都要配置环境变量
7. 启动zookeeper
命令:
启动:zkServer.sh start
停止:zkServer.sh stop查看状态:zkServer.sh status
8. 启动命令:zkServer.sh start
注意:虽然我们在配置文件中写明了服务器的列表信息,但是,我们还是需要去每一台服务器去启动,不是一键启动集群模式
然后检查在每台服务器之间是不是都启动了有 QuorumPeerMain 进程,并检查每台服务器的角色,使用命令:
jps 检查 QuorumPeerMain 进程
zkServer.sh status 查看服务器角色(leader or follower)