启动zookeeper(启动zookeeper权限不够)

本篇文章给大家谈谈启动zookeeper,以及启动zookeeper权限不够对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

Zookeeper集群启动

假设现在有四台服务器

[9.9.9.101 / 9.9.9.102 / 9.9.9.103 / 9.9.9.104]

分别在四个服务器设置,因为我们下面设置的数据目录是/usr/local/zookeeper/zkdata/zk

9.9.9.101 在/usr/local/zookeeper/zkdata/zk目录中新建文件 myid,写入内容 1

9.9.9.102 在/usr/local/zookeeper/zkdata/zk目录中新建文件 myid,写入内容 2

9.9.9.103 在/usr/local/zookeeper/zkdata/zk目录中新建文件 myid,写入内容 3

9.9.9.104 在/usr/local/zookeeper/zkdata/zk目录中新建文件 myid,写入内容 4

顺游穗谈序启动 9.9.9.101,9.9.9.102,9.9.9.103,9.9.9.104,

通过 ./zkServer.sh status 命令会发现以族型下角色情况:【这种情况跟zookeeper的选举机制有神碰关】

9.9.9.101 角色为 follower

9.9.9.102 角色为 leader

9.9.9.103 角色为 follower

9.9.9.104 角色为 observer

zookeeper启动失败

1.安装好zookeeper,并成功在安装目录下面创建了data文件夹。

2.在zookeeper下面创建zoo.cfg文件,目录棚扰昌下还有一个zoo_sample.cfg的配置文件,也可以改名称直接使用。

3.使用vim打开zoo.cfg添加以下配置:

4.进入zookeeper安装目录的bin目录下面使用./zkServer.sh start启动,看似启动成功了。

5.使用./zkServer.sh status查看提示如下:

                Error contacting service. It is probably not running.

6.看样子没有启动成功,使用的vim打开logs下面的日志文件查看。

以为是这里(紫色箭头处)的报错,又去查找一番,发现不李戚影响,但是日志里面又没有其他报错了:

7.突然发现日志咋这么少呢,于是用远程的ftp工具打开文件查看,发现下面还有报错。vim没有显示完!!!

8.发现问题是8080端口被占用了,于是杀死端口对应进程后再重新执行./zkServer.sh start和./zkServer.sh status发现已经成链扒功了。

9.总结:其实是踩坑了vim,因为没有显示完,没有找到下面的报错而导致的。

如何启动ZooKeeper

Zookeeper的启动入口在org.apache.zookeeper.server.quorum.QuorumPeerMain。

在这个类的main方法里进入了zookeeper的启动过程,首先我们会解析配置文件,即zoo.cfg和myid。

这样我们就知道了dataDir和dataLogDir指向哪儿了,然后就可以启动日志清理任务了(如果配置了的话)。

DatadirCleanupManager purgeMgr = new DatadirCleanupManager(config

.getDataDir(), config.getDataLogDir(), config

.getSnapRetainCount(), config.getPurgeInterval());

purgeMgr.start();

接下来会初始化ServerCnxnFactory,这个是用来接收来自客户端的连接的,也就是这里启动的春槐是一个tcp server。在Zookeeper里提供两种tcp server的实现,一个是使用java原生NIO的方式,另外一个是使用Netty。默认是java nio的方式,一个典型的Reactor模型。因为java nio编程并不是本文的重点,所以在这里就只是简单的介绍一下。

//首先根据配置创建对应factory的实例:NIOServerCnxnFactory 或者 NettyServerCnxnFactory

ServerCnxnFactory cnxnFactory = ServerCnxnFactory.createFactory();

//初始化配置

cnxnFactory.configure(config.getClientPortAddress(),config.getMaxClientCnxns());

创建几个SelectorThread处理具体的数据读取和写出。

先是创建ServerSocketChannel,bind等

this.ss = ServerSocketChannel.open();

ss.socket().setReuseAddress(true);

ss.socket().bind(addr);

ss.configureBlocking(false);

然后创建一个AcceptThread线程来接收客户端的连接。

这一部分就是处理客户端请求的模块了,如果遇到有客户端请求的问题可以看看这部分。

接下来就进入初始化的主要部分了,首先会创建一个QuorumPeer实例,这个类就是表示zookeeper集群中的一个节点。初始化QuorumPeer的时候有这么几个关键点:

1. 初始化FileTxnSnapLog,这个类主要管理Zookeeper中的操作日志(WAL)和snapshot。

2. 初始化ZKDatabase,这个类就是Zookeeper的目录结构在内存中的表示,所有的操作最后都会映射到这罩森念个类上面来。

3. 初始化决议validator(QuorumVerifier-QuorumMaj) (其实这一步,是在配置)。这一步是从zoo.cfg的server.n这一部分初始化出集群的成员出来,有哪些需要参与投票(follower),有哪些只是observer。还有决定half是多少等,这些都是zookeeper的核心。在这一步,对于每个节点会初始化一个QuorumServer对象,并且放到allMembers,votingMembers,observingMembers这几个map里。而且这里也对参与者的个数进行了一些判断物困。

4. leader选举 这一步非常重要,也是zookeeper里最复杂而最精华的一部分。

[img]

关于启动zookeeper和启动zookeeper权限不够的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

标签列表