关键词:
参考技术A 分布式协调技术----zookeeper分布式协调技术是用来解决分布式环境中多个进程间的同步控制,使他们能有序的访问某种临界资源,防止造成“脏数据”的后果,分布式并不是一个简单的调度算法就能轻易解决的,这是一种误解。如果进程全部是在一台机器上确实这么久好办,但是出于分布式的环境下该怎么解决呢?
给大家分析一下这个图,图中的三台机器,每个程序个跑一个应用程序,通过网络图将此连接起来,构成一个系统为用户提供服务,对用户来说这是个透明的架构的系统,我们可以把这个系统称之为分布式系统。
在分析一下这个分布式系统是如何对进程进行调度,假设在server1上挂载了一个资源,三个分布式的进程都要来竞争这个资源,但是又不希望他们同时访问,此时就需要一个“协调器”,让他们有序获取资源,“协调器”则被称为锁。比如“进程-1”说明程序在使用该资源时会先获取锁,“进程1”获取锁就会对资源独占,使用完将锁释放,让其他进程来获得锁。这个锁则是分布式锁,也是分布式协调技术。
分布式做的比较好的就是Google的Chubby和Apache的Zookeeper,Chubby是非开源的,后来雅虎模仿Chubby开发出了Zookeeper,也实现了类似的分布式功能,并把zookeeper作为开源程序捐给了Apache。Zookeeper用来构建我们的系统,不仅Bug少而且节约成本。
Zookeeper的优点是一种高可用、高性能且一直的开源协调工具。并且提供了“分布式锁服务”,功能强大,可以配置维护、组服务、分布式通知及分布式消息队列等。在性能方面它采用了Zab协议,数据结构用的Znode,在数据结构上定义了原语,通知机制用的Watcher机制,有严格的序列访问控制,不会因为一个节点的错误而崩溃。
(1)给Zookeeper起了俩主节点,主节点-A master-00001,主节点-B master-00002,启动后都像zookeeper注册一个节点,主节点-A变成了主节点,主节点-B变成了备用节点,对俩Master进程进行调度。
(2)主节点-A挂了,它注册的节点被自动删除,感知节点发起选举,经过选举后主节点-B变成了主节点,替代了主节点-A。
(3)Master恢复,它会在向zookeeper注册一个节点master-00003,再次选举后主节点-B依旧是主节点,主节点A变成了备用节点。
安装配置步骤:
试验机器:192.168.10.10 hostname:zk1
192.168.10.11 hostname:zk2
192.168.10.12 hostname:zk3
1.安装jdk
[^_^] ~# tar xf jdk-8u131-linux-x64.tar.gz -C /usr/local/
[^_^] ~# mkdir /usr/local/java
[^_^] java# mv jdk1.8.0_171 /usr/local/java
[^_^] ~# cat /etc/profile.d/java.sh
JAVA_HOME=/usr/local/java/jdk1.8.0_131
JRE_HOME=/usr/local/java/jdk1.8.0_131/jre
CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
export JAVA_HOME JRE_HOME CLASS_PATH
[^_^] ~# source /etc/profile.d/java.sh
验证:java -version
2.安装zookeeper
[^_^] ~# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.36.10 zk1
192.168.36.11 zk2
192.168.36.12 zk3
[^_^] ~# cat /etc/profile.d/zk.sh
#Set Zookeeper Environment
export ZOOKEEPER_HOME=/usr/local/zookeeper-3.4.11
export PATH=$PATH:$ZOOKEEPER_HOME/bin:$ZOOKEEPER_HOME/conf
[^_^] ~# source /etc/profile.d/zk.sh
[^_^] ~#cp /usr/local/zookeeper/conf/zoo_sample.cfg /usr/local/zookeeper/conf/zoo.cfg
[^_^] ~#mkdir -p /usr/local/zookeeper/data/log
[^_^] ~#echo "1" > /usr/local/zookeeper/data/myid #三台zookeeper的myid是不一样的
[^_^] ~# egrep -v "^$|#" /usr/local/zookeeper-3.4.11/conf/zoo.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/tmp/zookeeper
dataLogDir=/tmp/zookeeper/log
clientPort=2181 #服务端口
server.1=zk1:2888:3888 #2888是follower连leader的端口,3888是选leader端口
server.2=zk2:2888:3888
server.3=zk3:2888:3888
[^_^] ~# cd /usr/local/zookeeper-3.4.11/bin/
[^_^] bin# ./zkServer.sh start &
[^_^] bin#jps #查看是否启动成功
1155 Jps
1093 QuorumPeerMain #QuorumPeerMain是zookeeper进程
[^_^] bin# ./zkServer.sh status #查节点状态
[^_^] bin#zkCli.sh -server zk1:2181,zk2:2181,zk3.:2181 #可以创建zk集群
分布式消息队列之kafka
...在磁盘上,并在群集内复制以防止数据丢失。Kafka构建在ZooKeeper同步服务之上。它与ApacheStorm和Spark非常好地集成,用于实时流式数据分析。Kafka的几个好处可靠性-Kaf 查看详情
消息队列之kafka从入门到小牛(代码片段)
...er扩展3.4Kafka核心之存储和容错机制3.5Kafka高效读写数据3.6Zookeeper在Kafka中的作用3.7Kafka事务一、Kafka介绍1.1消息队列的介绍在没有使用消息系统以前& 查看详情
zookeeper+kafka集群安装之二
zookeeper+kafka集群安装之二此为上一篇文章的续篇,kafka安装须要依赖zookeeper,本文与上一篇文章都是真正分布式安装配置,能够直接用于生产环境.zookeeper安装參考:http://blog.csdn.net/ubuntu64fan/article/details/26678877首先了解几个kafka中的概念... 查看详情
消息队列之kafka(ha)(代码片段)
1.kafka的HA(1)zookeeper在kafka中的作用: -Zookeeper帮助kafka集群运行:存储一些元数据,还会帮助kafka集群进行管理(选主) -存储关于消费者消费了哪些topic到那个进度的数据。 (2)kafkaHA解决的问题: &emsp... 查看详情
消息队列之kafka(集群搭建)(代码片段)
...)集群部署的基础环境准备: A:安装JDK1.8 A:安装zookeeper集群(也可以使用自带ZooKeeper,但是不推荐)(2)集体搭建: 版本:kafka_2.11-1.1.0 集群规划:hadoop01、hadoop02、hadoop03(三个节点)①解压安装包到对应的目录&e... 查看详情
六消息队列复习
...了,系统可用性降低。3消息队列的高可用? kafka使用zookeeper,master/slave,保证高可用; Kafka通过Zookeeper管理集群配置,选举leader,以及在ConsumerGroup发生变化时进行rebalance4如何保证消息不被重复消费(幂等性)? k 查看详情
大型网站架构之分布式消息队列
大型网站架构之分布式消息队列转载2016年01月26日08:48:40标签:105329编辑删除大型网站架构之分布式消息队列 以下是消息队列以下的大纲,本文主要介绍消息队列概述,消息队列应用场景和消息中间件示例(电商,日志系统... 查看详情
分布式消息队列kafka
下载地址:http://kafka.apache.org/downloads.html先启动zookeeper服务器bin/zookeeper-server-start.shconfig/zookeeper.properties&再启动kafka服务器bin/kafka-server-start.sh-daemonconfig/server.properties&创建topicbi 查看详情
大型网站架构之分布式消息队列
大型网站架构之分布式消息队列 以下是消息队列以下的大纲,本文主要介绍消息队列概述,消息队列应用场景和消息中间件示例(电商,日志系统)。本次分享大纲消息队列概述消息队列应用场景消息中间件示例JMS消息服务... 查看详情
ipc之——消息队列
消息队列作用: 可以用于两个没有联系的进程间通信,创建一个消息队列类似于打开了一个文件,两个不同的进程都可以进行操作消息队列之函数介绍:头文件:<sys/type.h><sys/ipc.h><sys/msg.h>1.msgget(key_t,intmsgflg)://... 查看详情
物联网架构成长之路(27)-docker练习之zookeeper安装(代码片段)
...不细说了,具体的可以参考其他博客说明。不过Kafka依赖Zookeeper,因此先练习一些用Docker构建Zookeeper。 1.安装ZooKeeper 使用Kafka前,要安装ZooKeeper。这里利用最近刚学的Doc 查看详情
zookeeper集群和kafka的相关概念就部署(代码片段)
目录一、zookeeper概述1、zookeeper定义2、zookeeper工作机制3、zookeeper特点4、zookeeper数据结构5、zookeeper应用场景6、zookeeper选举机制第一次启动选举机制非第一次启动选举机制二、部署zookeeper集群1、安装前准备2、安装zookeeper三、消息... 查看详情
大型网站架构之分布式消息队列
以下是消息队列以下的大纲,本文主要介绍消息队列概述,消息队列应用场景和消息中间件示例(电商,日志系统)。本次分享大纲消息队列概述消息队列应用场景消息中间件示例JMS消息服务(见第二篇:大型网站架构系列:分... 查看详情
systemvipc之消息队列(代码片段)
消息队列和共享内存、信号量一样,同属SystemVIPC通信机制。消息队列是一系列连续排列的消息,保存在内核中,通过消息队列的引用标识符来访问。使用消息队列的好处是对每个消息指定了特定消息类型,接收消息的进程可以... 查看详情
基于docker搭建分布式消息队列kafka
本文基于Docker搭建一套单节点的Kafka消息队列,Kafka依赖Zookeeper为其管理集群信息,虽然本例不涉及集群,但是该有的组件都还是会有,典型的kafka分布式架构如下图所示。本例搭建的示例包含Zookeeper+Kafka+Kafka-manger #获取... 查看详情
消息队列技术之基本概念(转)
原文地址:消息队列技术之基本概念最近一直在总结AzureMessagingServiceBusMessaging相关的技术:消息顺序、消息持久化、复杂对象消息的序列化、消息事务、消息回执等机制。感觉有必要补充一篇消息队列技术的基本概念,无论Rabbit... 查看详情
zookeeper+kafka集群搭建详解(代码片段)
Kafka概述一、消息队列介绍1.1为什么需要消息队列(MO)1.2使用消息队列的好处1.3消息队列的两种模式二、Kafka相关介绍2.1Kafka定义2.2Kafka简介2.3Kafka的特性三、Kafka系统架构3.1Broker3.2Topic3.3Partition3.4Leader3.5Follower3.6Replica3.7Prod... 查看详情
自测之lesson11:消息和消息队列
题目:key及ftok函数的作用。 解答:key是用来创建消息队列的一个参数,当两个key相同时,创建消息队列会引起“误会”(除非有意为之)。所以我们可以通过ftok函数来获得一个“不易重复”的key。key对于进程间通信也有帮... 查看详情