1. 单机服务
(1)配置 Java环境
(2)上传安装包
(3)安装包解压
tar - zxvf apache-zookeeper-3. 5. 9-bin. tar. gz
(4)创建数据文件存放目录
mkdir - p / var / lib/zookeeper
(5)创建配置文件并写入配置(conf/zoo_sample.cfg文件提供了基本的配置示例)
cat > / usr/local/zookeeper/conf/zoo. cfg << EOF
> tickTime=2000
> dataDir=/ var / lib/zookeeper
> clientPort=2181
> EOF
(6)启动、查看、关闭服务
sh zkServer. sh start
sh zkServer. sh start-foreground
sh zkServer. sh status
sh zkServer. sh stop
(7)验证是否安装正确(会返回基本信息)
telnet localhost 2181
srvr
(8)连接客户端
zkCli. sh - server node1:2181, node2:2181, node3:2181
ls /
create / firstNode serverCreated
get / firstNode
delete / firstNode
2. ZooKeeper 群组
由于使用了再均衡算法,一个 ZooKeeper 集群应该包含奇数个节点。 只有当群组里的大多数节点处于可用状态时, Zookeeper 才能处理外部的请求。也就是说,一个包含 3 个节点的群组允许 1 个节点失效,而一个包含 5 个节点的群组允许 2 个节点失效。 如果要对群组做一些如更换节点的修改,那么就需要依次重启每个节点。 不建议一个群组包含超过 7 个节点,因为 ZooKeeper 使用了一致性协议,节点过多则会降低整个群组的性能。 如果由于客户端连接太多,5 个或 7 个节点仍然无法支撑负载,则可以考虑增加额外的观察者节点来分摊只读流量。 安装 ZooKeeper 群组与 ZooKeeper 单机服务的区别在于配置文件有差异,并且每个节点需要增加 myid 文件 。
(1)修改公共配置(所有服务器的地址)
tickTime:Zookeeper 服务器间或客户端与服务器间维持心跳的时间间隔,即每个 tickTime 时间发送一个心跳。以毫秒为单位。 initLimit:用来配置 Zookeeper 接受客户端初始化连接时最长能忍受多少个心跳时间间隔数(这里的客户端不是用户连接 Zookeeper 服务器的客户端,而是 Zookeeper 服务器集群中连接到 Leader 的 Follower 服务器)。当已经超过 5 个心跳的时间(也就是 tickTime)长度后 Zookeeper 服务器还没有收到客户端的返回信息,那么表明这个客户端连接失败。总的时间长度就是 10 * 2000 = 20 秒。 syncLimit:标识 Leader 与 Follower 之间发送消息,请求和应答时间长度,最长不能超过多少个 tickTime 的时间长度,总的时间长度就是 5 * 2000 = 10 秒。 server.X= hostname:peerPort:leaderPort
X:服务器的ID,必须是一个整数,不过不一定要从零开始,也不要求是连续的。 hostname:服务器主机名或 IP 地址 peerPort:用于节点间通信的 TCP 端口。 leaderPort:用于首领选举的 TCP 端口。 authProvider.X:用于安全认证。 autopurge.snapRetainCount:保留多少个 snapshot ,之前的则删除。 autopurge.purgeInterval:设置多少小时清理一次。
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/ var / lib/zookeeper
clientPort=2181
server. 1= 10. 8. 212. 55:2888:3888
server. 2= 10. 8. 213. 55:2888:3888
server. 3= 10. 8. 214. 55:2888:3888
authProvider. 1=org. apache. zookeeper. server. auth. SASLAuthenticationProvider
authProvider. 2=org. apache. zookeeper. server. auth. SASLAuthenticationProvider
authProvider. 3=org. apache. zookeeper. server. auth. SASLAuthenticationProvider
autopurge. snapRetainCount=10
autopurge. purgeInterval=1
(2)新增 myid 文件
每台服务器必须在 dataDir 指定的目录下创建一个叫作 myid 文件,文件中要包含服务器 ID,这个 ID要与配置文件中的 ID 一致。
(3)集群中增加Observer节点
peerType=observer
server. 4=localhost:2890:3890
集群中的角色
领导者(Leader): 领导者不接受客户端请求,负责进行投票的发起和决议。 跟随者(Follower): 用于接收客户端请求并返回结果,同时参与 Leader 发起的投票。 观察者(Observer):Observer 可以接受客户端请求,并把请求转发给 Leader, 但是Observer不参与投票过程,只是同步 Leader 的转态, Observer 为系统扩展提供了一种方式。 学习者(Learner):和 Leader 进行状态同步的 server 统称为 Learner, 以上的 Follower 和 Observer 都是 Learner。