个人理解学习如有错误,请指出。
什么是分布式o
将任务拆分成子模块在不同的节点上执行。
分布式与集群的区别
分布式解决了高可用,高并发。集群解决了高可用。
- 如:有一堆砖头需要搬运时间需要10个小时。
- 分布式: 10个人,搬完只需要1个小时。
- 集群: 10个人,搬完需要10个小时。
为什么要使用分布式
所有的架构思想,都是为了提高工作效率,模块化业务需求,降低耦合,方便维护。
分布式难点
- 保证节点高可用
- 数据的一致性
- 通讯异常
Zookeeper简介
- ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。
- ZooKeeper的基本运转流程:
1、选举Leader。
2、同步数据。
3、选举Leader过程中算法有很多,但要达到的选举标准是一致的。
4、Leader要具有最高的执行ID,类似root权限。
5、集群中大多数的机器得到响应并接受选出的Leader。
Zookeeper安装配置
- 下载
$ wget http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.4.9/zookeeper-3.4.9.tar.gz
- 解压
$ tar xvzf zookeeper-3.4.9.tar.gz
$ mv ./zookeeper-3.4.9 /usr/local/
-
修改配置文件
${ZOOKEEPER_HOME}/conf/zoo_sample.cfg
- (伪分布式)
dataDir指定当前服务器数据存放的路径(目录)
clientPort 指定当前服务器服务器的端口
server.1/server.2/server.3 指定服务器的集群情况(有几台服务器)
myid必须手动建立且指定在zk数据目录,也就是dataDir指定的路径(不管真分布还是伪分布都需要指定)
$ echo 1 >> /home/hadoop/tmp/zookeeper/zk1/myid
$ echo 2 >> /home/hadoop/tmp/zookeeper/zk2/myid
$ echo 3 >> /home/hadoop/tmp/zookeeper/zk3/myid
Zookeeper伪分布式部署(server zookeeper只有一份)
/conf/zoo1.cfg zoo2.cfg zoo3.cfg
zoo1.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/home/hadoop/tmp/zookeeper/zk1(这个目录可以自行指定)
clientPort=2181
server.1=master:2888(通讯端口):3888(选举端口)
server.2=master:2889:3889
server.3=master:2890:3890
zoo2.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/home/hadoop/tmp/zookeeper/zk2
clientPort=2182
server.1=master:2888:3888
server.2=master:2889:3889
server.3=master:2890:3890
zoo3.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/home/hadoop/tmp/zookeeper/zk3
clientPort=2183
server.1=master:2888:3888
server.2=master:2889:3889
server.3=master:2890:3890
Zookeeper真分布部署在master、slave1、slave2 三台不同的服务器上
server1..../conf/zoo.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/home/hadoop/tmp/zookeeper/zk
clientPort=2181
server.1=master:2888:3888
server.2=slave1:2888:3888
server.3=slave2:2888:3888
server2..../conf/zoo.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/home/hadoop/tmp/zookeeper/zk
clientPort=2181
server.1=master:2888:3888
server.2=slave1:2888:3888
server.3=slave2:2888:3888
server3..../conf/zoo.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/home/hadoop/tmp/zookeeper/zk
clientPort=2181
server.1=master:2888:3888
server.2=slave1:2888:3888
server.3=slave2:2888:3888
Zookeeper及其APi的使用
- 停止Zookeeper
伪分布式:
$ zkServer.sh stop /usr/local/zookeeper-3.4.6/conf/zoo1.cfg
$ zkServer.sh stop /usr/local/zookeeper-3.4.6/conf/zoo2.cfg
$ zkServer.sh stop /usr/local/zookeeper-3.4.6/conf/zoo3.cfg
- 启动Zookeeper
$ zkServer.sh start /usr/local/zookeeper-3.4.6/conf/zoo1.cfg
$ zkServer.sh start /usr/local/zookeeper-3.4.6/conf/zoo2.cfg
$ zkServer.sh start /usr/local/zookeeper-3.4.6/conf/zoo3.cfg
- 查看zookeeper状态
$ zkServer.sh status /usr/local/zookeeper-3.4.6/conf/zoo1.cfg
$ zkServer.sh status /usr/local/zookeeper-3.4.6/conf/zoo2.cfg
$ zkServer.sh status /usr/local/zookeeper-3.4.6/conf/zoo3.cfg