zoukankan      html  css  js  c++  java
  • zookeeper集群搭建

    系统版本

    slave1

    [root@192 bin]# cat /etc/centos-release

    CentOS Linux release 7.2.1511 (Core)

    [root@192 bin]# uname -a

    Linux 192.168.1.102 3.10.0-327.el7.x86_64 #1 SMP Thu Nov 19 22:10:57 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux

     

    slave1slave2

    [root@192 bin]# cat /etc/centos-release

    CentOS release 6.7 (Final)

    [root@192 bin]# uname -a

    Linux 192.168.1.103 2.6.32-573.el6.x86_64 #1 SMP Thu Jul 23 15:44:03 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux

    IP

    slave1 192.168.1.102/24

    slave2 192.168.1.103/24

    slave3 192.168.1.105/24

    主机名称到IP地址映射配置:(所有机器都要设置)

    vi /etc/hosts

        192.168.1.102   slave1

        192.168.1.103   slave2

        192.168.1.105   slave3

    测试映射连通性:

    [root@192 bin]# ping slave1

    [root@192 bin]# ping slave2

    [root@192 bin]# ping slave3

    开始安装:

    slave1端:

    [root@192 ~]# mkdir /opop

    [root@192 ~]# cd /opop

    [root@192 opop]# yum -y install wget

    [root@192 opop]# wget

    http://download.oracle.com/otn-pub/java/jdk/8u151-b12/e758a0de34e24606bca991d704f6dcbf/jdk-8u151-linux-x64.tar.gz?AuthParam=1510054639_b19a5f91ff21950bbc82421241aecebc    #下载jdk1.8.0_151

    [root@192 opop]# tar -zxvf jdk-8u151-linux-x64.tar.gz

    [root@192 opop]# mv jdk1.8.0_151/ jdk1.8

    [root@192 opop]# vi /etc/profile     #在最底下添加设置jdk的环境变量

          #set zookeeper environment

          export JAVA_HOME=/opop/jdk1.8

          export CLASSPATH=$JAVA_HOME/jre/lib/ext:$JAVA_HOME/lib/tools.jar

          export PATH=$JAVA_HOME/bin/:$PATH

    [root@192 opop]# source /etc/profile     #使变量立即生效

    [root@192 opop]# java -version       #检查java有没成功装上(查看java的版本)

    [root@192 opop]# wget http://mirrors.hust.edu.cn/apache/zookeeper/zookeeper-3.4.8/zookeeper-3.4.8.tar.gz         #下载zookeeper3.4.8

    [root@192 opop]# tar -zxvf zookeeper-3.4.8.tar.gz

    [root@192 opop]# cd zookeeper-3.4.8/conf

    [root@192 conf]# cp zoo_sample.cfg zoo.cfg

    [root@192 conf]#  vi zoo.cfg

          tickTime=2000            #默认项

          initLimit=10           #默认项

          syncLimit=5           #默认项

          dataDir=/tmp/zookeeper/data   #修改项

          clientPort=2181 #默认项

          server.1=slave1:2888:3888       #新加项,2888端口号是zookeeper服务之间通信的端口

          server.2=slave2:2888:3888      #新加项,3888端口是zookeeper与其他应用程序通信的端口

          server.3=slave3:2888:3888     #新加项

          maxClientCnxns=60       #按开启项

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

    syncLimit:配置LeaderFollower之间发送消息,请求和应答时间长度最长不能超过多少个ticketTime的时间长度,总的时间长度就是2*2000=4秒。

    server.A=B:C: D 其中A是一个数字,表示这是第几号服务器。B是这台服务器的IP地址。C表示这台服务器与集群中的Leader服务器交换信息的端口。D表示的是万一集群中的Leader服务器挂了,需要一个端口来重新进行选举,选出一个新的Leader,这个端口就是用来执行选举时服务器相互通信的端口。如果是伪集群的配置方式,由于B都是一样,所以不同的zookeeper实例通信端口号不能一样,所以要给他们分配不同的端口号。

    [root@192 opop]# scp -r /opop/zookeeper-3.4.8 slave2:/opop/

    [root@192 opop]# scp -r /opop/zookeeper-3.4.8 slave3:/opop/

    [root@192 opop]# scp -r /opop/jdk1.8/ slave2:/opop/

    [root@192 opop]# scp -r /opop/jdk1.8/ slave3:/opop/

    [root@192 opop]# mkdir -p /tmp/zookeeper/data/     #zoo.cfg文件中的dataDir指定的目录

    [root@192 opop]# echo 1 /tmp/zookeeper/myid        #创建一个myid文件,里面内容为一个数字用来标识当前主机

    释:编辑myid文件,并在对应的IP的机器上输入对应的编号。如在zookeepermyid文件内容就是1.如果只在单点上进行安装配置,那么只有一个server.1

    [root@192 opop]# cat /tmp/zookeeper/myid     #查看myid

    [root@192 opop]# cd zookeeper-3.4.8/bin/

    [root@192 opop]# ./zkServer.sh start         #启动zookeeper

    [root@192 opop]# tail -500f zookeeper.out     #查看zookeeper服务输出信息

    slave2slave3端:

    注:因为slave1端已经将包发送到slave2slave3了,so。。。。

    [root@192 ~]# iptables -F

    [root@192 ~]# setenforce 0

    [root@192 ~]# mkdir /opop

    [root@192 ~]# cd /opop

    [root@192 opop]# mkdir -p /tmp/zookeeper

    [root@192 opop]# echo 2 > /tmp/zookeeper/myid

    [root@192 opop]# vim /etc/profile

          #set zookeeper environment

          export JAVA_HOME=/opop/jdk1.8

          export CLASSPATH=$JAVA_HOME/jre/lib/ext:$JAVA_HOME/lib/tools.jar

          export PATH=$JAVA_HOME/bin/:$PATH

    [root@192 opop]# source /etc/profile

    [root@192 opop]# java -version

    [root@192 opop]# vim /opop/zookeeper-3.4.8/conf/zoo.cfg

          tickTime=2000              #默认项

          initLimit=10             #默认项

          syncLimit=5            #默认项

          dataDir=/tmp/zookeeper        #修改项

          clientPort=2181          #默认项

          server.1=slave1:2888:3888    #新加项

          server.2=slave2:2888:3888      #新加项

          server.3=slave3:2888:3888   #新加项

          maxClientCnxns=60       #按需打开项

    [root@192 opop]# cd zookeeper-3.4.8/bin/

    [root@192 bin]#  ./zkServer.sh start        #启动zookeeper

    [root@192 bin]#  ./zkServer.sh status     #查看状态

     

    #附:装了一次jdk9.0.1zookeeper3.4.9centos7上做出了点QuorumPeerMain的问题,这个牵扯到main函数(c语言),至于这个问题我们不去深研究。

    后来换成jdk1.8.0zookeeper3.4.8完成搭建zookeeper集群。

    官方解释:http://zookeeper.apache.org/doc/trunk/zookeeperProgrammers.html

    ZooKeeper会话

    ZooKeeper客户端通过使用语言绑定创建服务的句柄来建立与ZooKeeper服务的会话。一旦创建完成,句柄将以CONNECTING状态启动,并且客户端库尝试连接到组成ZooKeeper服务的服务器之一,此时它将切换到CONNECTED状态。在正常的操作过程中将处于这两个状态之一。如果发生不可恢复的错误,例如会话到期或身份验证失败,或者应用程序显式关闭了句柄,则句柄将移至CLOSED状态。下图显示了ZooKeeper客户端可能的状态转换:

     

    要创建客户端会话,应用程序代码必须提供一个连接字符串,其中包含一个逗号分隔的hostport对列表,每个对应于一个ZooKeeper服务器(例如“127.0.0.1:4545”或“127.0.0.1:3000,127.0.0.1 3001,127.0.0.13002" )。ZooKeeper客户端库将选择一个任意的服务器并尝试连接到它。如果此连接失败,或者客户端由于某种原因而与服务器断开连接,则客户端将自动尝试列表中的下一个服务器,直到(重新)建立连接。

    #####  至于zookeeper的集群原理去网上仔细看几遍相信屏幕前的你都能懂   good luck ~~########

  • 相关阅读:
    百度地图之自动提示--autoComplete
    h5之scrollIntoView控制页面元素滚动
    angular之interceptors拦截器
    angular之$broadcast、$emit、$on传值
    前端基础入门(一)-HTML-HTML基础
    改进自定义博客
    自定义博客主题
    使用JavaScript策略模式校验表单
    【经典面试题】圣杯布局以及双飞翼布局原理
    [JavaScript设计模式]惰性单例模式
  • 原文地址:https://www.cnblogs.com/smlile-you-me/p/7801375.html
Copyright © 2011-2022 走看看