Linux下搭建ZooKeeper集群并整合Dubbo配置

1.环境说明

Zookeeper 不仅可以单机提供服务,同时也支持多机组成集群来提供服务,实际上Zookeeper还支持另外一种伪集群的方式,也就是可以在一台物理机上运行多个Zookeeper实例.

Zookeeper通过复制来实现高可用性,只要集合体中半数以上的机器处于可用状态,它就能够保证服务继续。

因为官网建议至少3个节点,3台机器只要有2台可用就可以选出leader并且对外提供服务(2n+1台机器,可以容n台机器挂掉)。如果你仅仅安装了两台跟一台有什么区别?

这里我们在三台装有centos6.4(64位)的服务器上安装ZooKeeper。

2.安装ZooKeeper

1)下载ZooKeeper,建议选择稳定版,即stable的。

wget http://apache.dataguru.cn/zookeeper/stable/zookeeper-3.4.9.tar.gz

2)解压 tar -xvf zookeeper-3.4.9.tar.gz

3)新建zoo.cfg并修改

# The number of milliseconds of each ticktickTime=2000# The number of ticks that the initial# synchronization phase can takeinitLimit=10# The number of ticks that can pass between# sending a request and getting an acknowledgementsyncLimit=5# the directory where the snapshot is stored.# do not use /tmp for storage, /tmp here is just# example sakes.dataDir=/tmp/zookeeper# the port at which the clients will connectclientPort=2181# the maximum number of client connections.# increase this if you need to handle more clients#maxClientCnxns=60## Be sure to read the maintenance section of the# administrator guide before turning on autopurge.## http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance## The number of snapshots to retain in dataDir#autopurge.snapRetainCount=3# Purge task interval in hours# Set to "0" to disable auto purge feature#autopurge.purgeInterval=1server.12=172.16.1.12:2888:3888server.13=172.16.1.13:2888:3888server.14=172.16.1.14:2888:3888

参数说明: ①tickTime:心跳时间,毫秒为单位。

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

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

④dataDir:存储内存中数据库快照的位置。

⑤clientPort:监听客户端连接的端口

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

4)dataDir目录下创建myid文件,将内容设置为上⑥中的A值,用来标识不同的服务器。

3.同步复制到其他服务器

4.测试ZooKeeper

1)各节点上启动 zkServer.sh start 2) 各节点查看状态 zkServer.sh status

JMX enabled by defaultUsing config: /home/zookeeper-3.4.9/bin/../conf/zoo.cfgMode: follower

注:如果状态 是Mode: follower 或者 Mode: leader 说明集群成功。

可能出现的问题: 1)Error contacting service. It is probably not running. 无法启动的问题,使用zkServer.sh start-foreground启动查看日志。

2)报错/tmp/zookeeper/myid file is missing 原因:zk集群中的节点需要获取myid文件内容来标识该节点,缺失则无法启动;

解决方法:在zk数据文件存放目录下(见 $ZK/conf/zoo.cfg,dataDir属性),创建myid文件并写入一个数字用来标识本节点(类似这个节点的身份证)。

三台机器分别执行: echo ‘12’ > /tmp/zookeeper/myid echo ‘13’ > /tmp/zookeeper/myid echo ‘14’ > /tmp/zookeeper/myid

由于配置在tmp目录,重启机器可能会丢失。

2)其中一台zookeeper是单例状态 Mode: standalone ,重启下服务试试。

5.ZooKeeper集群整合Dubbo配置

Zookeeper单机配置: 方式一、

<dubbo:registryaddress="zookeeper://10.20.153.10:2181"/>

方式二、

<dubbo:registryprotocol="zookeeper"address="10.20.153.10:2181"/>

Zookeeper集群配置:

方式一、

<dubbo:registry address="zookeeper://10.20.153.10:2181?backup=10.20.153.11:2181,10.20.153.12:2181"/>

方式二、

<dubbo:registry protocol="zookeeper"address="10.20.153.10:2181,10.20.153.11:2181,10.20.153.12/>

集群配置方式一,特别适用于dubbo-admin 和dubbo-monitor

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏三木的博客

Linux shell 程序设计1——安装及入门

1、什么是shell? shell是linux内核的“壳”,是用户和内核的桥梁。它类似于windows下的命令提示符,将用户输入的命令解释给内核执行,并返回给用...

2016
来自专栏图形学与OpenGL

错误 RC1015: 无法打开包含文件 'XTToolkitPro.rc'

XtremeToolkitPro作为VC++/MFC平台下目前最流行的GUI界面库之一,安装和使用都很方便。不过,在实际使用中...

3383
来自专栏云计算教程系列

如何在Ubuntu 18.04上安装Apache Kafka

Apache Kafka是一种流行的分布式消息代理,旨在有效处理大量实时数据。Kafka集群不仅具有高度可扩展性和容错性,而且与其他消息代理(如ActiveMQ...

2612
来自专栏信安之路

Java代码审计-铁人下载系统

初学 java 代码审计,跟着表哥们脚步,走一遍审计流程,就选了个没有使用 Java 框架的 java 系统,作为入门。

980
来自专栏斑斓

Spark Submit的ClassPath问题

需求场景: 我们的产品需要与客户的权限系统对接,即在登录时使用客户的认证系统进行认证。集成认证的方式是调用客户提供的jar包,调用userService的aut...

4809
来自专栏存储

spring boot redis分布式锁

随着现在分布式架构越来越盛行,在很多场景下需要使用到分布式锁。分布式锁的实现有很多种,比如基于数据库、zookeeper等,本文主要介绍使用Redis做分布式锁...

5935
来自专栏令仔很忙

新手学Linux(八)----MySql安装(Centos7)

最近项目新申请了云服务器,老大让我搭了下环境,在安装MySql的时候遇到的坑稍微多点,所以在这里做个记录,我的安装方式不是通过安装包来安装的,而是通过yum来...

1281
来自专栏linux驱动个人学习

proc文件系统

一、proc文件系统是什么? proc是一个伪文件系统,伪文件系统的定义: 它只存在内存当中,而不占用外存空间。它以文件系统的方式为访问系统内核数据的操作提供接...

3687
来自专栏JMCui

Hybris 项目工程配置

1、控制台页面进入platform目录 cd F:\hybris640\hybris\bin\platform 并运行 setantenv.bat 生成对应的a...

5589
来自专栏javathings

JVM 线程和操作系统线程一一对应吗?

Java 的线程和操作系统的线程是一一对应的。使用 Java 线程就是使用一个操作系统本地线程。

3334

扫码关注云+社区

领取腾讯云代金券