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