zookeeper入门——配置集群在eclipse测试

zookeeper简介
官方文档上这么解释zookeeper,它是一个分布式服务框架,是Apache Hadoop 的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等。简单来说zookeeper在大数据开发当中就是各框架的润滑剂,保存一些集群的配置信息。从设计模式的角度来理解:zookeeper是一个基于观察者模式的分布式服务管理框架,它负责存储和管理大家的都关心的数据,然后接受观察者的注册,一旦这些数据状态发生改变,zookeeper就将负责通知在zookeeper上注册的那些观察者做出相应的反应。

zookeeper的特点

1、zookeeper:一个领导者(Leader),多个跟随者(Follower)组成的集群

2、集群中只要有半数以上节点存活,zookeeper集群就能正常服务

3、全局数据一致性:每个server保存一份相同的数据副本,client无论连接到哪个server,数据都是一直的

4、更新请求顺序进行,来自同一个client的更新请求按其发送顺序一次执行

5、数据更新原子性,一次数据更新要么成功要么失败

6、实时性,在一定时间范围内,client能读到最新数据

zookeeper数据结构

树型结构:与unix文件系统类似,整体一棵树,每个节点称作一个ZNode,每个默认能够存储1MB的数据,每个ZNode都可以通过其路径唯一标识。

zookeeper选举机制

半数机制:集群中半数以上机器存活,集群可用。所有适合安装奇数台服务器。zookeeper配置文件中不指定Master和Slave,zookeeper工作时一个节点为Leader其他为Follower,Leader是通过内部选举机制产生的。在安装集群时会配置myid每个服务器的id不一样,也不是同时启动,所有按照myid启动顺序,一台一台启动服务器,已经启动的服务器进行投票选举,如果没有超过半数则下一轮投票myid比自己大的服务器。例如:三台服务器集群myid分别为1、2、3,1启动时1号服务器投票自己,获得一票,未过半数,第二轮2号启动,1号投票2号,2号投票自己,获得两票过半数,2号为Leader,启动3号,不再投票。

zookeeper节点类型

持久:客户端和服务器断开连接后,创建节点不删除

短暂:客户端和服务器断开连接后,创建的节点自己删除

分布式安装部署

 1)下载解压

官网下载

tar -zxvf zookeeper-3.4.14.tar.gz -C /opt/mudole
xsync zookeeper-3.4.14/ #分发到集群

2)配置服务器编号

zkData文件夹为在zoo.cfg文件中配置的数据存储目录

注意分发myid时每台机器的编号必须不同

#在安装目录创建
mkdir -p  zkData
#在zkData新建myid文件
touch myid
vim myid
#写上编号 例如:1

3)配置文件

重命名zookeeper-3.4.14/conf下的zoo_sample.cfg为zoo.cfg

vim zoo.cfg
#添加内容
dataDir=/opt/module/zookeeper-3.4.14/zkData
server.1=hadoop-101:2888:3888
server.2=hadoop-102:2888:3888
server.3=hadoop-103:2888:3888

server.1=hadoop-101:2888:3888这个必须按照自己实际集群环境搭建,server.后面的数字就是myid编号,2888表示服务器与集群Leader服务器交换信息的端口,3888表示万一Leader服务器故障通过这个端口进行重新选举

4)启动测试

在zookeeper安装目录下通过bin/zkServer.sh start命令开启 每个服务器都要开启,bin/zkServer.sh status查看状态

监听器原理

1)要有main()线程 

2)在main线程中创建zookeeper客户端,这时会创建两个线程,一个负责网络通信连接(connect)一个负责监听(listener) 

3)通过connect线程注册监听事件发送给zookeeper

4)在zookeeper的注册监听器列表中将注册的监听事件添加到列表

5)zookeeper监听到有数据或路径变化,就会发送这个消息给listener线程

6)listener线程内部调用了process()方法

写数据流程

eclipse环境搭建

创建maven工程

添加pom文件 

<dependencies>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.14</version>
</dependency>
</dependencies>

拷贝log4j.properties文件到项目目录的src/main/resources目录下

log4j.rootLogger=INFO,stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d   %p   [%c] - %m%n
log4j.appender.logfile=org.apache.log4j.FileAppender
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d  %p   [%c] - %m%nS

创建zookeeper客户端

package com.hadoop.zookeeper;

import org.junit.Test;

import java.io.IOException;

import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.ZooKeeper;

public class TestZookeeper{

       private String connectString = "hadoop-101:2181,hadoop-102:2181,hadoop-103:2181";
       private int sessionTimeout = 2000;
       private ZooKeeper zkClient;
       
       @Test
       public void init() throws IOException {
               zkClient = new ZooKeeper(connectString, sessionTimeout, new Watcher() {
               
               public void process(WatchedEvent event) {
                // TODO Auto-generated method stub
                
            }
           });
       }

}

测试

 运行能看到这些信息则表示成功配置客户端!

猜你喜欢

转载自www.cnblogs.com/assesion-tang-112/p/12629944.html
今日推荐