zookeeper 集群 部署

近来在研究mqtt+kafka+zookeeper,因为传统的mqtt->DB方式,在程序重启的时候,避免不了会丢失一些数据,但是如果使用mqtt->kafka->DB的方式,那么就可以很大限度的避免数据的丢失。

OK,话不多说,先要部署zookeeper集群,网上示例文章很多,但是自己也免不了走了很多坑,记录下。

本人是在ubuntu的系统下部署的,其他系统,比如centos等估计也差不多。

1、下载安装配置jdk环境,这点就不废话了

2、下载zookeeper

    到 http://mirror.bit.edu.cn/apache/zookeeper/  下载zookeeper压缩文件,并上传到服务器。笔者用的是3.4.12版本。

    也可以在服务器用 wget http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.4.12/zookeeper-3.4.12.tar.gz 命令直接下载,免得还要去上传那么麻烦,反正笔者是这么做了。

3、解压、配置zookeeper

    然后肯定要经过一阵噼里啪啦的解压操作(tar -zxvf zookeeper-3.4.12.tar.gz)

    解压之后,移动到你想要放置的目录,打开zookeeper配置文件     

cd /usr/local/zookeeper/zookeeper-3.4.12/conf

   复制zoo_sample.cfg 文件,命名为zoo.cfg,zookeeper启动时,会找zoo.cfg文件    

cp zoo_sample.cfg zoo.cfg

    编辑 zoo.cfg 文件

vi zoo.cfg

    将配置文件设置成如下:

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/usr/local/zookeeper/data
clientPort=2181
server.1=0.0.0.0:2888:3888
server.2=192.168.52.131:2888:3888
server.3=192.168.52.133:2888:3888   

    然后在dataDir设置的路径上(/usr/local/zookeeper/data),生成一个myid的文件,内容写上1 

cd /usr/local/zookeeper/data
vi myid
1
:wq

    以上,有几点坑:

  • zookeeper集群, 必须要3个以上
  • 本机地址,直接写0.0.0.0(写成本机IP,反正我是启动不了)
  • myid文件的内容数字x,就是配置文件上,本机server设置的server.x,后面其他机子部署的时候,也要写上相应的数值,范围是1-255

   配置项转载

参数名 说明
clientPort 无默认值,必须配置,不支持系统属性方式配置。当前服务器对外提供服务端口,客户通过此端口与服务器建立连接,一般设置为1281。集群中不需要统一端口,可任意配置端口。
dataDir 无默认值,必须配置。服务器存储快照文件目录。默认情况下,如果没有配置dataLogDir,那么事务日志也会存储在这个目录中。建议将事务日志目录独立配置。
tickTime 默认值:3000(ms),,不支持系统属性方式配置。用于配置zookeeper中最小时间单元长度,很多运行时的时间间隔都是使用它的倍数来表示的。
initLimit Leader Zookeeper接收集群其他服务器初始化等待最大时间(10*tickTime)。
syncLimit Leader Zookeeper和集群其他服务器通信最大时间(5*tickTime)。

    server.id=host:port:port  解析

    每一行此配置表示一个集群中的一台服务器。其中id为Server ID,用来标识该机器在集群中的编号。同时,在所在服务器的数据目录(/tmp/zookeeper)下创建一个myid文件,该文件只有一行内容,并且是一个数字,就是对应每台服务器的Server ID数字。

    比如server.1=IP1:2888:3888的myid中的内容就是1。不同服务器的ID需要保持不同,并且和zoo.cfg文件中server.id中的id和myid文件的内容保持一致。id的取值范围为1~255。

    其中,server.id中配置参数的第一个port是集群中其他机器与Leader之间通信的端口,第二个port为当Leader宕机或其他故障时,集群进行重新选举Leader时使用的端口。

----------------------------------------------------------------------------------------------------------

    接下来,其他机子,也按照这种方式配置,配置文件内容一样,唯一不同的是server.x,是本机,就写0.0.0.0,否则就写对应的ip,同事dataDir目录下myid要以0.0.0.0的server.x对应,就OJBK了。

4、启动zookeeper

    进入zookeeper的bin目录

cd /usr/local/zookeeper/zookeeper-3.4.12/bin

    启动    

./zkServer.sh start

    然后你就会看到

ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/zookeeper-3.4.12/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED

    然后过一会儿,查看zookeeper启动状态    

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

    也可以通过java提供的工具查看是否启动:    

jps -lm
1075 org.apache.zookeeper.server.quorum.QuorumPeerMain /usr/local/zookeeper/zookeeper-3.4.12/bin/../conf/zoo.cfg
1543 sun.tools.jps.Jps -lm

    其他机子,也通过这样的方式,启动zookeeper。

    如果启动失败,可以查看bin目录下的zookeeper.out的打印日志,看下是什么错误。

以下记录本人遇到的启动失败错误

  • Invalid config, exiting abnormally

    我遇到这个问题,就是本地ip没有写成0.0.0.0,直接写本机的ip去了,所以,怎么启动都失败
  • nohup: failed to run command `java': No such file or directory

    mmp,遇到这个问题,一直以为是jdk没装好(当然也有可能,要自己检测下),后面搞来搞去,才知道是zookeeper文件夹权限问题。我使用ubuntu的账户运行的,然后zookeeper文件夹的拥有者,不是ubuntu的,所以一直报错。所以我就更改了zookeeper整个文件夹的拥有者为ubuntu,再次运行,就毛问题都没了。
sudo chown ubuntu -R zookeeper

之后再遇到什么问题,再记录。

感谢您的阅读。

    

      

猜你喜欢

转载自blog.csdn.net/caijiapeng0102/article/details/80756638