• zookeeper集群的部署


    因为这里zookeeper的集群部署都会2n+1台

    Dubbo建议使用Zookeeper作为服务的注册中心。

    Zookeeper集群中只要有过半的节点是正常的情况下,那么整个集群对外就是可用的。正是基于这个特性,要将ZK集群的节点数量要为奇数(2n+1:如3、5、7个节点)较为合适。

     

     

    zookeeper的介绍:

    zookeeper是一个分布式的开源框架,它能很好的管理集群,而且提供协调分布式应用的基本服务。

     

    它向外部应用暴露一组通用服务——分布式同步(Distributed Synchronization)、命名服务(Naming Service)、集群维护(Group Maintenance)等,简化分布式应用协调及其管理的难度,提供高性能的分布式服务。

     

    zookeeper本身可以以standalone模式(单节点状态)安装运行,不过它的长处在于通过分布式zookeeper集群(一个leader,多个follower),基于一定的策略来保证zookeeper集群的稳定性和可用性,从而实现分布式应用的可靠性。

     

     

    zookeeper 集群角色介绍:

     

    zookeeper集群中主要有两个角色:leader和follower。

     

    领导者(leader),用于负责进行投票的发起和决议,更新系统状态。

     

    学习者(learner),包括跟随者(follower)和观察者(observer)。

     

    其中follower用于接受客户端请求并想客户端返回结果,在选主过程中参与投票。

     

    而observer可以接受客户端连接,将写请求转发给leader,但observer不参加投票过程,只同步leader的状态,observer的目的是为了扩展系统,提高读取速度。

     

     

    zookeeper解决节点个数的选择:

     

    一个zookeeper集群需要运行几个zookeeper节点呢?

     

    你可以运行一个zookeeper节点,但那就不是集群了。如果要运行zookeeper集群的话,最好部署3,5,7个zookeeper节点。本次实验我们是以3个节点进行的。

     

    zookeeper节点部署的越多,服务的可靠性也就越高。当然建议最好是部署奇数个,偶数个不是不可以。但是zookeeper集群是以宕机个数过半才会让整个集群宕机的,所以奇数个集群更佳。

     

    你需要给每个zookeeper 1G左右的内存,如果可能的话,最好有独立的磁盘,因为独立磁盘可以确保zookeeper是高性能的。如果你的集群负载很重,不要把zookeeper和RegionServer运行在同一台机器上面,就像DataNodes和TaskTrackers一样。

     

    ZooKeeper与Dubbo服务集群架构图

    wKiom1aq1U_Ad065AAB91yejcxI238.jpg

    这里我们首先选择三台机器

    10.19.42.53

    10.19.190.32

    10.19.165.206

     1、 修改操作系统的/etc/hosts文件,添加IP与主机名映射:

    添加下面三个解析:

    10.19.42.53 zk-001
    10.19.190.32 zk-002
    10.19.165.206 zk-003

    2.这里我们下载zookeeper的压缩包(这里我的jdk的环境是1.8)

    cd /data/tools

    上传压缩包zookeeper-3.4.9.tar.gz

    tar -xf zookeeper-3.4.9.tar.gz

    这里可以做一个软连接

    ln -sv zookeeper-3.4.9 zookeeper

    cd zookeeper

    mkdir /data/zookeeper/{data,logs} -p

    cp conf/zoo_sample.cfg conf/zoo.cfg

    vim conf/zoo.cfg

    其他三个节点修改一下相应的地方即可

    参数说明:

    tickTime=2000

    tickTime这个时间是作为Zookeeper服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个tickTime时间就会发送一个心跳。

    initLimit=10

    initLimit这个配置项是用来配置Zookeeper接受客户端(这里所说的客户端不是用户连接Zookeeper服务器的客户端,而是Zookeeper服务器集群中连接到Leader的Follower 服务器)初始化连接时最长能忍受多少个心跳时间间隔数。当已经超过10个心跳的时间(也就是tickTime)长度后 Zookeeper 服务器还没有收到客户端的返回信息,那么表明这个客户端连接失败。总的时间长度就是 10*2000=20 秒。

    syncLimit=5

    syncLimit这个配置项标识Leader与Follower之间发送消息,请求和应答时间长度,最长不能超过多少个tickTime的时间长度,总的时间长度就是5*2000=10秒。

    dataDir=/home/wusc/zookeeper/node-01/data

    dataDir顾名思义就是Zookeeper保存数据的目录,默认情况下Zookeeper将写数据的日志文件也保存在这个目录里。

    clientPort=2181

    clientPort这个端口就是客户端(应用程序)连接Zookeeper服务器的端口,Zookeeper会监听这个端口接受客户端的访问请求。

    server.A=B:C:D中的A是一个数字,表示这个是第几号服务器,B是这个服务器的IP地址,C第一个端口用来集群成员的信息交换,表示这个服务器与集群中的leader服务器交换信息的端口,D是在leader挂掉时专门用来进行选举leader所用的端口。

     

    vim /data/zookeeper/zk1/data/myid

    1

    其他节点的值分别是2,3

    添加如下防火墙规则

    ##### zookeeper
    iptablse -A INPUT -m state --state NEW -m tcp -p tcp --dport 2081 -j ACCEPT
    iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 2888 -j ACCEPT
    iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 3888 -j ACCEPT

     

    重启防火墙:

     

    service iptables restart

     

    增加zookeeper环境变量

    编辑文件 /etc/profile,添加如下:

    export ZOOKEEPER_HOME=/data/tools/zookeeper
    export PATH=$ZOOKEEPER_HOME/bin:$PATH

    source /etc/profile

    增加zookeeper的启动脚本

    cd /etc/rc.d/init.d
    touch zookeeper && chmod +x zookeeper
    vim zookeeper
    #!/bin/bash
    case $1 in
             start) su root  /data/tools/zookeeper/bin/zkServer.sh start;;
             stop) su root  /data/tools/zookeeper/bin/zkServer.sh stop;;
             status) su root  /data/tools/zookeeper/bin/zkServer.sh status;;
             restart) su root  /data/tools/zookeeper/bin/zkServer.shrestart;;
             *)  echo "requirestart|stop|status|restart"  ;;
    esac

    // 添加到开机启动 chkconfig zookeeper on chkconfig --add zookeeper
    // 启动或停止 service zookeeper start | stop | restart

    这里我们可以查看一下我们的zookeeper服务端口,就是我们上面定义的那个
    这里我们启动第一台的时候会报错,接着把接下来的两台服务器起来之后才不会报错,我们可以看一下三台服务器的status.我们会看到有一台服务器的状态是leader,其余两台的状态是follower
    如果我们这里是单台的zookeeper的话,我们查看到的状态是standalone,这里我们在搭建zookeeper集群的时候一定要停止已经启动的zookeeper,
    zookeeper集群的搭建很简单,我们只需要修改每台服务器的zoo.cfg配置文件然后进行相关的操作即可。


    当我们的集群安装完成之后,我们可以通过客户端脚本连接到zookeeper集群上。对于客户端来说,zookeeper集群是一个整体,连接到zookeeper集群实际上感觉在独享整个集群的服务,所以,你可以在任何一个zookeeper结点上建立到服务集群的连接,例如
    bin/zkCli.sh -server 10.19.190.32:2081

     
    这里有一点要注意的是。我们配置hosts的时候 
    [wwwad@zk3 ~]$ cat /etc/hosts
    127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
    ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

    127.0.0.1 zk3

    10.19.118.88 zk1
    10.19.106.84 zk2
    10.19.171.44 zk3

    这个我把127.0.0.1的解析到了zk3,而且还是放在10.19.171.44 zk3之前,我怎么起都是报错的。这里我们需要把127.0.0.1的解析去掉,或者放在最后


    参考文章:
    因为我放文字链接会报错。所以截图了



    烂泥的文章:http://www.ilanni.com/?p=11393
    http://www.open-open.com/lib/view/open1454043410245.html
    http://blog.csdn.net/hongtu1993/article/details/53215587
    可以看看zookeeper服务器配置项详解:
    http://www.bug315.com/article/159.htm
    http://www.bug315.com/article/160.htm

     

     

  • 相关阅读:
    PowerDesigner 12小技巧-pd小技巧-pd工具栏不见了-pd修改外键命名规则-pd添加外键
    支付宝支付开发——当面付条码支付和扫码支付
    C#开发微信门户及应用(41)--基于微信开放平台的扫码登录处理
    ***微信 该连接无法访问问题解决办法
    JQuery 导入导出 Excel
    用PowerDesigner对现有的数据库反向工程建立E-R图
    js 停止事件冒泡 阻止浏览器的默认行为(阻止超连接 #)
    微信网页第三方登录原理
    C# 添加Windows服务,定时任务
    微信公众平台开发(104) 自定义菜单扫一扫、发图片、发地理位置
  • 原文地址:https://www.cnblogs.com/smail-bao/p/6593972.html
Copyright © 2020-2023  润新知