zookeeper(单机、伪集群、集群)部署

ZooKeeper是一个分布式的、开源的分布式应用程序协调服务,可以在分布 式环境中实现应用配置管理、统一命名服务、状态同步服务等功能。
ZooKeeper是一种为分布式应用所设计的高可用、高性能的开源协调服务,它提供了一项基本服务:分布式锁 服务。由于ZooKeeper开源的特性,在其分布式锁实现的基础上,又被摸索出了其它的功用,譬如:配置维 护、组服务、分布式消息队列等等。 ZooKeeper维护了一个类似文件系统的数据结构,其内部每个子目录都被 称作znode(目录节点),与文件系统一样,我们可以自由的增删改查znode。ZooKeeper集群适合搭建在奇数 台机器上。只要集群中半数以上主机处于存活,那么服务就是可用的。 ZooKeeper在配置文件中并没有指定 master和slave,但是,ZooKeeper在工作时,只有一个节点为leader,其余节点为follower,leader是通过内部 的选举机制临时产生的。

ZooKeeper特点
1、顺序一致性:以zxid来保证事务的顺序性。
2、原子性:以zab保证原子操作,要么成功,要么失败。
3、单一视图:客户获取到的数据始终是一致的。
4、可靠:以版本实现"写入校验",保证了数据写入的正确性。

ZooKeeper有三种安装方式:单机模式 & 伪集群模式 & 集群模式
单机模式:ZooKeeper以单实例的形式运 行在一台服务器上,适合测试环境。
伪集群模式:在一台服务器上跑多个ZooKeeper实例。
集群模式: ZooKeeper运行在多台服务器上,适合生产环境。
所需软件包(提取码:mqtp )

一、开始部署

1、单机安装Zookeeper

#安装JDK环境
[[email protected] ~]# tar zxf jdk-8u211-linux-x64.tar.gz -C /usr/local/
[[email protected] ~]# vim /etc/profile            # 编辑Java变量
..........................
export JAVA_HOME=/usr/local/jdk1.8.0_211
export JRE_HOME=/usr/local/jdk1.8.0_211/jre
export CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
[[email protected] ~]# source /etc/profile           # 执行使配置生效
[[email protected] ~]# java -version                # 查看是否安装成功
java version "1.8.0_211"
Java(TM) SE Runtime Environment (build 1.8.0_211-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.211-b12, mixed mode)
#安装zookeeper
[[email protected] ~]# tar zxf zookeeper-3.4.14.tar.gz -C /usr/local/
[[email protected] ~]# vim /etc/profile
export ZOOKEEPER_HOME=/usr/local/zookeeper-3.4.14
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$ZOOKEEPER_HOME/bin:$PATH                          # 加入Java配置的PATH中
[[email protected] ~]# source /etc/profile
[[email protected] ~]# cd /usr/local/zookeeper-3.4.14/conf/
[[email protected] conf]# cp zoo_sample.cfg zoo.cfg
[[email protected] conf]# mkdir -p /usr/local/zookeeper-3.4.14/data                           # 创建数据目录
[[email protected] conf]# sed -i "s/dataDir=\/tmp\/zookeeper/dataDir=\/usr\/local\/zookeeper-3.4.14\/data/g" zoo.cfg
[[email protected] conf]# zkServer.sh start             # 启动服务
[[email protected] conf]# netstat -anput | grep 2181           # 确定端口在监听
tcp6       0      0 :::2181                 :::*                    LISTEN      4903/java   

1)客户端命令操作

[[email protected] ~]# zkCli.sh                # 后面不加任何参数默认连接localhost本机的2181端口
Connecting to localhost:2181
[zk: localhost:2181(CONNECTED) 0] help         # 显示客户端支持的命令
[zk: localhost:2181(CONNECTED) 1] ls /          # 查看当前zk中所包含的内容
[zookeeper]
[zk: localhost:2181(CONNECTED) 2] ls2 /        # 查看当前zk中的内容及详情
[zookeeper]
cZxid = 0x0
ctime = Thu Jan 01 08:00:00 CST 1970
mZxid = 0x0
mtime = Thu Jan 01 08:00:00 CST 1970
pZxid = 0x0
cversion = -1
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 0
numChildren = 1
[zk: localhost:2181(CONNECTED) 3] create /test1 neirong             # 创建一个节点
Created /test1
[zk: localhost:2181(CONNECTED) 4] ls /          # 可以看到已经多了一个test1
[zookeeper, test1]
[zk: localhost:2181(CONNECTED) 5] get /test1        # huo获取节点信息,需写绝对路径
neirong                            # 节点数据信息
cZxid = 0x2                      # 节点创建时额zxid
ctime = Sat Apr 04 16:15:30 CST 2020               # 节点创建的时间
mZxid = 0x2
mtime = Sat Apr 04 16:15:30 CST 2020                    # 节点最近一次更新的时间
pZxid = 0x2
cversion = 0                   # 子结点数据更新次数
dataVersion = 0                 # 本节点数据更新次数
aclVersion = 0                 # 节点ACL的更新次数
ephemeralOwner = 0x0
dataLength = 7               # 节点数据长度
numChildren = 0                # 子结点的数量
[zk: localhost:2181(CONNECTED) 6] set /test1 "gengxin"         # 更新节点数据
[zk: localhost:2181(CONNECTED) 7] get /test1           # 可以看到已经更改为新的数据
gengxin
[zk: localhost:2181(CONNECTED) 8] history         # 列出zui最近所使用的命令
0 - help
1 - ls /
2 - ls2 /
3 - create /test1 neirong
4 - ls /
5 - get /test1
6 - set /test1 "gengxin"
7 - get /test1
8 - history
[zk: localhost:2181(CONNECTED) 9] delete /test1         # 删除节点,但是无法删除拥有子节点的 节点
[zk: localhost:2181(CONNECTED) 11] rmr /test1           # rmrk可以删除带有子节点的节点

关于zoo.cfg配置参数说明可参考官方文档

2、zookeeper单机伪集群部署
在一台主机上跑多个zk实例,每个zk实例对应一个独立的配置文件;但是每个配置文件的clientPort & dataDir & dataLogDir绝对不能相同,还需要在dataDir中创建myid文件来指定该dataDir对应的zk实例。
环境如下:
这里在一台物理服务器上,部署3个zk实例

1)安装zookeeper

#安装好JDK,可参考之前单机安装
[[email protected] ~]# java -version
java version "1.8.0_211"
Java(TM) SE Runtime Environment (build 1.8.0_211-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.211-b12, mixed mode)
#安装zookeeper
[[email protected] ~]# tar zxf zookeeper-3.4.14.tar.gz -C /usr/local/
[[email protected] ~]# vim /etc/profile
export ZOOKEEPER_HOME=/usr/local/zookeeper-3.4.14
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$ZOOKEEPER_HOME/bin:$PATH
[[email protected] ~]# source /etc/profile
#创建数据目录
[[email protected] ~]# mkdir -p /usr/local/zookeeper-3.4.14/{data_0,data_1,data_2}
#创建myid文件,并填入ID值
[[email protected] ~]# echo 0 > /usr/local/zookeeper-3.4.14/data_0/myid
[[email protected] ~]# echo 1 > /usr/local/zookeeper-3.4.14/data_1/myid
[[email protected] ~]# echo 2 > /usr/local/zookeeper-3.4.14/data_2/myid
#创建事务日志目录,官方建立尽量给事务日志作单独的磁盘或挂载点,这会极大的提高zk性能
[[email protected] ~]# mkdir -p /usr/local/zookeeper-3.4.14/{logs_0,logs_1,logs_2}
#配置server0
[[email protected] ~]# cd /usr/local/zookeeper-3.4.14/conf/
[[email protected] conf]# cp zoo_sample.cfg zoo_0.cfg
[[email protected] conf]# egrep -v "^$|^#" zoo_0.cfg          # 修改配置文件为如下
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/usr/local/zookeeper-3.4.14/data_0/
clientPort=2180
dataLogDir=/usr/local/zookeeper-3.4.14/logs_0/
server.0=127.0.0.1:2287:3387
server.1=127.0.0.1:2288:3388
server.2=127.0.0.1:2289:3389
#配置server1
[[email protected] conf]# cp zoo_0.cfg zoo_1.cfg           # 复制之前的配置文件,修改个别参数
[[email protected] conf]# vim zoo_1.cfg
dataDir=/usr/local/zookeeper-3.4.14/data_1/
clientPort=2181
dataLogDir=/usr/local/zookeeper-3.4.14/logs_1/
#配置server2
[[email protected] conf]# cp zoo_0.cfg zoo_2.cfg
[[email protected] conf]# vim zoo_2.cfg
dataDir=/usr/local/zookeeper-3.4.14/data_2/
clientPort=2182
dataLogDir=/usr/local/zookeeper-3.4.14/logs_2/
[[email protected] conf]# zkServer.sh start zoo_0.cfg             # 我这里是在conf目录下,所以后面直接接着配置文件,如果不在conf下,则需写全路径
#启动各实例
[[email protected] conf]# zkServer.sh start zoo_1.cfg
[[email protected] conf]# zkServer.sh start zoo_2.cfg
[[email protected] conf]# netstat -anput | grep java
tcp6       0      0 :::2180                 :::*                    LISTEN      9251/java
tcp6       0      0 :::2181                 :::*                    LISTEN      9291/java
tcp6       0      0 :::2182                 :::*                    LISTEN      9334/java
#列出JVM
[[email protected] conf]# jps
9377 Jps
9251 QuorumPeerMain
9334 QuorumPeerMain
9291 QuorumPeerMain
#各实例都启动之后就可以使用客户端进行连接了
[[email protected] conf]# zkCli.sh -server 127.0.0.1:2180     # 例

关于多个server的配置说明: 这些server表单服务器的条目。列出组成ZooKeeper服务的服务器。当服务器启动 时,它通过在数据目录中查找文件myid来知道它是哪个服务器。该文件包含服务器号。 最后,注意每个服务器 名后面的两个端口号:“2287”和“3387”。对等点使用前一个端口连接到其他对等点。这样的连接是必要的,以便 对等点可以通信,例如,就更新的顺序达成一致。更具体地说,ZooKeeper服务器使用这个端口将追随者连接 到leader。当一个新的领导者出现时,追随者使用这个端口打开一个TCP连接到领导者。由于默认的领导人选举 也使用TCP,我们目前需要另一个端口的领导人选举。这是服务器条目中的第二个端口。

3、 ZooKeeper多机集群部署
为了获得可靠的zk服务,应该在多台服务器上部署多个zk,只要集群中大多数的zk服务启动了,那么总的zk服 务将是可用的。 在多台主机上搭建ZooKeeper集群的方式,与伪集群几乎是差不多的。
环境如下:

三台服务器上都需要执行如下操作

#安装好JDK
[[email protected] ~]# java -version
java version "1.8.0_211"
Java(TM) SE Runtime Environment (build 1.8.0_211-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.211-b12, mixed mode)
#安装好zookeeper
[[email protected] ~]# tar zxf zookeeper-3.4.14.tar.gz -C /usr/local/
[[email protected] ~]# vim /etc/profile
export ZOOKEEPER_HOME=/usr/local/zookeeper-3.4.14
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$ZOOKEEPER_HOME/bin:$PATH                          # 加入Java配置的PATH中
[[email protected] ~]# source /etc/profile

server0配置

[[email protected] ~]# mkdir -p /usr/local/zookeeper-3.4.14/{data,logs}
[[email protected] ~]# echo 0 > /usr/local/zookeeper-3.4.14/data/myid
[[email protected] ~]# cd /usr/local/zookeeper-3.4.14/conf/
[[email protected] conf]# cp zoo_sample.cfg zoo.cfg
[[email protected] conf]# egrep -v "^$|^#" zoo.cfg          # 修改配置文件为如下
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/usr/local/zookeeper-3.4.14/data/
clientPort=2181
dataLogDir=/usr/local/zookeeper-3.4.14/logs
server.0=192.168.171.134:2288:3388
server.1=192.168.171.135:2288:3388
server.2=192.168.171.140:2288:3388
[[email protected] conf]# zkServer.sh start          # 启动实例
[[email protected] conf]# netstat -anput | grep java     # 确定端口在监听
tcp6       0      0 :::43542                :::*                    LISTEN      40355/java
tcp6       0      0 192.168.171.134:3388    :::*                    LISTEN      40355/java
tcp6       0      0 :::2181                 :::*                    LISTEN      40355/java        

server1配置

[[email protected] ~]# mkdir -p /usr/local/zookeeper-3.4.14/{data,logs}
[[email protected] ~]# echo 1 > /usr/local/zookeeper-3.4.14/data/myid
[[email protected] ~]# cd /usr/local/zookeeper-3.4.14/conf/
[[email protected] conf]# scp [email protected]:/usr/local/zookeeper-3.4.14/conf/zoo.cfg ./
[[email protected] conf]# zkServer.sh start
[[email protected] conf]# netstat -anput | grep java
tcp6       0      0 192.168.171.135:3388    :::*                    LISTEN      40608/java
tcp6       0      0 :::2181                 :::*                    LISTEN      40608/java 

server2配置

[[email protected] ~]# mkdir -p /usr/local/zookeeper-3.4.14/{data,logs}
[[email protected] ~]# echo 2 > /usr/local/zookeeper-3.4.14/data/myid
[[email protected] ~]# cd /usr/local/zookeeper-3.4.14/conf/
[[email protected] conf]# scp [email protected]:/usr/local/zookeeper-3.4.14/conf/zoo.cfg ./
[[email protected] conf]# zkServer.sh start
[[email protected] conf]# netstat -anput | grep java
tcp6       0      0 192.168.171.140:3388    :::*                    LISTEN      12769/java
tcp6       0      0 :::2181                 :::*                    LISTEN      12769/java   

查看各zk节点的状态

[[email protected] /]# zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper-3.4.14/bin/../conf/zoo.cfg
Mode: follower
[[email protected] /]# zkServer.sh status           # 02服务器为leader
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper-3.4.14/bin/../conf/zoo.cfg
Mode: leader
[[email protected] /]# zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper-3.4.14/bin/../conf/zoo.cfg
Mode: follower

原文地址:https://blog.51cto.com/14227204/2484928

时间: 2024-09-29 08:38:45

zookeeper(单机、伪集群、集群)部署的相关文章

备忘zookeeper(单机+伪集群+集群)

#下载: #单机模式 解压到合适目录. 进入zookeeper目录下的conf子目录, 复制zoo_sample.cfg-->zoo.cfg(如果没有data和logs就新建):tickTime=2000 dataDir=/Users/apple/zookeeper/data dataLogDir=/Users/apple/zookeeper/logs clientPort=2180 参数说明:tickTime: zookeeper中使用的基本时间单位, 毫秒值.dataDir: 数据目录. 可

ZooKeeper单机伪集群搭建与启动

下载解压 [[email protected] ~]$ tar -zvxf zookeeper-3.4.9.tar.gz 本机ip地址映射 [[email protected] /]$ su - rootPassword: Last login: Sat Aug 4 18:59:38 EDT 2018 on :0 [[email protected] ~]# cd /etc [[email protected] etc]# vim hosts 将本机ip映射为一个主机名,在zoo.cfg中可用这

Solrcloud单机伪集群部署

线上有一套双节点的Solrcloud节点,因机器性能较老,环境搭建于2013年,原节点有数百个已经被unload的collections,考虑以后可能还会需要,所以搭建一套和原节点相同的solrcloud环境,因为目前只有一台新机器,所以在一台机器上搭建Solrcloud伪双节点集群, 软件版本 JDK:jdk1.6.0_12 Tomcat:apache-tomcat-6.0.20 Zookeeper:zookeeper-3.4.5 Solr:solr-4.2.1 原节点环境信息 主机名(IP)

ZooKeeper的伪分布式集群搭建以及真分布式集群搭建

zk集群的一些基本概念 zookeeper集群搭建: zk集群,主从节点,心跳机制(选举模式) 配置数据文件 myid 1/2/3 对应 server.1/2/3 通过 zkCli.sh -server [ip]:[port] 命令检测集群是否配置成功 和其他大多数集群结构一样,zookeeper集群也是主从结构.搭建集群时,机器数量最低也是三台,因为小于三台就无法进行选举.选举就是当集群中的master节点挂掉之后,剩余的两台机器会进行选举,在这两台机器中选举出一台来做master节点.而当原

ZooKeeper的伪分布式集群搭建

ZooKeeper集群的一些基本概念 zookeeper集群搭建: zk集群,主从节点,心跳机制(选举模式) 配置数据文件 myid 1/2/3 对应 server.1/2/3 通过 zkCli.sh -server [ip]:[port] 命令检测集群是否配置成功 和其他大多数集群结构一样,zookeeper集群也是主从结构.搭建集群时,机器数量最低也是三台,因为小于三台就无法进行选举.选举就是当集群中的master节点挂掉之后,剩余的两台机器会进行选举,在这两台机器中选举出一台来做maste

redis cluster单机伪分布式搭建--- 3主3从3哨兵集群

redis cluster单机伪分布式搭建--- 3主3从3哨兵集群 最近公司引进微服务框架,之前的一台redis的预存60G已经无法满足现在的260G业务需要,经过一番考虑搭建了这套集群 . 为了方便我就用一台服务器演示,生产环境中不建议这么做(没啥用),只为记录一下过程,至于精细化的配置需要在生产中自行研究 演示环境 [[email protected] ~]# cat /etc/redhat-release CentOS Linux release 7.4.1708 (Core) redi

单机模拟分片为复制集的集群部署

概述 可使用单个数据服务器作为分片,也可使用复制集作为分片. 复制集为具有自动故障恢复功能的主从集群,并且其主从角色可自动变更. 每个复制集包括3种角色:主服务器.从服务器.仲裁服务器 部署图 部署过程 Shard1(为1个复制集) Shard2(为1个复制集) ConfigServer ConfigA ConfigB RouteServer 先启动 再配置 单机模拟分片为复制集的集群部署

Spark 系列(七)—— 基于 ZooKeeper 搭建 Spark 高可用集群

一.集群规划 这里搭建一个 3 节点的 Spark 集群,其中三台主机上均部署 Worker 服务.同时为了保证高可用,除了在 hadoop001 上部署主 Master 服务外,还在 hadoop002 和 hadoop003 上分别部署备用的 Master 服务,Master 服务由 Zookeeper 集群进行协调管理,如果主 Master 不可用,则备用 Master 会成为新的主 Master. 二.前置条件 搭建 Spark 集群前,需要保证 JDK 环境.Zookeeper 集群和

Apache Hadoop集群离线安装部署(三)——Hbase安装

Apache Hadoop集群离线安装部署(一)--Hadoop(HDFS.YARN.MR)安装:http://www.cnblogs.com/pojishou/p/6366542.html Apache Hadoop集群离线安装部署(二)--Spark-2.1.0 on Yarn安装:http://www.cnblogs.com/pojishou/p/6366570.html Apache Hadoop集群离线安装部署(三)--Hbase安装:http://www.cnblogs.com/po

Elasticstack 5.1.2 集群日志系统部署及实践

Elasticstack 5.1.2 集群日志系统部署及实践 一.ELK Stack简介 ELK Stack 是Elasticsearch.Logstash.Kibana三个开源软件的组合,在实时数据检索和分析场合,三者通常是配合共用的. 可参考:https://www.elastic.co/products 二.Elasticstack重要组件 Elasticsearch: 准实时索引 Logtash: 收集数据,配置使用 Ruby DSL Kibana 展示数据,查询聚合,生成报表 Kafk