系统版本:html
slave1:java
[root@192 bin]# cat /etc/centos-releaselinux
CentOS Linux release 7.2.1511 (Core)apache
[root@192 bin]# uname -avim
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/Linuxcentos
slave1和slave2服务器
[root@192 bin]# cat /etc/centos-releaseoracle
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
[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服务器集群中链接到Leader的Follower服务器)初始化链接时最长能忍受多少个心跳时间间隔数。当已经超过10个心跳时间长度后zookeeper服务器尚未收到客户端的返回消息,那么代表这个客户端链接失败。总的时间长度就是5*2000=10秒。
syncLimit:配置Leader与Follower之间发送消息,请求和应答时间长度最长不能超过多少个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的机器上输入对应的编号。如在zookeeper上myid文件内容就是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服务输出信息
slave2和slave3端:
注:由于slave1端已经将包发送到slave2和slave3了,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.1和zookeeper3.4.9在centos7上作出了点QuorumPeerMain的问题,这个牵扯到main函数(c语言),至于这个问题咱们不去深研究。
后来换成jdk1.8.0和zookeeper3.4.8完成搭建zookeeper集群。
官方解释:http://zookeeper.apache.org/doc/trunk/zookeeperProgrammers.html
ZooKeeper会话
ZooKeeper客户端经过使用语言绑定建立服务的句柄来创建与ZooKeeper服务的会话。一旦建立完成,句柄将以CONNECTING状态启动,而且客户端库尝试链接到组成ZooKeeper服务的服务器之一,此时它将切换到CONNECTED状态。在正常的操做过程当中将处于这两个状态之一。若是发生不可恢复的错误,例如会话到期或身份验证失败,或者应用程序显式关闭了句柄,则句柄将移至CLOSED状态。下图显示了ZooKeeper客户端可能的状态转换:
要建立客户端会话,应用程序代码必须提供一个链接字符串,其中包含一个逗号分隔的host:port对列表,每一个对应于一个ZooKeeper服务器(例如“127.0.0.1:4545”或“127.0.0.1:3000,127.0.0.1 :3001,127.0.0.1:3002" )。ZooKeeper客户端库将选择一个任意的服务器并尝试链接到它。若是此链接失败,或者客户端因为某种缘由而与服务器断开链接,则客户端将自动尝试列表中的下一个服务器,直到(从新)创建链接。
##### 至于zookeeper的集群原理去网上仔细看几遍相信屏幕前的你都能懂 good luck ~!~!########