zookeeper相关知识与集群搭建
Zookeeper
Zookeeper相关概念
Zookeeper概述
Zookeeper是一个分布式协调服务的开源框架,主要用来解决分布式集群中应用系统的一致性问题。
Zookeeper本质上是一个分布式的小文件存储系统,主要的功能有统一命名服务、分布式配置管理、分布式消息队列、分布式锁、分布式协调等。
Zookeeper特性
- 全局数据一致
- 可靠性
- 顺序性
- 数据更新原子性
- 实时性
Zookeeper集群角色
- Leader:Zookeeper 集群工作的核心
事务请求(写操作)的唯一调度和处理者,保证集群事务处理的顺序性;集群内部各个服务器的调度者。
对于 create,setData,delete 等有写操作的请求,则需要统一转发给leader 处理,leader 需要决定编号、执行操作,这个过程称为一个事务。 - Follower:跟随者
处理客户端非事务(读操作)请求,转发事务请求给 Leader;参与集群 Leader 选举投票。 - Observer:针对访问量比较大的 zookeeper 集群,还可新增观察者角色
不会参与任何形式的投票只提供非事务服务,通常用于在不影响集群事务处理能力的前提下提升集群的非事务处理能力。
ZooKeeper数据模型

图中的每个节点称为一个 Znode。 Znode 兼具文件和目录两种特点;具有原子性操作;存储数据大小有限制,通常以 KB 为大小单位;通过路径引用,路径必须是绝对的,由斜杠字符来开头。
- 每个 Znode 由 3 部分组成:
- stat:此为状态信息, 描述该 Znode 的版本, 权限等信息
- data:与该 Znode 关联的数据
- children:该 Znode 下的子节点
- Znode 有两种,临时节点:会话结束,临时节点将被自动删除。临时节点不允许拥有子节点和永久节点
- 存在四种类型的 Znode 节点
- PERSISTENT:永久节点
- EPHEMERAL:临时节点
- PERSISTENT_SEQUENTIAL:永久节点、序列化
- EPHEMERAL_SEQUENTIAL:临时节点、序列化
Zookeeper Watcher
客户端向服务端注册Watcher、服务端事件发生触发 Watcher、客户端回调 Watcher 得到触发事件情况
- Watch机制特点
- 一次性触发
- 事件封装:WatchedEvent(通知状态(keeperState),事件类型(EventType)和节点路径(path))
- event 异步发送
- 先注册再触发
ZooKeeper 选举机制
- 全新集群选举
投票数正好大于半数时,服务器 ID最大的服务器为leader - 非全新集群选举
逻辑时钟小的选举结果被忽略,重新投票;统一逻辑时钟后,数据 id 大的胜出;数据 id 相同的情况下,服务器 id 大的胜出
Zookeeper集群搭建
JDK 环境安装
#卸载openjdk
rpm -qa | grep java
rpm -e --nodeps 上一步查出来的软件
#上传 jdk 安装包
jdk-8u65-linux-x64.tar.gz
#解压安装包
tar zxvf jdk-8u65-linux-x64.tar.gz -C /root/apps
#配置环境变量
vim /etc/profile
export JAVA_HOME=/root/apps/jdk1.8.0_65
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
#刷新配置
source /etc/profile
Zookeeper集群搭建
#检查集群时间,下方窗口同时间发送
date
#同步时间
yum install -y ntp
ntpdate ntp6.aliyun.com
#关闭防火墙
service iptables stop
#注: 永久关闭防火墙[推荐使用]
chkconfig iptables off
映射 cat /etc/hosts
IP地址 主机名
##下载安装包、解压
tar -zxvf zookeeper-3.4.5.tar.gz
mv zookeeper-3.4.5 zookeeper
改一个名字
##修改环境变量(注意:3台zookeeper都需要修改)
#注 : 1.写环境变量的时候最后不能带有 / 一定不能!!2. 一定要ssh 自己能通过
vim /etc/profile
export ZOOKEEPER_HOME=/root/apps/zookeeper
export PATH=$PATH:$ZOOKEEPER_HOME/bin
source /etc/profile
##修改Zookeeper配置文件
cd /root/apps/zookeeper/conf
cp zoo_sample.cfg zoo.cfg
#创建数据文件夹
mkdir -p /export/data/zkdata
vim zoo.cfg
添加内容:
//修改路径.改成自己的
dataDir=/export/data/zkdata
## (心跳端口、选举端口)
server.1=node1:2888:3888
server.2=node2:2888:3888
server.3=node3:2888:3888
注: 最好这行配置后面不要加别的注释以及不要断开,防止启动不起来
cd /export/data/zkdata
#注意这是刚才创建的data路径文件夹
在data文件夹下新建myid文件,myid的文件内容为(设置节点的id):
echo 1 > myid
##分发安装包到其他机器(这里是要把jdk 也要传过去,)
scp -r /root/apps/zookeeper root@node2:/root/apps/
注:这里zookeeper 后面有没 / 把文件夹也传过去
##修改其他机器的配置文件[记得创建数据文件夹]
修改myid文件
到node2上:修改myid为:2
到node3上:修改myid为:3
#设置三个机器的本机免密登录(三台机器配置一样):
ssh-keygen -t rsa ---一直回车即可
cd /root/.ssh/ ---生成了公钥和私钥
cat id_rsa.pub >> authorized_keys ---将公钥追加到授权文件中
more authorized_keys ---可以查看到里面追加的公钥
ssh node1
#配置两两之间的免密登录:
#将node1中的公钥复制到node2中
ssh-copy-id -i node2
#将node3中的公钥复制到node2中
ssh-copy-id -i node2
#把node2中的授权文件复制给node1和node3
scp /root/.ssh/authorized_keys node1:/root/.ssh/
scp /root/.ssh/authorized_keys node3:/root/.ssh/
一键启动:
#!/bin/bash
for host in node1 node2 node3
do
{
echo $host start
ssh $host "source /etc/profile;/root/apps/zookeeper/bin/zkServer.sh start"
echo "$host zk is running"
}
done
##查看集群状态
jps(查看进程)
zkServer.sh status(查看集群状态,主从信息)
如果启动不成功,可以观察zookeeper.out日志,查看错误信息进行排查
一键关闭:
#!/bin/bash
for host in node1 node2 node3
do
{
echo "$host zk is stopping"
ssh $host "/root/apps/zookeeper/bin/zkServer.sh stop"
}
done
zookeeper相关知识与集群搭建的更多相关文章
- ZooKeeper的伪分布式集群搭建
ZooKeeper集群的一些基本概念 zookeeper集群搭建: zk集群,主从节点,心跳机制(选举模式) 配置数据文件 myid 1/2/3 对应 server.1/2/3 通过 zkCli.sh ...
- zookeeper+activemq高可用集群搭建
一.准备工作: 准备三台机器:192.168.35.111192.168.35.112192.168.35.113 二.搭建zookeeper 三台机器上均要搭建zookeeper服务// 下载zoo ...
- Zookeeper,Hbase 伪分布,集群搭建
工作中一般使用的都是zookeeper和Hbase的分布式集群. more /etc/profile cd /usr/local zookeeper-3.4.5.tar.gz zookeeper在安装 ...
- ASP.NET Core on K8S深入学习(1)K8S基础知识与集群搭建
在上一个小系列文章<ASP.NET Core on K8S学习初探>中,通过在Windows上通过Docker for Windows搭建了一个单节点的K8S环境,并初步尝试将ASP.NE ...
- 【ZooKeeper】单机伪集群搭建(适用于mac)
1.配置 .zookeeper下载地址:http://apache.mirrors.lucidnetworks.net/zookeeper/ 可以选择需要的版本,我下载的是zookeeper-3.4. ...
- zookeeper集群搭建及Leader选举算法源码解析
第一章.zookeeper概述 一.zookeeper 简介 zookeeper 是一个开源的分布式应用程序协调服务器,是 Hadoop 的重要组件. zooKeeper 是一个分布式的,开放源码的分 ...
- 分布式实时日志系统(一)环境搭建之 Jstorm 集群搭建过程/Jstorm集群一键安装部署
最近公司业务数据量越来越大,以前的基于消息队列的日志系统越来越难以满足目前的业务量,表现为消息积压,日志延迟,日志存储日期过短,所以,我们开始着手要重新设计这块,业界已经有了比较成熟的流程,即基于流式 ...
- K8S之集群搭建
转自声明 ASP.NET Core on K8S深入学习(1)K8S基础知识与集群搭建 1.K8S环境搭建的几种方式 搭建K8S环境有几种常见的方式如下: (1)Minikube Minikube是一 ...
- 初始zookeeper与集群搭建实例
zookeeper是什么 Zookeeper,一种分布式应用的协作服务,是Google的Chubby一个开源的实现,是Hadoop的分布式协调服务,它包含一个简单的原语集,应用于分布式应用的协作服务, ...
随机推荐
- 【阿里云产品公测】小白对OTS两点小建议
作者:阿里云用户荷包蛋 我是大一的新生,作为一个爱技术爱学习爱折腾的熊孩子,我在暑假申请了ECS,学到了很多东西.现在阿里巴巴又开放了很多免费测试,我抱着学习和围观的心态申请了测试,其中有OTS这个高 ...
- jmeter简单录制
JMeter介绍 1.JMeter,一个100%的纯Java桌面应用,它是Apache组织的开放源代码项目,它是功能和性能测试的工具.JMeter可以用于测试静态或者动态资源的性能(文件.Servle ...
- PHP接口对方(C#)接收不到数据?ContentLength=-1
工作时遇到的问题.浏览器可以查看到json数据,但是对方死活收不到数据. 最后发现发现ContentLength=-1. 找到问题:为什么.NET程序下载获得的ContentLength=-1? 摘抄 ...
- matlab练习程序(模糊集图像增强)
算法有很多变种.不过主要就是以下三步. 1.设计隶属度函数将图像从空间域变换到模糊集域. 2.设计模糊增强算子,在模糊集域对图像进行处理. 3.根据第1步的隶属度函数重新将图像从模糊集域变换到空间域. ...
- Siebel 开发规范
Siebel Configuration and Development Guideline 1 2 2.1 2.2 2.3 11. 2.4 2.5 3 3.1 3.2 3.2.1 3.2.2 3.3 ...
- MySQL几个join
1.因为关系型数据库的基本原理,是基于“关系代数”.最重要的一类关系代数,就是2个集合之间的运算. 从集合运算的视角,去理解SQL中的几个常用join (1)inner join (2)left jo ...
- win10安装mxnet cuda9.0-gpu版
类似于上一篇文章 Anaconda3.6 python3.6.5 cuda9.0+ cudnn7.0 安装MXNet 1.设置清华源 conda config --prepend cha ...
- npm run dev运行Vue项目报错:Node Sass does not yet support your current environment
导入Vue项目后,#npm run dev 报错: error in ./src/pages/hello.vue Module build failed: Error: Node Sass does ...
- ThinkPHP5.0版本的优势在于:
更灵活的路由: 依赖注入: 请求缓存: 更强大的查询语法: 引入了请求/响应对象: 路由地址反解生成: 增强的模型功能: API开发友好: 改进的异常机制: 远程调试支持: 单元测试支持: 命令行工具 ...
- Windows 2012R2远程桌面服务简介
一.远程桌面服务概述 远程桌面服务加快并扩展了到任何设备的桌面和应用程序部署,在帮助保护关键知识产权的安全的同时提高了工作人员的工作效率,简化了法规遵从性. 远程桌面服务启用虚拟机基础结构 (VDI) ...