Zookeeeper环境搭建(二)
zk一般是有2n+1个节点组成的集群。在Zookeeper服务有两个角色,一个是leader,负责写服务和数据同步;剩下的是follower,提供读服务。(为什么是2n+1个节点请看paxos算法)
- leader实效后会在follower中重新选举新的leader。(paxos算法)
- 每个follower都和leader有链接,接受leader的数据更新操作。(zab算法)
- 客户端可以连接到每个server,每个server的数据完全相同。
- Server记录事务日志和快照到持久存储。
1. zk的特点如下:
- 最终一致性:为客户端展示同一个视图,这是zookeeper里面一个非常重要的功能
- 可靠性:如果消息被到一台服务器接受,那么它将被所有的服务器接受。
- 实时性:Zookeeper不能保证两个客户端能同时得到刚更新的数据,如果需要最新数据,应该在读数据之前调用sync()接口。
- 独立性 :各个Client之间互不干预
- 原子性 :更新只能成功或者失败,没有中间状态。
- 顺序性 :所有Server,同一消息发布顺序一致。
2. zk中的角色:
- 领导者(Leader):领导者负责进行投票的发起和决议,更新系统状态,处理写请求
- 跟随者(Follwer):Follower用于接收客户端的读写请求并向客户端返回结果,在选主过程中参与投票
观察者(Observer):观察者可以接收客户端的读写请求,并将写请求转发给Leader,但Observer节点不参与投票过程,只同步leader状态,Observer的目的是为了,扩展系统,提高读取速度。在3.3.0版本之后,引入Observer角色的原因:
Zookeeper需保证高可用和强一致性;
为了支持更多的客户端,需要增加更多Server;
Server增多,投票阶段延迟增大,影响性能;
权衡伸缩性和高吞吐率,引入Observer ;
Observer不参与投票;
Observers接受客户端的连接,并将写请求转发给leader节点;
加入更多Observer节点,提高伸缩性,同时不影响吞吐率。
客户端(Client): 执行读写请求的发起方
3. 安装:
环境:3台虚拟机:已设置ssh免密登录:
192.168.131.128
192.168.131.130
192.168.131.131
下载zookeeper并解压到/usr/local/zookeeper目录。
添加到环境变量:
ZOOKEEPER_HOME=/usr/local/zookeeper
export PATH=$PATH:$ZOOKEEPER_HOME/bin:$ZOOKEEPER_HOME/conf
使配置生效
source /etc/profile
修改配置文件:
在zk的conf/目录下,将zoo_sample.cfg重命名为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.
dataDir=/usr/local/zookeeper/data
# the port at which the clients will connect
clientPort=2183
#the location of the log file
dataLogDir=/usr/local/zookeeper/log
server.0=hadoopmaster:2288:3388
server.1=hadoopslaver1:2288:3388
server.2=hadoopslaver2:2288:3388
上面我们设置了数据库快照位置-data目录,该目录需要手动创建。
创建myid:
在dataDir(/usr/local/zk/data)目录创建myid文件
hadoopmaster的内容为:0
hadoopslaver1的内容为:1
hadoopslaver2的内容为:2
注意:以上操作三台机器都需要进行。
然后我们分别在三台机器启动zk,在bin目录下执行如下命令:
zkServer.sh start;
各个机器启动情况如下:
当然哪一台机器是leader这都是随机的,一般第一台启动的会是。
zk的配置:
Zookeeper的功能特性是通过Zookeeper配置文件来进行控制管理的(zoo.cfg).这样的设计其实有其自身的原因,通过前面对Zookeeper的配置可以看出,在对Zookeeper集群进行配置的时候,它的配置文档是完全相同的。集群伪分布模式中,有少部分是不同的。这样的配置方式使得在部署Zookeeper服务的时候非常方便。如果服务器使用不同的配置文件,必须确保不同配置文件中的服务器列表相匹配。
我们来看一下上面配置文件中的基本参数:
- client:监听客户端连接的端口。
- tickTime:基本事件单元,这个时间是作为Zookeeper服务器之间或客户端与服务器之间维持心跳的时间间隔,每隔tickTime时间就会发送一个心跳;最小 的session过期时间为2倍tickTime。
- dataDir:存储内存中数据库快照的位置,如果不设置参数,更新食物的日志将被存储到默认位置。
高级配置:
- dataLogdDir:这个操作让管理机器把事务日志写入“dataLogDir”所指定的目录中,而不是“dataDir”所指定的目录。这将允许使用一个专用的日志设备,帮助我们避免日志和快照的竞争。
- maxClientCnxns:这个操作将限制连接到Zookeeper的客户端数量,并限制并发连接的数量,通过IP来区分不同的客户端。此配置选项可以阻止某些类别的Dos攻击。将他设置为零或忽略不进行设置将会取消对并发连接的限制。
- minSessionTimeout和maxSessionTimeout :即最小的会话超时和最大的会话超时时间。在默认情况下,minSession=2*tickTime;maxSession=20*tickTime。
集群配置:
- initLimit:此配置表示,允许follower(相对于Leaderer言的“客户端”)连接并同步到Leader的初始化连接时间,以tickTime为单位。当初始化连接时间超过该值,则表示连接失败。
- syncLimit:此配置项表示Leader与Follower之间发送消息时,请求和应答时间长度。如果follower在设置时间内不能与leader通信,那么此follower将会被丢弃。
server.A=B:C:D
A:其中 A 是一个数字,表示这个是服务器的编号;
B:是这个服务器的 ip 地址;
C:Leader选举的端口;
D:Zookeeper服务器之间的通信端口。
myid和zoo.cfg:除了修改 zoo.cfg 配置文件,集群模式下还要配置一个文件 myid,这个文件在 dataDir 目录下,这个文件里面就有一个数据就是 A 的值,Zookeeper 启动时会读取这个文件,拿到里面的数据与 zoo.cfg 里面的配置信息比较从而判断到底是那个 server。
最新文章
- bootstrap在jsp中的应用
- luogg_java学习_08_设计模式_API
- python运维开发坎坷之路-01
- 制作nginx和php的rpm包
- 如何为 Drupal 7 网站添加悬浮的反馈按钮?
- [Everyday Mathematics]20150209
- 【双十一到了,准备买书了么?】推荐几本c/c++入手的书籍
- oracle学习----访问路径
- CSS 总结
- nginx+php的配置
- js正则之零宽断言
- spring通知执行的顺序
- poi控制简单的word
- History Api使用演示
- C# - 代码重构
- laravel5.6中jquery+ajax分页
- 解决css冲突的问题
- stdio.h cstdio的区别
- 使用selenium爬取网站动态数据
- 有名管道mkfifo
热门文章
- BZOJ 2115:Xor(线性基+DFS)
- 在vue项目中遇到关于对象的深浅拷贝问题
- (ps2019)Photoshop 2019 最新破解版下载
- python接口自动化(三十)--html测试报告通过邮件发出去——中(详解)
- 从零开始认识Dubbo
- linux weblogic12.1.3.0卸载过程
- python基础知识六 文件的基本操作+菜中菜
- 洛谷P3275 [SCOI2011]糖果 题解
- 个人永久性免费-Excel催化剂功能第28波-工作薄瘦身,安全地减少非必要冗余
- Python字符串格式化-学这些就够用了