设为首页 收藏本站
查看: 1633|回复: 0

[经验分享] zookeeper部署和应用场景之一热备

[复制链接]

尚未签到

发表于 2015-9-6 09:06:48 | 显示全部楼层 |阅读模式
  1 zookeeper部署
  a、下载程序包
  wget http://mirrors.hust.edu.cn/apache/zookeeper/zookeeper-3.4.5/zookeeper-3.4.5.tar.gz
b、程序结构
zookeeper
    |---conf
      |--zoo.cfg
    |---bin
      |--zkServer.sh
      |--zkCli.sh
    |---lib
      |---zookeeper.jar     
   c、集群配置(三台)
  编辑zoo.cfg配置文件内容如下:
  [iyunv@DH17-ssjt-1625 conf]# vi zoo.cfg
# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
dataDir=/home/zookeeper/data
# the port at which the clients will connect
clientPort=2181
  server.1=10.2.16.25:2887:3887
server.2=10.2.16.26:2888:3888
server.3=10.2.50.111:2889:3889
  
d、启动
  分别zookeeper/bin目录,执行zkServer.sh & 即可启动:
  1 2014-05-21 23:02:34,088 - INFO [main:QuorumPeerConfig@90] - Reading configuration from: /home/ouyang/zookeeper-3.3.5/bin/ ../conf/zoo.cfg
2 2014-05-21 23:02:34,104 - INFO [main:QuorumPeerConfig@310] - Defaulting to majority quorums
3 2014-05-21 23:02:34,136 - INFO [main:QuorumPeerMain@119] - Starting quorum peer
4 2014-05-21 23:02:34,203 - INFO [main:NIOServerCnxn$Factory@143] - binding to port 0.0.0.0/0.0.0.0:2181
5 2014-05-21 23:02:34,240 - INFO [main:QuorumPeer@819] - tickTime set to 2000
6 2014-05-21 23:02:34,240 - INFO [main:QuorumPeer@830] - minSessionTimeout set to -1
7 2014-05-21 23:02:34,240 - INFO [main:QuorumPeer@841] - maxSessionTimeout set to -1
8 2014-05-21 23:02:34,241 - INFO [main:QuorumPeer@856] - initLimit set to 10
9 2014-05-21 23:02:34,265 - INFO [Thread-1:QuorumCnxManager$Listener@473] - My election bind port: 3888
  e、客户端命令实例操作
  常见的命令如下:
  ①. 显示根目录下、文件: ls / 使用 ls 命令来查看当前 ZooKeeper 中所包含的内容
  ②. 显示根目录下、文件: ls2 / 查看当前节点数据并能看到更新次数等数据
  ③. 创建文件,并设置初始内容: create /zk "test" 创建一个新的 znode节点“ zk ”以及与它关联的字符串
  ④. 获取文件内容: get /zk 确认 znode 是否包含我们所创建的字符串
  ⑤. 修改文件内容: set /zk "zkbak" 对 zk 所关联的字符串进行设置
  ⑥. 删除文件: delete /zk 将刚才创建的 znode 删除
  ⑦. 退出客户端: quit
  ⑧. 帮助命令: help
  例如:set /zk first
  "first"
cZxid = 0x10000000b
ctime = Wed May 21 23:13:30 CST 2014
mZxid = 0x10000000b
mtime = Wed May 21 23:13:30 CST 2014
pZxid = 0x10000000b
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 7
numChildren = 0
  
  对同一个节点同时维护多个版本,默认返回最新的版本信息,例如:set /zk second
  “second”
cZxid = 0x10000000b
ctime = Wed May 21 23:13:30 CST 2014
mZxid = 0x10000000f
mtime = Wed May 21 23:24:44 CST 2014
pZxid = 0x10000000b
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 6
numChildren = 0
  
  2 zookeeper应用场景之一
      假设有3个业务节点client实行热备,(多个业务节点的数据出口,其中只有一个节点处于work状态,实际进行数据输出工作,其它的节点进入备用的状态)。
2.1 基本原理
    EPHEMERAL_SEQUENTIAL特征:
     a 一旦业务节点挂掉,其相应注册到zookeeper服务里面的所有具有EPHEMERAL_SEQUENTIAL的节点均自动消失。
     b 如果一个路径节点具有EPHEMERAL_SEQUENTIAL特征,那么所有业务节点均可以以这条路径进行注册,但返回的相应节点信息会自动编号区分。  
       例如:/locks/sub这条路径节点名,三个业务节点均以这条路径节点名进行注册,getChildren("/locks",false)返回值会有三条信息sub00000000022, sub10000000020, sub20000000021
  
    Watcher特征:
    a 所有业务节点,均可以异步反向监听zookeeper服务上的路径节点,监听自己想关心路径下各个节点的变化信息(例如增加、删除、修改),一旦发生变化,可以实现异步回调,完成相应的业务操作功能。
  
2.2 思路     
           主要利用节点列表异步监听和EPHEMERAL_SEQUENTIAL的特征:
    a 三个业务节点分别连接zookeeper服务,创建相同路径的具有EPHEMERAL_SEQUENTIAL特征的节点
            例如:create("/locks/sub",CreateMode.EPHEMERAL_SEQUENTIAL),则分别返回sub00000000022, sub10000000020, sub20000000021值。
    b 三个业务节点均监听“/locks”目录,则其中任意一节点挂掉消失后,各个业务节点均可以监听和返回“/locks”目录的变化信息
    c 所有业务节点中,始终只有注册的路径编号值最小的业务节点处于真正work状态   
    d 当其中任意业务节点挂掉后,所有业务节点得到监听回调,仍然选择路径节点编号值最小的节点处于work状态
       例如:当前处于work状态的业务节点编号是sub00000000020,当其挂掉后,这个节点也会相应的消失;然后剩下来的sub10000000021和sub20000000022两个业务节点会监听到相应的变化,然后重新选择最小业务节点sub10000000021进行work。
  3 zookeeper存储模块
  a 操作接口
  ① 抽象类
       定义了两个接口OutputArchive和InputArchive,分别约定各个数据类型的序列化和反序列化操作,如下:
public interface InputArchive {

    public byte readByte(String tag) throws IOException;

    public boolean readBool(String tag) throws IOException;

    public int readInt(String tag) throws IOException;

    public long readLong(String tag) throws IOException;

    public float readFloat(String tag) throws IOException;

    public double readDouble(String tag) throws IOException;

    public String readString(String tag) throws IOException;

    public byte[] readBuffer(String tag) throws IOException;

    public void readRecord(Record r, String tag) throws IOException;

    public void startRecord(String tag) throws IOException;

    public void endRecord(String tag) throws IOException;

    public Index startVector(String tag) throws IOException;

    public void endVector(String tag) throws IOException;

    public Index startMap(String tag) throws IOException;

    public void endMap(String tag) throws IOException;

  }   
  
  
public interface OutputArchive {

    public void writeByte(byte b, String tag) throws IOException;

    public void writeBool(boolean b, String tag) throws IOException;

    public void writeInt(int i, String tag) throws IOException;

    public void writeLong(long l, String tag) throws IOException;

    public void writeFloat(float f, String tag) throws IOException;

    public void writeDouble(double d, String tag) throws IOException;

    public void writeString(String s, String tag) throws IOException;

    public void writeBuffer(byte buf[], String tag)

        throws IOException;

    public void writeRecord(Record r, String tag) throws IOException;

    public void startRecord(Record r, String tag) throws IOException;

    public void endRecord(Record r, String tag) throws IOException;

    public void startVector(List v, String tag) throws IOException;

    public void endVector(List v, String tag) throws IOException;

    public void startMap(TreeMap v, String tag) throws IOException;

    public void endMap(TreeMap v, String tag) throws IOException;

}

    ② 实现接口
  zookeeper也实现了Binary、Xml和Csv三种格式的序列化接口,如下:
DSC0000.png
  
b 数据内容
  zookeeper持久化硬盘的数据有两种:
    ① 树形文件系统,zookeeper利用树形文件结构层次命名空间的数据模型来记录和协调同步各个节点的状态
    ② 事务记录 zookeeper频繁于类似节点信息及数据地增删改等操作,事务记录主要记录类似数据库事务信息
  c 数据类结构如下
  ZKDatabase
  |--DataTree //数据逻辑视图(线程安全的)
      |--DataNodes
  |-FileTxnSnapLog
    |--TxnLog //Transactional日志
    |--SnapShot //数据快照日志

  
  
  参考:
  http://zookeeper.apache.org/
  http://blog.iyunv.com/cutesource/article/details/5822459
  http://blog.iyunv.com/pwlazy/article/details/8080626
  http://nileader.blog.iyunv.com/1381108/795265
  http://nileader.blog.iyunv.com/1381108/926753
  http://nileader.blog.iyunv.com/1381108/795230
  http://netcome.iteye.com/blog/1474255
  
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-109948-1-1.html 上篇帖子: Hadoop2的HA安装(high availability):nfs+zookeeper 下篇帖子: CentOS7 安装zookeeper
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表