Zookeeper的集群安装

发表时间:2017-11-22 14:33:57 浏览量( 20 ) 留言数( 0 )


学习目标:

1、了解消息队列相关技术

2、了解消息队列的一些常见技术和对比


学习过程:


一、在三台run虚拟机安装zookeeper

1、使用root 解压,并重命名为zookeeper

[liubao@run2 opt]$ tar zxvf zookeeper-3.4.9.tar.gz

2、使用root把解压的文件的属主和属组改成liubao

chown -R liubao:liubao  zookeeper

3、切换liubao

   su - liubao

4、进入zookeeper目录

  cd zookeeper

5、建立数据目录和日志目录

  mkdir data

  mkdir logs

6、复制配置文件

 cd conf/

cp zoo_sample.cfg zoo.cfg

7、修改配置文件

dataDir=/opt/zookeeper/data

dataLogDir=/opt/zookeeper/logs   //这个好像没有什么作用,不知道是不是版本的问题。

server.1=run1.com:2888:3888   

server.2=run2.com:2888:3888

server.3=run3.com:2888:3888

8、新增myid文件

/data目录下面建立一个myid文件,内容就写一个1,对应还是那干嘛的server.1

vim myid

1

 保存退出

 注意:

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

除了修改 zoo.cfg 配置文件,集群模式下还要配置一个文件 myid,这个文件在 dataDir 目录下,这个文件里面就有一个数据就是 A 的值,Zookeeper 启动时会读取这个文件,拿到里面的数据与 zoo.cfg 里面的配置信息比较从而判断到底是那个 server。

9、切换到root修改防火墙

vim /etc/sysconfig/iptables

-A INPUT -m state --state NEW -m tcp -p tcp --dport 2181 -j ACCEPT

-A INPUT -m state --state NEW -m tcp -p tcp --dport 2888 -j ACCEPT

-A INPUT -m state --state NEW -m tcp -p tcp --dport 3888 -j ACCEPT

重启防火墙

/etc/init.d/iptables restart

查看防火墙状态

/etc/init.d/iptables status

10、为了方便使用可以设置环境变量,这个可以不做,也可以把zookeeper配置成为服务

这里就修改liubao2用户的环境变量

ZOOKEEPER_HOME=/opt/zookeeper

PATH=$ZOOKEEPER_HOME/bin:$PATH

export ZOOKEEPER_HOME PATH

11、启动

[liubao2@liubao2 bin]$ zkServer.sh start

JMX enabled by default

Using config: /home/liubao2/zookeeper-3.4.6/bin/../conf/zoo.cfg

Starting zookeeper ... STARTED

12、客户端登录查看集群情况

查看进程,这个是java命令,必须安装了jdk才有的。

[liubao2@liubao2 bin]$ jps

1918 QuorumPeerMain

1934 Jps

查看状态

[liubao2@liubao2 bin]$ zkServer.sh status

JMX enabled by default

Using config: /home/liubao2/zookeeper-3.4.6/bin/../conf/zoo.cfg

Mode: standalone

查看日志

[liubao2@liubao2 bin]$ tail -100f zookeeper.out

停止服务

 zkServer.sh stop

 

13、客户端登录

你可以随便登录一台,通过zkCli.sh -server 命令可以连接到其中一台server中,然后就可以通过交互式命令来控制zk了,简单讲解一下

[liubao@run1 data]$ zkCli.sh -server run2.com

#创建一个znode: /t 和数据tdata,其结点是EPHEMERAL类型的,

#意味着,客户端断开后其结点就会被删除

[zk: 192.168.201.128(CONNECTED) 25] create -e /t data

Created /t

[zk: 192.168.201.128(CONNECTED) 26] ls /   #查看/目录下目录   ,  这个时候你可以使用zkCli.sh -server run1.com 登录其他节点也会同步数据的

[t, zookeeper]

[zk: 192.168.201.128(CONNECTED) 27] ls /t   #查看/t目录下的内容

[]

[zk: 192.168.201.128(CONNECTED) 28] get /t  #获取并查看/t目录写的数据

tdata

cZxid = 0x100000005

ctime = Sun Apr 22 17:58:05 CST 2012

mZxid = 0x100000005

mtime = Sun Apr 22 17:58:05 CST 2012

pZxid = 0x100000005

cversion = 0

dataVersion = 0

aclVersion = 0

ephemeralOwner = 0x136d781d8750002

dataLength = 5

numChildren = 0

14、把zookeeper配置成为服务开机自动启动

在所有的服务器执行以下操作

1、在/etc/init.d/目录下面新建启动文件,内容如下:

[root@run2 init.d]# vim zkServerd

#!/bin/bash

#chkconfig:2345 20 90

#description:zkServerd

#processname:zkServerd

export JAVA_HOME=/usr/local/java/jdk

export PATH=$JAVA_HOME/bin:$PATH

case $1 in

         start) su liubao /opt/zookeeper/bin/zkServer.sh start;;

         stop) su liubao /opt/zookeeper/bin/zkServer.sh stop;;

         status) su liubao /opt/zookeeper/bin/zkServer.sh status;;

         restart) su liubao /opt/zookeeper/bin/zkServer.shrestart;;

         *)  echo "requirestart|stop|status|restart"  ;;

esac

2、这个时候使用启动命令启动会报错,因为日志输入文件有问题:

修改

[root@run1 init.d]# cd /opt/zookeeper/bin/

[root@run1 bin]# vim zkEnv.sh

if [ "x${ZOO_LOG_DIR}" = "x" ]

then

    ZOO_LOG_DIR="/opt/zookeeper/logs"

fi

3、配置成为服务并重启启动即可

[root@run1 init.d]# chkconfig --add zkServerd

[root@run1 init.d]# chkconfig  zkServerd on

验证是否成功

[root@run1 init.d]# chkconfig --list zkServerd

zkServerd       0:关闭  1:关闭  2:启用  3:启用  4:启用  5:启用  6:关闭 

************脚本说明************

#!/bin/sh

#chkconfig: 2345 80 90

    #description:auto_run

第一行,告诉系统使用的shell,所以的shell脚本都是这样。

    第 二行,chkconfig后面有三个参数2345,80和90告诉chkconfig程序,需要在rc2.d~rc5.d目录下,创建名字为 S80auto_run的文件连接,连接到/etc/rc.d/init.d目录下的的auto_run脚本。第一个字符是S,系统在启动的时候,运行脚 本auto_run,就会添加一个start参数,告诉脚本,现在是启动模式。同时在rc0.d和rc6.d目录下,创建名字为K90auto_run的 文件连接,第一个字符为K,个系统在关闭系统的时候,会运行auto_run,添加一个stop,告诉脚本,现在是关闭模式。

注意上面的三行是中,地二,第三行是必须的,否则在运行chkconfig --add auto_run时,会报错。