zookeeper集群搭建
前言
zookeeper是什么就不用介绍了,很多分布式集群组件都使用zookeeper来实现集群化,它本身也能帮助我们实现一些诸如动态配置、分布式锁、消息推送等功能,这篇笔记简单记录一下一个简单的zookeeper集群如何搭建。
zookeeper本身可以以standalone模式(单节点状态)安装运行,不过它的长处在于通过分布式zookeeper集群(一个leader,多个follower),基于一定的策略来保证zookeeper集群的稳定性和可用性,从而实现分布式应用的可靠性。
1. 集群角色
zookeeper主要有三个角色节点:leader、follower和observer。
- leader,用于负责进行投票的发起和决议,更新系统状态
- follower, 用于接受客户端请求并想客户端返回结果,在选主过程中参与投票
- observer, 可以接受客户端连接,将写请求转发给leader,但observer不参加投票过程,只同步leader的状态,observer的目的是为了扩展系统,提高读取速度
一个集群中,leader和follower角色节点是必须的,而observer角色节点不是必须的。
2. 集群节点选择
一个zookeeper集群需要运行几个zookeeper节点呢?你可以运行一个zookeeper节点,但那就不是集群了。如果要运行zookeeper集群的话,最好部署3,5,7个zookeeper节点。为什么最好是奇数?当然偶数不是不可以,但zookeeper选举需要至少N/2 + 1(N是集群中机器数量)节点参与才能成立,比如4台机器的集群,存活两台就集群拒绝提供服务来,但3台的话,剩2台却可以提供服务。
你需要给每个zookeeper 1G左右的内存,如果可能的话,最好有独立的磁盘,因为独立磁盘可以确保zookeeper的读写高性能,zookeeper的数据快照是可能会经常读写磁盘的。
3. 安装
zookeeper运行需要java的支持,准备好java运行环境,不同的Linux版本安装Java的方式不一样,这里就不在展开叙述了。
zookeeper的安装很简单,我们只需要下载zookeeper压缩包,然后解压、配置、执行就可以了。我的服务是Ubuntu系统,安装方式如下:
tar -C /usr/local/ -xf zookeeper-3.4.10.tar.gz
cd /usr/local/
mv zookeeper-3.4.8 zookeeper
cd zookeeper
cp conf/zoo_sample.cfg conf/zoo.cfg #zk默认是没有zoo.cfg文件的,但有个示例文件,复制一份即可
把zookeeper的运行加入到PATH中
vim /etc/profile
export PATH=$PATH:/usr/local/zookeeper/bin # 加到文件最后
source /etc/profile
使用命令 env
查看,会看到已经配置到系统PATH中,可以在任意地方执行bin目录下的脚本。
这个时候执行 zkServer.sh start
已经能够启动zookeeper了,用zkServer.sh status
查看运行状态,可以看到当前zookeeper是在Mode: standalone
模式下运行的。在zookeeper目录下bin文件夹下有zookeeper运行日志 zookeeper.out,可以查看运行情况。
4. 集群配置
zookeeper搭建完毕后,我们现在来配置zookeeper集群。
注意:在搭建zookeeper集群时,一定要停止已经启动的zookeeper。
4.1 配置文件修改
zookeeper集群的搭建很简单,我们只需要修改每台服务器的zoo.cfg配置文件然后进行相关的操作即可。先来修改zookeeper的配置文件conf/zoo.cfg,如下:
tickTime=2000 ##作为zookeeper服务器之间或客户端与服务器之间维持心跳的时间间隔
initLimit=10 ##Leader服务器等待Follower启动并完成数据同步的时间,默认值10,表示tickTime的10倍
syncLimit=5 ##Leader服务器和Follower之间进行心跳检测的最大延时时间,默认值5,表示tickTime的5倍
clientPort=2181 ##服务器对外服务端口,一般设置为2181
dataLogDir=/data/zookeeper/logs ##Zookeeper服务器存储事务日志的目录
dataDir=/data/zookeeper/data ##Zookeeper服务器存储快照文件的目录,必须配置
server.1= 192.168.1.9:2888:3888
server.2= 192.168.1.12:2888:3888
server.3= 192.168.1.23:2888:3888
参数补充说明:
- tickTime这个时间是作为zookeeper服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是说每个tickTime时间就会发送一个心跳。
- initLimit这个配置项是用来配置zookeeper接受客户端(这里所说的客户端不是用户连接zookeeper服务器的客户端,而是zookeeper服务器集群中连接到leader的follower 服务器)初始化连接时最长能忍受多少个心跳时间间隔数。
- 当已经超过10个心跳的时间(也就是tickTime)长度后 zookeeper 服务器还没有收到客户端的返回信息,那么表明这个客户端连接失败。总的时间长度就是 10*2000=20秒。
- syncLimit这个配置项标识leader与follower之间发送消息,请求和应答时间长度,最长不能超过多少个tickTime的时间长度,总的时间长度就是5*2000=10秒。
- dataDir顾名思义就是zookeeper保存数据的目录,默认情况下zookeeper将写数据的日志文件也保存在这个目录里;
- clientPort这个端口就是客户端连接Zookeeper服务器的端口,Zookeeper会监听这个端口接受客户端的访问请求;
- server.A=B:C:D中的A是一个数字,表示这个是第几号服务器,B是这个服务器的IP地址,C第一个端口用来集群成员的信息交换,表示这个服务器与集群中的leader服务器交换信息的端口,D是在leader挂掉时专门用来进行选举leader所用的端口。
4.2 配置目录
创建上面配置文件中表明的两个目录
4.3 创建server id文件
除了修改zoo.cfg配置文件外,zookeeper集群模式下还要配置一个myid文件,这个文件需要放在dataDir目录下。
这个文件里面有一个数据就是A的值(该A就是zoo.cfg文件中server.A=B:C:D中的A),在zoo.cfg文件中配置的dataDir路径中创建myid文件。
5. 查看集群
由于配置了系统PATH,直接在三台机器中分别使用zkServer.sh start
启动zookeeper即可。
启动完成后,使用zkServer.sh status
查看每台机器的运行情况,会看到有两台机器的运行模式是follower,一台机器是leader,这表明我们的zookeeper集群搭建完成了。
6. 连接集群
zookeeper集群搭建完毕后,我们可以通过客户端脚本,连接到zookeeper集群上。
对于客户端来说,zookeeper集群是一个整体,连接到zookeeper集群实际上感觉在独享整个集群的服务,所以,你可以在任何一个结点上建立到服务集群的连接,例如:zkCli.sh -server 192.168.1.9:2181
上一篇: zookeeper集群搭建
推荐阅读
-
selenium+python自动化测试环境搭建步骤
-
eclipse ide for java ee developers 开发环境搭建详解图文(j2ee)
-
最快速的Android开发环境搭建ADT-Bundle及Hello World
-
使用vue脚手架(vue-cli)搭建一个项目详解
-
IDEA搭建Springboot+SpringMVC+Mybatis+Mysql(详细、易懂)
-
直播平台源码搭建教程,具体步骤请看本篇
-
python自动化框架搭建过程(分享python接口自动化框架有哪些)
-
如何获取公网ip,自己搭建公网ip服务器的方法
-
用Python一键搭建Http服务器的方法
-
使用Python快速搭建HTTP服务和文件共享服务的实例讲解