软件篇-kafka(四)-集群-zookeeper集群

Zookeeper

1.简介

zookeeper是 一个分布式的协调者,从名字可以看出来,zookeeper是动物管理员的意思。

从其官网的介绍可以知道 它是一个用于维护,命名,提供分布式同步和提供服务的一个集中式组件。

很多组件在做分布式时,例如:kafka,都会面临一些问题:

  • 当组件搭建集群时,无法通过自己去抉择出主和从

    一旦主节点挂掉,那么无法自动选择其节点成为主节点,从而导致整个集群挂掉。

  • 集群元数据信息无法存储

基于上述原因出现了zookeeper,因此要搞懂分布式还是要先搞懂zookeeper组件

注意:有一些组件在集群时不需要依赖于zookeeper,因为组件本身就具备了集群机制

例如:ElasticSearch

注意:zookeeper不仅仅可以是协调者,还可以充当dubbo或者springcloud的注册中心

2.安装(普通)

2.1 准备

先准备三台虚拟机来搭建zookeeper集群,这里我选择的操作系统为centos,同时三台机器IP如下:

  • 192.168.80.130
  • 192.168.80.131
  • 192.168.80.132

zookeeper之前需要先在三台机器安装java,这里就不细说了

同时在三台机器上创建kafka用户,方便后期进行管理。当然不安装也可以,把所有的软件安装在同一个用户下也是可以的

个人建议还是创建用户,不同的软件安装不同的用户下,方便管理

创建组和用户命令如下

groupadd kafka
useradd -g kafka -s /bin/bash -d /home/kafka  -m kafka

创建目录用来存放zookeeper存放

mkdir -p /var/data/zookeeper

修改文件该目录的组和拥有者

chown -R kafka:kafka /var/data/zookeeper

注意:三台机器都要操作

2.2 下载

zookeeper官网下载安装包,目前我下载的是3.7.0版本

image-20210505220037946

2.3 开始

2.3.1 解压

有了上面的准备之后,接下来就可以正式安装zookeeper了,先将在三台机器上分别解压下载好的安装包,命令如下:

tar -zxvf /home/apache-zookeeper-3.7.0-bin/zookeeper.tar.gz -C /opt

mv /opt/apache-zookeeper-3.7.0-bin /opt/zookeeper

修改安装目录的拥有者和组

chown -R kafka:kafka /opt/zookeeper

注意:三台机器都要操作且同时机器安装好java环境

2.3.2 安装

进入到zookeeperconf目录下,将zoo_sample.cfg文件复制为zoo.cfg

cd /opt/zookeeper/conf
cp zoo_sample.cfg zoo.cfg

修改zoo.cfg文件,具体修改内容如下:

#客户端与服务器之间维持心跳的间隔,每隔2000毫秒就会客户端就会像服务器发送一个心跳
tickTime=2000

# 允许从节点连接并同步到主节点的初始化连接时间
# 这个值是tickTime的倍数,所以initlimit是10* 2OOOms,也就是20s
initLimit=10

# 表示允许从节点与主节点处于不同步状态的时间上限,如果从节点在于主节点在这个时间内,没有完成同步,那么这个从节点就会被舍弃
# 这个值也是tickTime的倍数,所以syncLimit是 5 * 2000ms 也就是10s
syncLimit=5

# 存储内存中数据快照的位置
dataDir=/var/data/zookeeper

# 客户的端连接的端口
clientPort=2181

# 服务器编号  
# 2888 zookeeper之间通信端口
# 3888 选择leader端口
# ip为zookeeper服务器ip
server.0=192.168.80.130:2888:3888
server.1=192.168.80.131:2888:3888
server.2=192.168.80.132:2888:3888

注意:三台机器都要改

在上述指定的目录中/var/data/zookeeper,创建myid文件,并且文件的内容与上述的内容一致。

例如,在192.168.80.131机器上创建myid文件,而131这台机器对应的server配置是server.1

image-20210511210257129

因此myid文件的内容就为1,同理,其他的机器也要配置成对应的内容

image-20210511210353180

2.3.3 环境

上述步骤完成后,就可以去启动zookeeper

注意 启动时需要关闭防火墙 或者把 2181端口加入到防火墙

# 关闭防火墙
systemctl stop firewalld

# 加入端口
firewall-cmd --add-port 2181/tcp --permanent
firewall-cmd --add-port 2888/tcp --permanent
firewall-cmd --add-port 3888/tcp --permanent
firewall-cmd --reload

启动zookeeper

/opt/zookeeper/bin/zkServer.sh start

发现以后每次去启动,都要到指定目录下去通过zkServer.sh启动,为了方便的启动zookeeper,可以配置环境变量,命令如下

vi /etc/profie

在文件末尾追加内容如下:

export ZK_HOME=/opt/zookeeper
export PATH=$PATH:$ZK_HOME/bin             
image-20210511205357702

输入以下指令让配置文件生效

 source /etc/profile

注意:三台机器都要改

2.3.4 启动

输入以下指令:

  • 启动zookeeper

    zkServer.sh start
    
  • 停止zookeeper

    zkServer.sh stop
    
  • 查看集群状态

    zkServer.sh status
    

例如查看集群状态:

image-20210505231000906

这样一个zookeeper集群搭建完毕

2.4 服务

虽然上述步骤中,通过配置变量让启动zookeeper启动更加优雅,但是还是有点不太方便

更好是把启动交给systemd去管理,因此就需要把zookeeper做成一个服务,操作如下:


2.4.1 配置

/etc/systemd/system目录下创建一个zookeeper.service文件,其内容如下:

[Unit]
# 服务描述
Description=zookeeper.service
#
# 在网络服务启动后运行
After=network.target
#
[Service]
# 指定以什么用户去启动
User=kafka
# 指定用户组
Group=kafka
# Type 必须为 forking 否则无法启动,
Type=forking

# 指定要依赖的环境
Environment=JAVA_HOME=/opt/jdk
#
# 启动命令
ExecStart=/opt/zookeeper/bin/zkServer.sh start
#
# 停止命令
ExecStop=/opt/zookeeper/bin/zkServer.sh stop
#
# 重启命令
ExecReload=/opt/zookeeper/bin/zkServer.sh restart

# 启动失败后重启
Restart=on-failure
# 每次尝试重启间隔60秒
StartLimitInterval=60
# 最终尝试重启3000次
StartLimitBurst=3000

#
[Install]
WantedBy=multi-user.target

注意:三台机器都要配置,同时需要修改文件权限

chmod o+x,u+x,g+x /etc/systemd/system/zookeeper.service

由于之前的操作是在root用户下操作,所以之前启动zookeeperZK_HOME下产生了logs目录

image-20210511211009454

而现在systemd是以kafka用户去启动,而这个用户是没有权限去访问logs目录,因此需要修改

chown -R kafka:kafka /opt/zookeeper

三台机器都要操作

2.4.2 操作

让配置生效

systemctl daemon-reload

启动zookeeper

systemctl start zookeeper

查看zookeeper运行状态

systemctl status zookeeper

关闭zookeeper

systemctl stop zookeeper

重启zookeeper

systemctl restart zookeeper

开机自启动

systemctl enable zookeeper

3.安装(docker)

3.1 镜像

docker pull zookeeper

注意三台机器均要拉去zookeeper镜像

3.2 容器

在三台机器中分别创建zookeeper容器,命令如下:

192.168.80.132上执行以下命令

docker run -di --name=zookeeper --net=host \
-v /opt/zookeeper/logs:/opt/zookeeper/logs \
-v /opt/zookeeper/data:/data \
-v /opt/zookeeper/datalog:/datalog \
-e "ZOO_MY_ID=1" \
-e "ZOO_SERVERS=server.1=0.0.0.0:2888:3888;2181 server.2=192.168.80.131:2888:3888;2181 server.3=192.168.80.132:2888:3888;2181" --restart=always zookeeper

192.168.80.133上执行以下命令

docker run -di --name=zookeeper --net=host \
-v /opt/zookeeper/logs:/opt/zookeeper/logs \
-v /opt/zookeeper/data:/data \
-v /opt/zookeeper/datalog:/datalog \
-e "ZOO_MY_ID=2" \
-e "ZOO_SERVERS=server.1=192.168.80.130:2888:3888;2181 server.2=0.0.0.0:2888:3888;2181 server.3=192.168.80.132:2888:3888;2181" --restart=always zookeeper

192.168.80.134上执行以下命令

docker run -di --name=zookeeper --net=host \
-v /opt/zookeeper/logs:/opt/zookeeper/logs \
-v /opt/zookeeper/data:/data \
-v /opt/zookeeper/datalog:/datalog \
-e "ZOO_MY_ID=3" \
-e "ZOO_SERVERS=server.1=192.168.80.130:2888:3888;2181 server.2=192.168.80.131:2888:3888;2181 server.3=0.0.0.0:2888:3888;2181" --restart=always zookeeper

自此zookeeper集群搭建成功。

当然我个人不推荐直接上手docker搭建,原生搭建方式虽然复杂一点,但是掌握了这种方式,再用docker就更加熟悉其原理了

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,692评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,482评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,995评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,223评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,245评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,208评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,091评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,929评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,346评论 1 311
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,570评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,739评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,437评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,037评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,677评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,833评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,760评论 2 369
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,647评论 2 354

推荐阅读更多精彩内容