Linxu环境下ZooKeeper的集群搭建之详细教程
2017-12-15 10:25
465 查看
Linxu环境下ZooKeeper的集群搭建之详细教程
前言:由于项目中用到了ZooKeeper,于是抓紧时间了解下ZooKeeperZookeeper是一个开放源代码的分布式协调服务,由知名互联网公司雅虎创建。它是一个典型的分布式数据一致性的解决方案,分布式应用程序可以基于它实现注入数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master选举、分布式锁和分布式队列等功能。目前已有许多大型分布式项目比如:Hadhop、HBase、Storm、Solr、当然还有我们应该很熟悉的dubbo都将ZooKeeper作为核心组件。到这里你是不是也心动了呢,让我们一起来搭建一个简单的ZooKeeper集群吧!
我这里用三台服务器搭建(由于ZooKeeper master选举遵循过半协议,所以建议集群搭建最少三台服务器),首先肯定需要ZooKeeperjar包
zookeeper-3.4.8.tar.gz:<链接:https://pan.baidu.com/s/1hrA4xzY 密码:qka7>
一、将下载的jar包解,我这里是放到 /opt/zookeeper/,然后解压 命令:tar -zxvf zookeeper-3.4.8.tar.gz
二、进入到 /opt/zookeeper/zookeeper-3.4.8/conf 目录中 命令:cd zookeeper-3.4.8/conf/
三、复制 zoo_sample.cfg 文件的并命名为为 zoo.cfg 命令:cp zoo_sample.cfg zoo.cfg
四、打开 zoo.cfg 文件并修改其内容 命令:vim zoo.cfg
ticktime:用于配置ZooKeeper中最小时间单元的长度,很多运行时的时间间隔都是使用tickTime的倍数来表示的。例如,ZooKeeper中会话的最小超时间时间默认是2*tickTime。
clientPort:改参数无默认值,必须配置,不支持系统属性方式配置。用于配置当前服务器对外的服务端口,客户端会通过该端口和ZooKeeper服务器创建连接一般设置为2181。注意每台ZooKeeper服务器都可以配置任意可用的端口无需非得与clientPort端口保持一致。
dataDir:改参数无默认值,必须配置,不支持系统属性方式配置。用于配置ZooKeeper服务器存储快照文件的目录。
dataLogDir:配置ZooKeeper事务日志的存储目录。
initLimit:默认值为10,表示是参数tickTime值的10倍,必须配置且必须是正数。改参数用于配置Leader服务器等待Follower启动,并完成数据同步的时间。Follower服务器在启动过程中,会与Leader建立连接并完成对数据的同步,从而确定自己对外提供服务的
4000
起始状态。Leader服务器允许Foller在initLimit时间内完成这个工作。
syncLimit:默认值为5,表示tickTime值的5倍,必须配置,且是正数。改参数用于配置Leader服务器和Follower之间进行心跳检测的最大延时时间,。在ZooKeeper集群运行过程中,Leader服务器会与所有的Follower进行心跳检测来确定该服务器是否存活。如果Leader服务器在syncLimit时间内无法获取到Follower的心跳检测响应,那么Leader就会认为该Follower已经脱离了和自己的同步。
server.id=host:port:port 其中id被称为ServerId用来标识该机器在集群中的机器序号。
五、修改完后,保存退出。
(ps:有些对不了解的Linxu的童鞋在vim进入后不知道该如何入手,vim进入后按i键进入编辑状态,修改完后按Ecs退出编辑状态,然后ctr+:输入wq保存退出)
六、由于我上面dataDir配置的是/var/lib/zookeeper/ 因此新建目录,
命令:mkdir /var/lib/zookeeper
新建文件myid 命令:touch /var/lib/zookeeper/myid
并写入值 1 命令:echo “1” > /var/lib/zookeeper/myid
注意:此处的值1与上面配置的server.id=host:port:port 中的id需要对应,比如此服务器配置的server.1那么myid文件中值就是1。
七、配置环境
1、进入到bin目录 命令:cd /opt/zookeeper/zookeeper-3.4.8/bin/
2、vim /etc/profile 在其顶部添加如下内容
export ZOOKEEPER_HOME=/opt/zookeeper/zookeeper-3.4.8/ export PATH=$ZOOKEEPER_HOME/bin:$PATH
然后执行:source /etc/profile
八、将设置好的zooKeeper拷贝到其他两台服务器ZooKeeper2和ZooKeeper3
scp -r /opt/zookeeper/zookeeper-3.4.8/ 172.168.1.130:/opt/zookeeper scp -r /opt/zookeeper/zookeeper-3.4.8/ 172.168.1.131:/opt/zookeeper
九、分别将myid修改为对应的值2、3,并分别执行 source /etc/profile
ZooKeeper2:依次执行如下命令
touch /var/lib/zookeeper/myid echo "2" > /var/lib/zookeeper/myid source /etc/profile
Keeper3:依次执行如下命令
touch /var/lib/zookeeper/myid echo "3" > /var/lib/zookeeper/myid source /etc/profile
十、依次启动集群中的服务
进入到bin目录,启动
cd /opt/zookeeper/zookeeper-3.4.8/bin/ zkServer.sh start
看到如上状态,就说明启动成了
十一、检查服务状态
zkServer.sh status
意外发生了,我们发现了,Error contacting server. It is probably not running. 百度了下发现有不少朋友也报了同样的错误,但许多错误的原因却不尽相同,为此也走了不少弯路。其实发生这样的错误只需要重要的一步,那就是查看日志,找到zookeeper.out,注意路径
cd /opt/zookeeper/zookeeper-3.4.8/conf/ cat zookeeper.out
当我们发现这个错误后,只需要在zkServer.sh里添加JDK环境配置就OK了
找到zkServer.sh并添加配置(我这里是jdk1.7.0_07,安装在opt目录下)
vim /opt/zookeeper/zookeeper-3.4.8/opt/zkServer.sh #java_home export JAVA_HOME=/opt/jdk1.7.0_07 export PATH=$JAVA_HOME/bin:$PATH
在三台服务器zkServer.sh里面添加如上配置后,再重新启动,查看状态发现问题解决
后记:
1、对于发生Error contacting server. It is probably not running这样的异常,原因有很多,有的是端口占用,有的是配置问题等等,所以对于这样的问题第一步就是看zookeeper.out日志对症下药。
2、重启服务命令 zkServer.sh reStart 停止服务命令 zkServer.sh stop
3、如果省略步骤7,集群也是可以正常启动使用的,只是启动时必须添加sh 即sh zkServer.sh start
4、由于zookeeper master选举从3.4.0版本开始只保留一种选举算法FastLeaderElection,根据投票信息(myid,zxid). myid(服务器id即server.id中的id) zxid服务器的事务id。优先会根据zxid的大小来决定leader.如果zxid相同,再根据myid的大小进行比对。由于刚开始搭建的集群还没有进行事务性操作,所以你会发现服务启动的顺序不同会导致Leader的不同,例如启动1、2、3,那么2服务器会成为Leader,启动3、2、1,那么3服务器会成为Leader,有兴趣的童鞋可以自己试试。
第一次写博客如有问题,望各位兄台不吝指出,定当感激不尽!
相关文章推荐
- zookeeper集群环境搭建详细图文教程
- Ubuntu Linux hadoop开发环境搭建详细教程 二、配置Hadoop集群环境
- 超详细图文教程 virtualbox centos6.5 虚拟机分布式集群环境搭建
- 大数据生态集群环境搭建部署超详细教程-HJF
- 大数据教程(3.5):zookeeper集群环境搭建
- 入门级Hadoop集群搭建详细教程(一):Linux虚拟机的创建
- 超详细zookeeper集群搭建及解析说明
- windows下用ADT进行AndroidNDK开发的详细教程(从环境搭建 配置到编译全过程)
- ZooKeeper实战(一)Zookeeper伪集群环境搭建
- [Android实例] win32和android 的cocos2dx环境搭建详细教程
- Zookeeper集群环境搭建实践
- linux搭建node环境超详细教程
- Kafka(自带的zookeeper)集群搭建详细步骤
- 搭建zookeeper集群环境详解
- 五步搞定Android开发环境部署——非常详细的Android开发环境搭建教程
- 五步搞定Android开发环境部署——非常详细的Android开发环境搭建教程
- [置顶] hadoop、zookeeper、hbase、spark集群环境搭建
- 搭建基于Docker的PHP开发环境的详细教程
- Java开发和运行环境的搭建(详细教程)
- zookeeper集群搭建(windows环境下)