zookeeper简介

zookeeper是分布式程序。作用是分布式协调服务。有奇数台,有半数以上节点存活就能够提供服务。

zookeeper是分布式场景里的第三方,主要功能是保管数据,提供监听,要求具有非常高的可靠性。

  • 管理用户提交的数据
  • 为用户程序提供节点的监听服务

zookeeper集群的角色有:follower,leader。其内部有自动投票选举机制(paxos,zab算法)。选举了leader之后,更新数据时,数据先写入leader,再由leader让follower更新并保持一致。

zookeeper不适合用到数据更新频繁,要求很严格的地方。集群大的时候数据更新保持一致耗时较长。

zookeeper安装配置

需要配置的是:myid,服务器

  • 安装zookeeper
sftp 上传zookeeper
tar -zxvf zoo^^^
rm -rf xxx
rm -rf *.xml *.txt * docs src *.asc *.md5 *.sha1 dist-maven
cd conf
cp zoo_sample.cfg zoo.cfg
      datadir = /root/zkdata
      server.1=mini1:2888:3888
      server.2=mini2:2888:3888
      server.3=mini3:2888:3888
mkdir /root/zkdata
echo 1 > myid
scp -r(拷文件夹) /apps/zookeeper root@mini2: /apps
(scp -r zookeeper-3.4.5 hadoop@mini2:$PWD)

bin/zkServer.sh start启动zookeeper
bin/zkServer.sh status,自动投票选出leader,follower
当我再一次安装zookeeper集群的时候,查看status时报错:

……
Error contacting service. It is probably not running.
使用zkServer.sh start-foreground,看到错误信息如下:
java.net.ConnectException: 拒绝连接
        at java.net.PlainSocketImpl.socketConnect(Native Method)
        at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)
        at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)
        at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)
        at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
        at java.net.Socket.connect(Socket.java:579)
        at org.apache.zookeeper.server.quorum.QuorumCnxManager.connectOne(QuorumCnxManager.java:354)
        at org.apache.zookeeper.server.quorum.QuorumCnxManager.connectAll(QuorumCnxManager.java:388)
        at org.apache.zookeeper.server.quorum.FastLeaderElection.lookForLeader(FastLeaderElection.java:765)
        at org.apache.zookeeper.server.quorum.QuorumPeer.run(QuorumPeer.java:716)

在网上看了一些方法,很久都没有解决问题,后来修改zoo.cfg中的配置:

server.1=0.0.0.0:2888:3888
server.2=mini2:2888:3888
server.3=mini3:2888:3888
把每一台的自己的主机名改为0.0.0.0

问题解决,贼奇怪……
jps,kill -9 1698,查看,杀死进程
前面是服务端,我们接下来启动命令行客户端

bin/zkCli.sh
connect mini2:2181
quit
  • zookeeper数据结构:
    其拥有树状的数据结构,每个节点叫znode(分为ephemeral,persistent)
    Znode有四种形式的目录节点(默认是persistent):
    • PERSISTENT
    • PERSISTENT_SEQUENTIAL(持久序列/test0000000019 )
    • EPHEMERAL
    • EPHEMERAL_SEQUENTIAL
create [-s -e] /app-emphemeral 8888
 写数据
get path [watch] 读数据
set 更新
watch 监听
ssh mini2 "source /etc/profile;/root/apps/zookeeper-3.4.5 /bin/zkServer.sh start"
  • zookeeper自启动脚本
echo "start zkServer"
for i in 1,2,3
do
ssh mini$i "source /etc/profile;/apps/zookeeper-3.4.5/bin/zkServer.sh start"
done
(mkdir /root/bin,vi zkstart.sh)

chmod +x
echo $path环境变量下默认就有用户主目录下的bin,所以无论在哪里都可以zkstart.sh

你可能感兴趣的:(zookeeper简介)