zookeeper集群搭建

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
日志服务 SLS,月写入数据量 50GB 1个月
注册配置 MSE Nacos/ZooKeeper,118元/月
简介:

因为公司的业务发展,需要搭建codis集群(一个由国内豌豆荚开发的redis集群解决方案),但是codis集群是依赖与zookeeper集群的。所以这篇文章,我们主要介绍有关zookeeper集群的搭建。

一、zookeeper介绍

zookeeper是一个分布式的开源框架,它能很好的管理集群,而且提供协调分布式应用的基本服务。

它向外部应用暴露一组通用服务——分布式同步(Distributed Synchronization)、命名服务(Naming Service)、集群维护(Group Maintenance)等,简化分布式应用协调及其管理的难度,提供高性能的分布式服务。

zookeeper本身可以以standalone模式(单节点状态)安装运行,不过它的长处在于通过分布式zookeeper集群(一个leader,多个follower),基于一定的策略来保证zookeeper集群的稳定性和可用性,从而实现分布式应用的可靠性。

1.1、zookeeper集群角色介绍

zookeeper集群中主要有两个角色:leader和follower。

领导者(leader),用于负责进行投票的发起和决议,更新系统状态。

学习者(learner),包括跟随者(follower)和观察者(observer)。

其中follower用于接受客户端请求并想客户端返回结果,在选主过程中参与投票。

而observer可以接受客户端连接,将写请求转发给leader,但observer不参加投票过程,只同步leader的状态,observer的目的是为了扩展系统,提高读取速度。

1.2 zookeeper集群节点个数

一个zookeeper集群需要运行几个zookeeper节点呢?

你可以运行一个zookeeper节点,但那就不是集群了。如果要运行zookeeper集群的话,最好部署3,5,7个zookeeper节点。本次实验我们是以3个节点进行的。

zookeeper节点部署的越多,服务的可靠性也就越高。当然建议最好是部署奇数个,偶数个不是不可以。但是zookeeper集群是以宕机个数过半才会让整个集群宕机的,所以奇数个集群更佳。

你需要给每个zookeeper 1G左右的内存,如果可能的话,最好有独立的磁盘,因为独立磁盘可以确保zookeeper是高性能的。如果你的集群负载很重,不要把zookeeper和RegionServer运行在同一台机器上面,就像DataNodes和TaskTrackers一样。

PS:本次实验所使用的OS有centos6、centos7和ubuntu15,如下:

clip_image001

clip_image002

clip_image003

为什么本次实验会使用到两种三个不同的OS,主要是刚好趁这个机会学习下最新的OS。

二、zookeeper安装

zookeeper介绍完毕后,我们现在就来安装zookeeper。而zookeeper运行需要java的支持,所以我们要首先安装jdk。

注意:zookeeper、jdk需要在每台服务器上都要安装和运行。

2.1 安装jdk

如果是centos系统,使用如下命令安装jdk:

yum search jdk

clip_image004

yum -y install java-1.6.0-openjdk

clip_image005

如果是ubuntu系统,使用如下命令安装jdk:

apt-cache search jdk |grep openjdk

clip_image006

apt-get -y install java-1.6.0-openjdk

clip_image007

jdk安装完毕后,我们来查看下java版本,使用如下命令:

java -version

clip_image008

2.2 安装zookeeper

zookeeper的安装很简单,我们只需要下载zookeeper压缩包,然后解压、配置、执行就可以了。如下:

wget http://mirrors.cnnic.cn/apache/zookeeper/zookeeper-3.4.8/zookeeper-3.4.8.tar.gz

clip_image009

zookeeper下载完毕后,我们进行如下操作:

tar -C /usr/local/ -xf zookeeper-3.4.8.tar.gz

cd /usr/local/

mv zookeeper-3.4.8 zookeeper

chown root:root -R zookeeper/

cd zookeeper

cp conf/zoo_sample.cfg conf/zoo.cfg

clip_image010

把zookeeper加入到环境变量,如下:

vim /etc/profile

export PATH=$PATH:/usr/local/zookeeper/bin

clip_image011

执行source命令使刚刚修改的环境生效,如下:

source /etc/profile

env

clip_image012

现在我们在其中任意一台服务器上启动zookeeper,使用如下命令:

bin/zkServer.sh start

clip_image013

查看zookeeper端口、状态和zookeeper日志,如下:

netstat -tunlp

bin/zkServer.sh status

cat zookeeper.out

clip_image014

通过上图,我们可以很明显的看到zookeeper监听的是TCP的2181端口,是以standalone单机模式运行的,而且通过zookeeper日志也可以看到目前zookeeper是正常运行的。

三、zookeeper集群搭建

zookeeper搭建完毕后,我们现在来配置zookeeper集群。

注意:在搭建zookeeper集群时,一定要停止已经启动的zookeeper。

3.1 修改zookeeper配置文件

zookeeper集群的搭建很简单,我们只需要修改每台服务器的zoo.cfg配置文件然后进行相关的操作即可。

先来修改zookeeper的配置文件zoo.cfg,如下:

vim /usr/local/zookeeper/conf/zoo.cfg

tickTime=2000

initLimit=10

syncLimit=5

clientPort=2181

dataLogDir=/usr/local/zookeeper/logs

dataDir=/usr/local/zookeeper/data

server.1= 192.168.1.9:2888:3888

server.2= 192.168.1.124:2888:3888

server.3= 192.168.1.231:2888:3888

clip_image015

配置文件参数说明:

tickTime这个时间是作为zookeeper服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是说每个tickTime时间就会发送一个心跳。

initLimit这个配置项是用来配置zookeeper接受客户端(这里所说的客户端不是用户连接zookeeper服务器的客户端,而是zookeeper服务器集群中连接到leader的follower 服务器)初始化连接时最长能忍受多少个心跳时间间隔数。

当已经超过10个心跳的时间(也就是tickTime)长度后 zookeeper 服务器还没有收到客户端的返回信息,那么表明这个客户端连接失败。总的时间长度就是 10*2000=20秒。

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

dataDir顾名思义就是zookeeper保存数据的目录,默认情况下zookeeper将写数据的日志文件也保存在这个目录里;

clientPort这个端口就是客户端连接Zookeeper服务器的端口,Zookeeper会监听这个端口接受客户端的访问请求;

server.A=B:C:D中的A是一个数字,表示这个是第几号服务器,B是这个服务器的IP地址,C第一个端口用来集群成员的信息交换,表示这个服务器与集群中的leader服务器交换信息的端口,D是在leader挂掉时专门用来进行选举leader所用的端口。

3.2 创建相关目录

配置文件修改完毕后,我们来创建zookeeper数据目录和日志目录,使用如下命令:

mkdir -p /usr/local/zookeeper/logs

mkdir -p /usr/local/zookeeper/data

clip_image016

3.3 创建ServerID标识

除了修改zoo.cfg配置文件外,zookeeper集群模式下还要配置一个myid文件,这个文件需要放在dataDir目录下。

这个文件里面有一个数据就是A的值(该A就是zoo.cfg文件中server.A=B:C:D中的A),在zoo.cfg文件中配置的dataDir路径中创建myid文件。

在192.168.1.9服务器上创建myid文件,并设置为1,同时与zoo.cfg文件里面的server.1对应,如下:

echo “1” > /usr/local/zookeeper/data/myid

clip_image017

在192.168.1.124服务器上创建myid文件,并设置为2,同时与zoo.cfg文件里面的server.2对应,如下:

echo “2” > /usr/local/zookeeper/data/myid

clip_image018

在192.168.1.231服务器上创建myid文件,并设置为3,同时与zoo.cfg文件里面的server.3对应,如下:

echo “3” > /usr/local/zookeeper/data/myid

clip_image019

四、查看zookeeper集群

经过第三章节配置,在每台服务器上都操作完毕后,我们现在来启动每台服务器上的zookeeper。如下:

cd /usr/local/zookeeper

bin/zkServer.sh start

clip_image020

注意:在启动第一台zookeeper的时候可能会报错,等三台zookeeper全部启动完成之后就不会报错了。

zookeeper启动完毕后,我们来查看各个服务器上zookeeper的状态。如下:

bin/zkServer.sh status

clip_image021

clip_image022

clip_image023

通过上述三幅图,我们可以很明显的看出192.168.1.9和192.168.1.124这两台服务器zookeeper的状态是follow模式,192.168.1.231这台服务器zookeeper的状态是leader模式。

这说明zookeeper集群已经成功搭建。

五、连接zookeeper集群

zookeeper集群搭建完毕后,我们可以通过客户端脚本,连接到zookeeper集群上。

对于客户端来说,zookeeper集群是一个整体,连接到zookeeper集群实际上感觉在独享整个集群的服务,所以,你可以在任何一个结点上建立到服务集群的连接,例如:

bin/zkCli.sh -server 192.168.1.9:2181

clip_image024

clip_image025

通过上图,我们可以很明显的看出在192.168.1.124这台机器上连接192.168.1.9服务器上的zookeeper是正常的,而且当前根路径为/zookeeper。

到此有关zookeeper集群搭建就完全结束。

相关实践学习
基于MSE实现微服务的全链路灰度
通过本场景的实验操作,您将了解并实现在线业务的微服务全链路灰度能力。
相关文章
|
3月前
|
Java Shell Linux
Zookeeper单机&集群安装
Zookeeper单机&集群安装
48 1
|
3月前
|
存储 分布式计算 资源调度
Hadoop【环境搭建 04】【hadoop-2.6.0-cdh5.15.2.tar.gz 基于ZooKeeper搭建高可用集群】(部分图片来源于网络)
【4月更文挑战第1天】Hadoop【环境搭建 04】【hadoop-2.6.0-cdh5.15.2.tar.gz 基于ZooKeeper搭建高可用集群】(部分图片来源于网络)
118 3
|
23天前
|
存储 数据库
zookeeper 集群环境搭建及集群选举及数据同步机制
zookeeper 集群环境搭建及集群选举及数据同步机制
30 2
|
12天前
|
开发工具
部署安装zookeeper集群
部署安装zookeeper集群
|
2月前
|
Java 网络安全
分布式系统详解--框架(Zookeeper-简介和集群搭建)
分布式系统详解--框架(Zookeeper-简介和集群搭建)
118 0
|
3月前
|
存储 Java 网络安全
ZooKeeper【搭建 03】apache-zookeeper-3.6.0 伪集群版(一台服务器实现三个节点的ZooKeeper集群)
【4月更文挑战第10天】ZooKeeper【搭建 03】apache-zookeeper-3.6.0 伪集群版(一台服务器实现三个节点的ZooKeeper集群)
61 1
|
3月前
|
存储 Java 网络安全
ZooKeeper【搭建 02】apache-zookeeper-3.6.0 集群版(准备+安装配置+启动验证)
【4月更文挑战第8天】ZooKeeper【搭建 02】apache-zookeeper-3.6.0 集群版(准备+安装配置+启动验证)
46 1
|
3月前
|
架构师 Shell Apache
Zookeeper集群搭建
Zookeeper集群搭建
|
3月前
|
Java 网络安全 Apache
搭建Zookeeper集群:三台服务器,一场分布式之舞
搭建Zookeeper集群:三台服务器,一场分布式之舞
341 0
|
3月前
|
消息中间件 存储 Kafka
Kafka【环境搭建 02】kafka_2.11-2.4.1 基于 zookeeper 搭建高可用伪集群(一台服务器实现三个节点的 Kafka 集群)
【2月更文挑战第19天】Kafka【环境搭建 02】kafka_2.11-2.4.1 基于 zookeeper 搭建高可用伪集群(一台服务器实现三个节点的 Kafka 集群)
170 1