zookeeper第一章--zookeeper入门、zookeeper单机和集群的搭建
一、Zookeeper的介绍
官方:
ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。
我的:
Yahoo开发开源、恭喜apache
动物管理员
二、Zookeeper搭建
一、单机模式
1、官网下载
wget https://mirrors.bfsu.edu.cn/apache/zookeeper/zookeeper-3.5.8/apache-zookeeper-3.5.8-bin.tar.gz
- 解压tar -zxvf apache-zookeeper-3.5.8-bin.tar.gz
3、修改conf mv zoo_sample.cfg zoo.cfg
注意:
#zookeeper最近的版本中有个内嵌的管理控制台是通过jetty启动,也会占用8080 端口
#在zoo.cfg中增加admin.serverPort=没有被占用的端口号,否则会启动失败
admin.serverPort=2182
启动报错:
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Error contacting service. It is probably not running.
4、启动
sh zkServer.sh start
5、验证
sh zkServer.sh status
6、连接
sh zkCli.sh
7、如果你是搭建在阿里云服务器上则需要配置安全组,开放2181端口。开放后打开本机控制台执行telnet host port。
返回空白屏即可,到此为止单机版已经搭建成功。
二、集群模式
1、新建三台虚拟机(这一步可参看我往期的文章)
2、按照第一步在其中一台安装zookeeper,修改zoo.cfg文件,内容如下:
# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
dataDir=/tmp/zookeeper
# the port at which the clients will connect
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
#
# Be sure to read the maintenance section of the
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1
server.1=ip1:2188:2888
server.2=ip2:2188:2888
server.3=ip3:2188:2888
3、克隆安装好zookeeper的虚拟机:(这一步可参看我往期的文章)
4、在server.1=ip1:2188:2888的节点上执行echo "1" >/tmp/zookeeper/myid,报错则可能是没有文件夹文件则可以mkdir -p /tmp/zookeeper/ vim /tmp/zookeeper/myid 输入内容1
5、在server.2=ip2:2188:2888的节点上执行echo "1" >/tmp/zookeeper/myid,报错则可能是没有文件夹文件则可以mkdir -p /tmp/zookeeper/ vim /tmp/zookeeper/myid 输入内容2
6、在server.3=ip3:2188:2888的节点上执行echo "1" >/tmp/zookeeper/myid,报错则可能是没有文件夹文件则可以mkdir -p /tmp/zookeeper/ vim /tmp/zookeeper/myid 输入内容3
- 分别启动
sh zkServer.sh start
- 连接集群sh zkCli.sh -server host:ip,host:ip.....
集群角色介绍:
Leader:
Leader作为整个ZooKeeper集群的主节点,负责响应所有对ZooKeeper状态变更的请求。它会将每个状态更新请求进行排序和编号,以便保证整个集群内部消息处理的FIFO,写操作都走leader,zk里面leader只有一个
Follower :
Follower的逻辑就比较简单了。除了响应本服务器上的读请求外,follower还要处理leader的提议,并在leader提交该提议时在本地也进行提交。 另外需要注意的是,leader和follower构成ZooKeeper集群的法定人数,也就是说,只有他们才参与新leader的选举、响应leader的提议。 帮助leader处理读请求,投票权
Observer :
如果ZooKeeper集群的读取负载很高,或者客户端多到跨机房,可以设置一些observer服务器,以提高读取的吞吐量。Observer和Follower比较相似,只有一些小区别:首先observer不属于法定人数,即不参加选举也不响应提议;其次是observer不需要将事务持久化到磁盘,一旦observer被重启,需要从leader重新同步整个名字空间。 没有投票权利,可以处理读请求