【Zookeeper】01 概述 & 基础部署
背景:
随着互联网技术的发展,企业对计算机系统的计算,存储能力要求越来越高,各大IT企业都在追求高并发,海量存储的极致,
在这样的背景下,单纯依靠少量高性能单机来完成计算机,云计算的任务已经无法满足需求,企业的IT架构逐渐由集中式往分布式过渡。
所谓的分布式是指:把一个计算任务分解成若干个计算单元,并分派到不同的计算机中去执行,最终汇总计算结果的过程。
什么是Zookeeper?
Zookeeper是源代码开放的分布式协调服务,是一个高性能的分布式数据一致性的解决方案,
它将那些复杂的,容易出错的分布式一致性服务封装起来。
用户可以通过调用Zookeeper提供的接口来解决一些分布式应用中的实际问题。
应用场景
(1)数据发布/订阅
数据的发布与订阅,顾名思义就是一方把数据发布出来,另一方通过某种手段获取。
通常数据发布与订阅有两种模式:推模式和拉模式,
推模式一般是服务器主动往客户端推送信息,
拉模式是客户端主动去服务端请求目标数据(通常采用定时轮询的方式)
Zookeeper采用两种方式互相结合:发布者将数据发布到Zookeeper集群节点上,
订阅者通过一定的方法告诉Zookeeper服务器,自己对哪个节点的数据感兴趣,
那么在服务端数据发生变化时,就会通知客户端去获取这些信息。
(2)负载均衡
首先在服务端启动的时候,把自己在zookeeper服务器上注册成一个临时节点。
zookeeper拥有两种形式的节点,一种是临时节点,一种是永久节点。
这两种节点后面的会有较为详细的介绍。
注册成临时节点后,再服务端出问题时,节点会自动的从zookeeper上删除,如此zookeeper服务器上的列表就是最新的可用的列表。
客户端在需要访问服务器的时候首先会去Zookeeper获得所有可用的服务端的连接信息。
客户端通过一定的策略(如随机)选择一个与之建立连接。
当客户端发现连接不可用时,会再次从zookeeper上获取可用的服务端连接,并同时删除之前获取的连接列表。
(3)命名服务
提供名称的服务。如一般使用较多的有两种id,一种是数据库自增长id,一种是UUID,
两种id都有局限,自增长id仅适合在单表单库中使用,uuid适合在分布式系统中使用但由于id没有规律难以理解。
而ZK提供了一定的接口可以用来获取一个顺序增长的,可以在集群环境下使用的id。
(4)分布式协调,通知,心跳服务
在分布式服务系统中,我们常常需要知道哪个服务是可用的,哪个服务是不可用的,
传统的方式是通过ping主机来实现的,ping得200的结果说明说明该服务是OK的。
而在使用 zookeeper时,可以将所有的服务都注册成一个临时节点,我们判断一个服务是否可用,
只需要判断这个节点是否在zookeeper集群中存在就可以了,不需要直接去连接和ping服务所在主机,减少系统的复杂度和对服务主机的压力。
优势
(1)源代码开放
(2)高性能,易用稳定,该优势已在众多分布式系统中得到验证
(3)有着广泛的应用,并且与众多大数据相关技术能实现良好的融合开发。
下载 & 安装:
https://apache.org/dist/zookeeper/stable
http://mirror.bit.edu.cn/apache/zookeeper/stable/
Linux操作系统环境下最佳。但是注意,需要Java运行环境的支持
[root@VM-0-7-centos bin]# java -version
openjdk version "1.8.0_252"
OpenJDK Runtime Environment (build 1.8.0_252-b09)
OpenJDK 64-Bit Server VM (build 25.252-b09, mixed mode)
解压Zookeeper压缩包
tar -zxvf apache-zookeeper-3.5.8-bin.tar.gz
赋值解药的包目录到usr | local | 下面,重命名zookeeper
cp -r apache-zookeeper-3.5.8-bin /usr/local/zookeeper
zookeeper的目录结构:
[root@VM-0-7-centos zookeeper]# ll
total 40
drwxr-xr-x 2 root root 4096 Aug 6 20:26 bin
drwxr-xr-x 2 root root 4096 Aug 6 20:26 conf
drwxr-xr-x 5 root root 4096 Aug 6 20:26 docs
drwxr-xr-x 2 root root 4096 Aug 6 20:26 lib
-rw-r--r-- 1 root root 11358 Aug 6 20:26 LICENSE.txt
-rw-r--r-- 1 root root 432 Aug 6 20:26 NOTICE.txt
-rw-r--r-- 1 root root 1560 Aug 6 20:26 README.md
-rw-r--r-- 1 root root 1347 Aug 6 20:26 README_packaging.txt
我们需要对zookeeper进行一定的配置才能启动使用。
查看conf配置目录:
[root@VM-0-7-centos zookeeper]# ll conf
total 12
-rw-r--r-- 1 root root 535 Aug 6 20:26 configuration.xsl
-rw-r--r-- 1 root root 2712 Aug 6 20:26 log4j.properties
-rw-r--r-- 1 root root 922 Aug 6 20:26 zoo_sample.cfg
我们备份这个样板配置文件,复制一份并且更改配置:
cp -r zoo_sample.cfg zoo.cfg
我觉得默认的配置挺好的,算了就不改动了
# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=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 connect
clientPort=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=1
zookeeper的运行程序在bin目录下:
[root@VM-0-7-centos bin]# ll
total 56
-rwxr-xr-x 1 root root 232 Aug 6 20:26 README.txt
-rwxr-xr-x 1 root root 2067 Aug 6 20:26 zkCleanup.sh
-rwxr-xr-x 1 root root 1158 Aug 6 20:26 zkCli.cmd
-rwxr-xr-x 1 root root 1621 Aug 6 20:26 zkCli.sh
-rwxr-xr-x 1 root root 1766 Aug 6 20:26 zkEnv.cmd
-rwxr-xr-x 1 root root 3690 Aug 6 20:26 zkEnv.sh
-rwxr-xr-x 1 root root 1286 Aug 6 20:26 zkServer.cmd
-rwxr-xr-x 1 root root 4573 Aug 6 20:26 zkServer-initialize.sh
-rwxr-xr-x 1 root root 9386 Aug 6 20:26 zkServer.sh
-rwxr-xr-x 1 root root 996 Aug 6 20:26 zkTxnLogToolkit.cmd
-rwxr-xr-x 1 root root 1385 Aug 6 20:26 zkTxnLogToolkit.sh
一些Zookeeper程序的介绍:
zkCleanup.sh
清理zookeeper历史数据,包括事务日志和快照 zkCli.sh
zookeeper的简单客户端 zkEnv.sh
zookeeper的环境设置 zkServer.sh
zookeeper的服务器启动,停止和重启
启动zookeeper
./zkServer.sh start
显示:
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
关闭zookeeper:
./zkServer.sh stop
显示:
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Stopping zookeeper ... ./zkServer.sh: line 213: kill: (19512) - No such process
STOPPED
查看zookeeper运行状态:
./zkServer.sh status
显示:
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Error contacting service. It is probably not running.
发现并没有启动成功
回退到上一级目录,进入logs,在日志中应该会反应出什么问题。
查看日志输出:
[root@VM-0-7-centos zookeeper]# cd logs [root@VM-0-7-centos logs]# ll
total 12
-rw-r--r-- 1 root root 9007 Aug 7 08:52 zookeeper-root-server-VM-0-7-centos.out [root@VM-0-7-centos logs]# cat zookeeper-root-server-VM-0-7-centos.out
最后面发现输出的异常信息:
org.apache.zookeeper.server.admin.AdminServer$AdminServerException: Problem starting AdminServer on address 0.0.0.0, port 8080 and command URL /commands
at org.apache.zookeeper.server.admin.JettyAdminServer.start(JettyAdminServer.java:107)
at org.apache.zookeeper.server.ZooKeeperServerMain.runFromConfig(ZooKeeperServerMain.java:138)
at org.apache.zookeeper.server.ZooKeeperServerMain.initializeAndRun(ZooKeeperServerMain.java:106)
at org.apache.zookeeper.server.ZooKeeperServerMain.main(ZooKeeperServerMain.java:64)
at org.apache.zookeeper.server.quorum.QuorumPeerMain.initializeAndRun(QuorumPeerMain.java:128)
at org.apache.zookeeper.server.quorum.QuorumPeerMain.main(QuorumPeerMain.java:82)
Caused by: java.io.IOException: Failed to bind to /0.0.0.0:8080
at org.eclipse.jetty.server.ServerConnector.openAcceptChannel(ServerConnector.java:346)
at org.eclipse.jetty.server.ServerConnector.open(ServerConnector.java:307)
at org.eclipse.jetty.server.AbstractNetworkConnector.doStart(AbstractNetworkConnector.java:80)
at org.eclipse.jetty.server.ServerConnector.doStart(ServerConnector.java:231)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:72)
at org.eclipse.jetty.server.Server.doStart(Server.java:385)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:72)
at org.apache.zookeeper.server.admin.JettyAdminServer.start(JettyAdminServer.java:103)
... 5 more
Caused by: java.net.BindException: Address already in use
at sun.nio.ch.Net.bind0(Native Method)
at sun.nio.ch.Net.bind(Net.java:433)
at sun.nio.ch.Net.bind(Net.java:425)
at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:220)
at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:85)
at org.eclipse.jetty.server.ServerConnector.openAcceptChannel(ServerConnector.java:342)
... 12 more
Unable to start AdminServer, exiting abnormally
应该是我部署的项目占用的8080端口导致的,原来Zookeeper需要使用8080端口
[root@VM-0-7-centos ~]# ll
total 50452
drwxr-xr-x 6 root root 4096 Aug 6 20:25 apache-zookeeper-3.5.8-bin
-rw-r--r-- 1 root root 9394700 May 11 18:10 apache-zookeeper-3.5.8-bin.tar.gz
-rw------- 1 root root 225749 Aug 7 06:58 nohup.out
-rw-r--r-- 1 root root 42029492 Aug 6 14:37 warehouse-management-system-0.0.1-SNAPSHOT.jar
[root@VM-0-7-centos ~]# netstat -nlp|grep 8080
tcp6 0 0 :::8080 :::* LISTEN 9711/java
直接终止进程:
再次检查端口占用,就发现不再有任何程序了
[root@VM-0-7-centos ~]# kill 9711
[root@VM-0-7-centos ~]# netstat -nlp|grep 8080
[root@VM-0-7-centos ~]#
再次启动Zookeeper
[root@VM-0-7-centos bin]# ./zkServer.sh start
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[root@VM-0-7-centos bin]# ./zkServer.sh status
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: standalone
当前的模式是单机状态
报错异常问题查看参考自:
https://blog.csdn.net/qq_26230421/article/details/80700912
【Zookeeper】01 概述 & 基础部署的更多相关文章
- 054 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 01 数组概述
054 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 01 数组概述 本文知识点:数组概述 为什么要学习数组? 实际问题: 比如我们要对学生的成绩进行排序,一个班级 ...
- 039 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 01 循环结构概述
039 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 01 循环结构概述 本文知识点:循环结构概述 循环结构主要内容 while 循环 do-whiile ...
- 034 01 Android 零基础入门 01 Java基础语法 04 Java流程控制之选择结构 01 流程控制概述
034 01 Android 零基础入门 01 Java基础语法 04 Java流程控制之选择结构 01 流程控制概述 本文知识点:Java中的流程控制相关概念的认识 三大流程控制语句结构的简介 顺序 ...
- Zookeeper详解(01) -概述
Zookeeper详解(01) -概述 概念 Zookeeper是一个开源的分布式的,为分布式应用提供协调服务的Apache项目. Zookeeper从设计模式角度来理解,是一个基于观察者模式设计的分 ...
- (转)ZooKeeper 笔记(1) 安装部署及hello world
ZooKeeper 笔记(1) 安装部署及hello world 先给一堆学习文档,方便以后查看 官网文档地址大全: OverView(概述) http://zookeeper.apache.or ...
- kafka详解(01) - 概述
kafka详解(01) - 概述 定义:Kafka是一个分布式的基于发布/订阅模式的消息队列(Message Queue),主要应用于大数据实时处理领域. 消息队列 MQ传统应用场景之异步处理 使用消 ...
- 01: tornado基础篇
目录:Tornado其他篇 01: tornado基础篇 02: tornado进阶篇 03: 自定义异步非阻塞tornado框架 04: 打开tornado源码剖析处理过程 目录: 1.1 Torn ...
- Zookeeper介绍及安装部署
本节内容: Zookeeper介绍 Zookeeper特点 Zookeeper应用场景 用到了Zookeeper的一些系统 Zookeeper集群安装部署 一.Zookeeper介绍 是一个针对大型分 ...
- zookeeper与kafka安装部署及java环境搭建(发布订阅模式)
1. ZooKeeper安装部署 本文在一台机器上模拟3个zk server的集群安装. 1.1. 创建目录.解压 cd /usr/ #创建项目目录 mkdir zookeeper cd zookee ...
- Kubernetes K8S之kube-prometheus概述与部署
Kubernetes K8S之kube-prometheus概述与部署 主机配置规划 服务器名称(hostname) 系统版本 配置 内网IP 外网IP(模拟) k8s-master CentOS7. ...
随机推荐
- 使用 Hugging Face 推理终端搭建强大的“语音识别 + 说话人分割 + 投机解码”工作流
Whisper 是当前最先进的开源语音识别模型之一,毫无疑问,也是应用最广泛的模型.如果你想部署 Whisper 模型,Hugging Face 推理终端 能够让你开箱即用地轻松部署任何 Whispe ...
- kettle从入门到精通 第十五课 kettle 映射 (子转换)01
1.kettle 里面的映射和java代码里面的封装是一个概念,就是将一个可复用的模块单独抽离为公共模块供其他模块引用,用到的步骤或者组件如下 2.构建子映射,子映射需要用到映射输入规范和映射输出规范 ...
- LNMP单机架构
黄金架构LNMP LNMP是网站架构初期最合适的单体架构.因为初创型技术团队对于技术的选型,需要考虑如下因素 在创业初期,研发资源有限,研发人力有限,技术储备有限,需要选择一个易维护.简单的技术架构: ...
- 重学前端 - react 项目第一节:创建react 项目
重学前端 - react 项目第一节:创建react 项目 简介:之前一直使用的都是 vue 全家桶开发项目,现在在新的项目上开始使用react开发. 现在开始在重新学习一下 react 相关技术. ...
- Docker镜像下载慢/失败?Linux代理使用不便?想在无Docker环境下载镜像?试试我这款开源项目吧
我要在这里放一段代码块 // 这是一段防爬代码块,我不介意被文章被爬取,但请注明出处 console.log("作者官网:https://www.hanzhe.site"); co ...
- Markdown常用语法详解
背景知识 什么是html html是一种网页标记语言.我们平常见到的那么好看的网页就是通过html语言来编写的. html语言举例: <h1>hello world</h1> ...
- 【BUG记录】Cause: java.sql.SQLException: Incorrect string value: '\xF0\x9F\x90\xA6' for column 'name' at row 1
大家好呀,我是summo,这次的文章标题是一个Mysql数据库的SQL错误,遇到的同学自然懂,没遇到的同学希望你永远也不要遇到. 一.错误说明 Cause: java.sql.SQLException ...
- hive第三课:Hive函数学习
Hive函数学习 目录 Hive函数学习 SQL练习 Hive 常用函数 关系运算 数值计算 条件函数(主要使用场景是数据清洗的过程中使用,有些构建表的过程也是需要的) 日期函数重点!!! 字符串函数 ...
- C#/.NET这些实用的技巧和知识点你都知道吗?
前言 今天大姚给大家分享一些C#/.NET中的实用的技巧和知识点,它们可以帮助我们提升代码质量和编程效率,希望可以帮助到有需要的同学. .NET使用CsvHelper快速读取和写入CSV文件 本文主要 ...
- 高通与At指令:ATFWD解析
背景 本章的内容是适用于AP侧AT指令开发调试的有关人员. 主要是介绍高通实现的ATFWD框架.在这需要说明一下的是,或许你对AT Command很了解了,但是却貌似都不知道ATFWD,这很正常,严格 ...