zookeeper集群搭建

zookeeper(动物园管理员)是一个广泛应用于分布式服务提供协调服务Apache的开源框架

Zookeeper从设计模式角度来理解:是一个基于观察者模式设计的分布式服务管理框架,它 负责存储和管理大家都关心的数据 ,然 后 接受观察者的注册 ,一旦这些数据的状态发生变化, Zookeeper 就将 负责通知已经在 Zookeeper上注册的那些观察者 做出相应的反应。

zookeeper集群特点

  • zookeeper集群由一个领导者(Leader)和多个跟随者(Follower)组成。

  • 集群中只要有半数以上节点存活,Zookeeper集群就能正常服务。所 以Zookeeper适合安装奇数台服务器。

  • 全局数据一致:每个Server保存一份相同的数据副本,Client无论连接到哪个Server,数据都是一致的。

  • 更新请求顺序执行,来自同一个Client的更新请求按其发送顺序依次执行。

  • 数据更新原子性,一次数据更新要么成功,要么失败。

  • 实时性,在一定时间范围内,Client能读到最新数据。

本地模式安装

zookeeper由Java开发所有要运行zookeeper需要现安装jdk

安装jdk

可以下载免安装版jdk,解压后配置一下环境变量即可

linux下的环境变量配置文件在

复制代码
/etc/profile

然后在该文件下增加如下配置即可

export JAVA_HOME=/usr/java/jdk-21/jdk-21.0.1 // 我自己的jdk目录

export JRE_HOME=${JAVA_HOME}/jre

export CLASSPATH=.:{JAVA_HOME}/lib:{JRE_HOME}/lib

export PATH={JAVA_HOME}/bin:PATH

然后从新加载配置文件,命令为

复制代码
source /etc/profile 

查看Java版本

则表示已成功安装Jdk

安装zookeeper

进入zookeeper官网,找到下载页面,下载-bin.tar.gz版即可,如果没有想要的版本则可以在下载页面的存档连接中找到

Apache ZooKeeper


1、拷贝 apache-zookeeper-3.5.7-bin.tar.gz 安装包到 Linux 系统下
2、解压到指定目录

bash 复制代码
 tar -zxvf apache-zookeeper-3.5.7- bin.tar.gz -C /mydata/zookeeper

3、修改名称

bash 复制代码
mv apache-zookeeper-3.5.7 -bin/ zookeeper-3.5.7

配置修改

1、将/mydata/zookeeper/zookeeper-3.5.7/conf这个路径下的 zoo_sample.cfg 修改为 zoo.cfg;

bash 复制代码
mv zoo_sample.cfg zoo.cfg

2、打开 zoo.cfg 文件,修改 dataDir 配置的路径 修改为如下内容(默认的tmp路径是临时路径,一段时间后,linux会自动删除里面的文件,所有不适合正式环境使用)

dataDir=/mydata/zookeeper/zookeeper-3.5.7/data

3、在/mydata/zookeeper/zookeeper-3.5.7/这个目录上创建 data文件夹
mkdir data

操作zookeeper

1、启动 Zookeeper
在bin目录下使用 ./zkServer.sh start 启动zookeeper
2、 查看进程是否启动

3、查看状态

4、启动客户端

./zkCli.sh

5、退出客户端:

zk: localhost:2181(CONNECTED) 0\] quit 6、停止 Zookeeper .bin/zkServer.sh stop ### **配置参数解读** Zookeeper中的配置文件zoo.cfg中参数含义解读如下: **1****)****tickTime = 2000****:通信心跳时间,****Zookeeper****服务器与客户端心跳时间,单位毫秒** ![](https://file.jishuzhan.net/article/1719871019939794945/0448ceb8acf53341be57d080562da558.webp) **2** **)** **initLimit = 10** **:** **LF** **初始通信时限** ![](https://file.jishuzhan.net/article/1719871019939794945/3d4737bfd54c8027655f9b1a939287fa.webp) Leader和Follower初始连接时能容忍的最多心跳数(tickTime的数量) **3****)****syncLimit = 5****:****LF****同步通信时限** Leader和Follower之间通信时间如果超过syncLimit \* tickTime,Leader认为Follwer死掉,从服务器列表中删除Follwer。 **4****)****dataDir****:**保存Zookeeper中的数据 注意:默认的tmp目录,容易被Linux系统定期删除,所以一般不用默认的tmp目录。 **5** **)** **clientPort = 2181** **:客户端连接端口,通常不做修改。** ### zookeeper集群搭建 #### **1****)集群规划** 首先准备三台linux虚拟机 可以安装一台然后使用vmware提供的克隆功能实现克隆,克隆之前需要先关闭虚拟机。 ![](https://file.jishuzhan.net/article/1719871019939794945/6a5dfa27e74fdc992a6fdc4eb102e436.webp) 克隆完成后 **修改克隆机** **IP** **,**以下以 hadoop100(hadoop100为我自己设置的主机名称) 举例说明 ##### (1)修改克隆虚拟机的静态 IP 改成 > TYPE="Ethernet" > PROXY_METHOD="none" > BROWSER_ONLY="no" > BOOTPROTO="static" > DEFROUTE="yes" > IPV4_FAILURE_FATAL="no" > IPV6INIT="yes" > IPV6_AUTOCONF="yes" > IPV6_DEFROUTE="yes" > IPV6_FAILURE_FATAL="no" > IPV6_ADDR_GEN_MODE="stable-privacy" > NAME="ens33" > UUID="d7919ed1-15af-49fe-9b4e-aad1456eed3d" > DEVICE="ens33" > ONBOOT="yes" > > IPADDR=192.168.127.100 > # wangGuan > GATEWAY=192.168.127.2 > # DNS > DNS1=192.168.127.2 > ##### (2)查看 Linux 虚拟机的虚拟网络编辑器,编辑-\>虚拟网络编辑器-\>VMnet8 ![](https://file.jishuzhan.net/article/1719871019939794945/7dacbe1093cd723b6a770e64f55b530c.webp) ![](https://file.jishuzhan.net/article/1719871019939794945/3449b5fe196fedec7c430816a18eec02.webp) ##### (3)查看 Windows 系统适配器 VMware Network Adapter VMnet8 的 IP 地址 ![](https://file.jishuzhan.net/article/1719871019939794945/f6d758cedacc90bd2dc12343560fd965.webp) ##### (4)保证 Linux 系统 ifcfg-ens33 文件中 IP 地址、虚拟网络编辑器地址和 Windows 系统 VM8 网络 IP 地址在同一网段。 #### **2****)修改克隆机主机名,以下以****hadoop100****举例说明** ##### (1)修改主机名称 > vim /etc/hostname > hadoop102 ##### (2)配置 Linux 克隆机主机名称映射 hosts 文件,打开/etc/host \[root@hadoop100 \~\]# vim /etc/hosts 添加如下内容 > 192.168.127.100 hadoop100 > > 192.168.127.101 hadoop101 > > 192.168.127.102 hadoop102 > > 192.168.127.103 hadoop103 > > 192.168.127.104 hadoop104 > > 192.168.127.105 hadoop105 > > 192.168.127.106 hadoop106 > > 192.168.127.107 hadoop107 > > 192.168.127.108 hadoop108 > > 192.168.127.132 qingmangmall ##### **3)重启克隆机****hadoop100** > \[root@hadoop100 \~\]# reboot ##### **4)修改****windows****的主机映射文件(****hosts****文件)** * (a)进入 C:\\Windows\\System32\\drivers\\etc 路径 * (b)打开 hosts 文件并添加如下内容,然后保存 > 192.168.127.100 hadoop100 > 192.168.127.101 hadoop101 > 192.168.127.102 hadoop102 > 192.168.127.103 hadoop103 > 192.168.127.104 hadoop104 > 192.168.127.105 hadoop105 > 192.168.127.106 hadoop106 > 192.168.127.107 hadoop107 > 192.168.127.108 hadoop108 192.168.127.132 qingmangmall 至此克隆的虚拟机就可以使用了 如果之前已有三台虚拟机使用,如何快速将其中的某一个文件快速共享给其他机器呢? #### 3)集群分发 ##### 将zookeeper分发给其他服务 前提:在 hadoop102 、 hadoop103 、 hadoop104 都已经创建好的/mydata目录 并且已经把这两个目录修改为 user:user(想要操作该目录的用户) \[user@hadoop102 \~\]$ sudo chown user:user -R /mydata 在 hadoop102 上,将 hadoop102 中 /mydata/zookeeper 目录拷贝到 hadoop103 上。 \[user@ hadoop102 \~\]$ scp -r /mydata/zookeeper user@hadoop103:/mydata 其他服务器以此类推 至此三台服务器就都有了zookeeper服务 想要启用zookeeper集群需要在 /mydata/zookeeper/zookeeper-3.5.7/data 目录下创建 一个 myid 的文件。 在文件中添加与 server 对应的编号(注意:上下不要有空行,左右不要有空格),这里我使用了linux机器IP的最后三位当作id号 100 注意:添加 myid 文件,一定要在 Linux 里面创建,在 notepad++ 里面很可能乱码 ( 3 )拷贝配置好的 zookeeper 到其他机器上 > scp -r /mydata/zookeeper/zookeeper-3.5.7/data user@hadoop103:/mydata/zookeeper/zookeeper-3.5.7 ##### **配置****zoo.cfg****文件** ( 1 )重命名 /opt/module/zookeeper-3.5.7/conf 这个目录下的 zoo_sample.cfg 为 zoo.cfg \[user@hadoop102 conf\]$ mv zoo_sample.cfg zoo.cfg ( 2 )打开 zoo.cfg 文件 \[user@hadoop102 conf\]$ vim zoo.cfg # 修改数据存储路径配置 dataDir=/opt/module/zookeeper-3.5.7/zkData # 增加如下配置 > #######################cluster########################## > server.100=hadoop100:2888:3888 > server.103=hadoop103:2888:3888 server.132=qingmangmall:2888:3888 ( 3 )配置参数解读 server.A=B:C:D 。 **A** 是一个数字,表示这个是第几号服务器; 集群模式下配置一个文件 myid ,这个文件在 dataDir 目录下,这个文件里面有一个数据 就是 A 的值, Zookeeper 启动时读取此文件,拿到里面的数据与 zoo.cfg 里面的配置信息比 较从而判断到底是哪个 server 。 **B** 是这个服务器的地址; **C** 是这个服务器 Follower 与集群中的 Leader 服务器交换信息的端口; **D** 是万一集群中的 Leader 服务器挂了,需要一个端口来重新进行选举,选出一个新的 Leader ,而这个端口就是用来执行选举时服务器相互通信的端口。 ( 4 )同步 zoo.cfg 配置文件 ##### **集群操作** ( 1 )分别启动 Zookeeper > \[user@hadoop100 zookeeper-3.5.7\]$ bin/zkServer.sh start > \[user@hadoop103 zookeeper-3.5.7\]$ bin/zkServer.sh start \[user@qingmangmall zookeeper-3.5.7\]$ bin/zkServer.sh start ( 2 )查看状态 > \[user@hadoop100 zookeeper-3.5.7\]# bin/zkServer.sh status > JMX enabled by default > Using config: /opt/module/zookeeper-3.5.7/bin/../conf/zoo.cfg > Mode: follower > \[user@hadoop103 zookeeper-3.5.7\]# bin/zkServer.sh status > JMX enabled by default > Using config: /opt/module/zookeeper-3.5.7/bin/../conf/zoo.cfg > Mode: leader > \[user@qingmangmall zookeeper-3.5.7\]# bin/zkServer.sh status > JMX enabled by default > Using config: /opt/module/zookeeper-3.5.7/bin/../conf/zoo.cfg Mode: follower ### 附录 #### 1)创建用户 并设置文件所属组 可以使用如下操作创建用户 > \[root@hadoop100 \~\]# useradd user \[root@hadoop100 \~\]# passwd user 配置 user用户具有 root 权限,方便后期加 sudo 执行 root 权限的命令 \[root@hadoop100 \~\]# vim /etc/sudoers 修改 /etc/sudoers 文件,在 %wheel 这行 下面添加一行,如下所示: > ## Allow root to run any commands anywhere > root ALL=(ALL) ALL > ## Allows people in group wheel to run all commands > % wheel ALL=(ALL) ALL user ALL=(ALL) NOPASSWD:ALL 注意: user 这一行不要直接放到 root 行下面,因为所有用户都属于 wheel 组,你先 配置了 user 具有免密功能,但是程序执行到%wheel 行时,该功能又被覆盖回需要 密码。所以 user 要放到%wheel 这行下面。 **在根目录** **下创建文件夹,并修改所属主和所属组** mkdir /mydata 修改 mydata文件夹的所有者和所属组均为 user 用户 \[root@hadoop100 \~\]# chown user:user /mydata 查看 /mydata文件夹的所有者和所属组,可以发现所属主已改为自己设置的用户了 ![](https://file.jishuzhan.net/article/1719871019939794945/5b32455c3ccba9bdb6ea8fb9d5c640f7.webp) #### **2****)****scp****(****secure copy****)安全****拷贝** ( 1 ) scp 定义 scp 可以实现服务器与服务器之间的数据拷贝。( from server1 to server2 ) ( 2 )基本语法 scp -r $pdir/$fname $user@$host:$pdir/$fname 命令 递归 要拷贝的文件路径/ 名称 目的地用户 @ 主机 : 目的地路径 / 名称 #### **3****)****rsync****远程****同步****工具** rsync 主要用于备份和镜像。具有速度快、避免复制相同内容和支持符号链接的优点。 rsync 和 scp 区别: 用 rsync 做文件的复制要比 scp 的速度快, rsync 只对差异文件做更 新。 scp 是把所有文件都复制过去。 ( 1 )基本语法 rsync -av $pdir/$fname $user@$host:$pdir/$fname 命令 选项参数 要拷贝的文件路径 / 名称 目的地用户 @ 主机 : 目的地路径 / 名称 选项参数说明 选项 功能 -a 归档拷贝 -v 显示复制过程

相关推荐
smileNicky24 分钟前
RabbitMQ架构原理及消息分发机制
分布式·架构·rabbitmq
noravinsc25 分钟前
windows上rabbitmq服务激活后 15672无法打开
windows·分布式·rabbitmq
程序员果子1 小时前
Kubernetes 节点摘除指南
云原生·容器·kubernetes
QX_hao2 小时前
【spark3.2.4】--完全分布式集群搭建
分布式
SoFlu软件机器人4 小时前
电商系统开发:基于飞算JavaAI的分布式事务解决方案自动化实践
运维·分布式·自动化
星辰瑞云4 小时前
Spark-SQL核心编程3
大数据·分布式·spark
liyongjun63164 小时前
Zookeeper 命令返回数据的含义
linux·服务器·zookeeper
Pasregret4 小时前
07-云原生安全深度剖析:从 Kubernetes 集群防护到微服务安全加固
安全·云原生·kubernetes
DemonAvenger4 小时前
Go并发编程进阶:基于Channel的并发控制模式实战指南
分布式·架构·go