美文网首页
(2)搭建zookeeper单机部署和集群部署

(2)搭建zookeeper单机部署和集群部署

作者: Mrsunup | 来源:发表于2018-11-25 00:52 被阅读0次

    zookeeper有单机、伪集群、集群三种部署方式,可根据自己对可靠性的需求选择合适的部署方式。下边对这三种部署方式逐一进行讲解。

    1. 系统环境准备

    操作系统 :centos7
    java 环境:jdk8

    我搭建的是自centos7的linux下,先配置好java的配置环境,然后下载zookeeper的相关的jar进行部署

    2.zookeeper部署

    tar -zxf zookeeper-3.4.5.tar.gz
    
    • 常用命令
      1.启动 ZK 服务:
      sh bin/zkServer.sh start
      1. 查看 ZK 服务状态:
        sh bin/zkServer.sh status
      2. 停止 ZK 服务:
        sh bin/zkServer.sh stop
      3. 重启 ZK 服务:
        sh bin/zkServer.sh restart
      4. 连接服务器
        sh zkCli.sh -timeout 0 -r -server ip:port

    3.集群模式

    初 次 使 用 zookeeper , 需 要 将 %zk_home%/conf 目 录 下 的zoo_sample.cfg 文件 copy 一份重命名为 zoo.cfg,修改 dataDir 目录,dataDir 表示日志文件存放的路径集群环境安装
    在 zookeeper 集群中,各个节点总共有三种角色,分别是:leader,follower,observer

    集群模式我们采用模拟 3 台机器来搭建 zookeeper 集群。分别复制安装包到三台机器上并解压,同时 copy 一份zoo.cfg。

    3.1 修改配置文件zoo.cfg

    在zoo.cfg配置文件配置以下的语句

    tickTime=2000
    dataDir=/tmp/zookeeper
    dataLogDir=/usr/myapp/zookeeper-3.4.5/logs
    clientPort=2181
    initLimit=10
    syncLimit=5
    server.1=192.168.44.128:2888:3888
    server.2=192.168.44.129:2888:3888
    server.3=192.168.44.130:2888:3888
    

    server.id=host:port1:port2

    id被称为service ID,用来标识机器在集群中机器序号,同时,在每台zookeeper机器上,需要在数据目录(dataDir参数指定的那个目录下)创建一个myid的文件,文件只要一行内容,并且是一个数字,即对应每台服务器的serverID的数字

    port1表示的是这个服务器与集群中的 Leader服务器交换信息的端口

    port2表示的是万一集群中的 Leader 服务器挂了,需要一个端口来重新进行选举,选出一个新的 Leader,而这个端口就是用来执行选举时服务器相互通信的端口。如果是伪集群的配置方式,由于 host 都是一样, 所以不同的 Zookeeper 实例通信端口号不能一样,所以要给它们分配不同的端口号

    3.2 新建 datadir 目录,设置 myid

    在每台zookeeper机器上,我们都需要在数据目录dataDir下创建一个myid 文件,该文件只有一行内容,对应每台机器的 Server ID 数字;比如 server.1 的 myid 文件内容就是1。【必须确保每个服务器的 myid 文件中的数字不同,并且和自己所在机器的 zoo.cfg 中 server.id 的 id 值一致,id 的范围是 1~255】

    3.3 启动 zookeeper
    sh  zkServer.sh start 
    

    4.单机模式

    zookeeper 支持单机模式,只要启动一台zookeeper机器,就可以正常提供正常的服务
    单机的部署模式基本与集群模式的部署基本一致,由于是单机模式,所以整个zookeeper的集群只有一台机器,所以zoo.cfg 的配置做如下的修改:

    tickTime=2000
    dataDir=/tmp/zookeeper
    dataLogDir=/usr/myapp/zookeeper-3.4.5/logs
    clientPort=2181
    initLimit=10
    syncLimit=5
    server.1=192.168.44.128:2888:3888
    

    启动zookeeper

    sh  bin/zkServer.sh start 
    

    然后查看的服务端的状态

    sh  bin/zkServer.sh status 
    
    ZooKeeper JMX enabled by default
    Using config: /root/zookeeper-3.4.12/bin/../conf/zoo.cfg
    Mode: standalone
    

    这里的mode信息为standalone,但是集群模式的mode显示为leader或者为follower

    5.伪集群模式

    如果手上有一台比较好的机器,作为单机部署,资源有点浪费,可以借助硬件上的虚拟化的技术,把一条物理机器转换为几台虚拟机,不过这样的成本太高,zookeeper允许你在一台机器上完成一个伪集群模式的搭建

    伪集群模就是集群中的所有机器都在一个机器上,但是以集群的特性来对外提供服务,这种模式和集群模式非常类似,只是把zoo.cfg做了如下的修改

    tickTime=2000
    dataDir=/tmp/zookeeper
    dataLogDir=/usr/myapp/zookeeper-3.4.5/logs
    clientPort=2181
    initLimit=10
    syncLimit=5
    server.1=192.168.44.128:2888:3888
    server.2=192.168.44.128:2889:3889
    server.3=192.168.44.128:2890:3890
    

    在这个zoo.cfg的配置中,机器列表的配置都是一个ip地址,端口号是不一样。

    6.带 Observer 角色的集群

    Observers:在不伤害写性能的情况下扩展Zookeeper

    尽管通过Client直接连接到Zookeeper集群的性能已经非常好了,但是这种架构如果要承受超大规模的Client,就必须增加Zookeeper集群的Server数量,随着Server的增加,Zookeeper集群的写性能必定下降,我们知道Zookeeper的Znode变更是要过半数投票通过,随着机器的增加,由于网络消耗等原因必然导致投票成本增加,从而导致写性能的下降。

    Observer是一种新型的Zookeeper节点,可以帮助解决上述问题,提供Zookeeper的可扩展性。Observer不参与投票,只是简单的接收投票结果,因此我们增加再多的Observer,也不会影响集群的写性能。除了这个差别,其他的和Follower基本上完全一样。例如:Client都可以连接到他们,并且都可以发送读写请求给他们,收到写请求都会上报到Leader。

    Observer有另外一个优势,因为它不参与投票,所以他们不属于Zookeeper集群的关键部位,即使他们Failed,或者从集群中断开,也不会影响集群的可用性。根据Observer的特点,我们可以使用Observer做跨数据中心部署。如果把Leader和Follower分散到多个数据中心的话,因为数据中心之间的网络的延迟,势必会导致集群性能的大幅度下降。使用Observer的话,将Observer跨机房部署,而Leader和Follower部署在单独的数据中心,这样更新操作会在同一个数据中心来处理,并将数据发送的其他数据中心(包含Observer的),然后Client就可以在其他数据中心查询数据了。但是使用了Observer并非就能完全消除数据中心之间的延迟,因为Observer还得接收Leader的同步结果合Observer有更新请求也必须转发到Leader,所以在网络延迟很大的情况下还是会有影响的,它的优势就为了本地读请求的快速响应

    使用Observer
    如果要使用Observer模式,可以在对应节点的配置文件添加如下配置:

    peerType=observer
    

    上面仅仅是告诉Zookeeper该节点是Observer,其次,必须在配置文件指定哪些节点被指定为Observer,例如:

    server.1=localhost:2181:3181:observer
    

    相关文章

      网友评论

          本文标题:(2)搭建zookeeper单机部署和集群部署

          本文链接:https://www.haomeiwen.com/subject/toeuqqtx.html