zookeeper:
分布式协同服务,负责处理分布式框架所产生的一些问题
分布式框架:
可扩展性
透明性
高可靠性
分布式框架的弊端:
不一致性:单个节点数据的缺失,处理数据
竞态条件:多个节点同时处理一个只需要一个节点处理的数据
死锁: 两个节点互相等待对方完成
zk为了解决问题能提供什么服务?
名字服务: 标识集群中的所有节点,(节点能够向其注册并产生唯一标识)
配置管理: 存储配置文件,以便共享
集群管理: 添加或删除节点同时,事实更新集群信息
领袖推选机制:
锁和同步服务: 当文件进行修改,会将其进行加锁,防止多用户同时写入
高有效性数据注册:
zk:
follower
leader
推荐配置奇数个节点:
(n-1)/2 个节点挂掉,仍能提供服务,超过则挂掉 //奇数
n/2 个节点挂掉,不能提供服务, //偶数
2888:leader独有端口,负责和follower进行通信
3888:负责leader选举的端口
2181:client端口
zk启动:
zkServer.sh start //启动zk
stop
status
zkCli.sh //启动本地zk客户端
zkCli.sh -server s102:2181 //启动远程zk客户端
zk的节点和数据,是zk的目录结构
节点 数据
/ 'tom'
/a/b ...
/aaa
create /a '' //创建节点:持久节点 客户端断开不会自动删除
create /a -e '' //创建节点:临时节点 客户端断开会自动删除
create /a -s '' //创建节点:序列节点 在节点后加上10位的自增字段
rmr /a/b/c //递归删除
delete /a //不能递归
ls / //列出孩子节点
stat / //查询节点状态,不包括数据
get / //查询数据并返回状态
set / //修改节点数据
使用zk对hdfs实现自动容灾:hdfs-site.xml
<!-- =======================配置hdfs自动容灾======================= -->
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<property>
<name>ha.zookeeper.quorum</name>
<value>s102:2181,s103:2181,s104:2181</value>
</property>
0、启动zk,不用启动hdfs进程
1、配置文件,如上
2、分发hdfs-site.xml
3、hdfs zkfc -formatZK
4、启动hdfs进程
zkfc进程:zookeeper failover controller //zk容灾管理器
初始化journalnode方法:关闭所有namenode进程
hdfs namenode -initializeSharedEdits
hadoop ha的切换:
================================
nn1 //s101
nn2 //s105
hdfs haadmin -transitionToActive [--forcemanual] nn1 //强制切换
hdfs haadmin -transitionToStandby nn1
hdfs haadmin -getServiceState nn1
无法将两个namenode处于standby或active状态
resourcemanager配置高可用以及自动容灾:yarn-site.xml
==============================================
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>mycluster</value>
</property>
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>s101</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>s105</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address.rm1</name>
<value>s101:8088</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address.rm2</name>
<value>s105:8088</value>
</property>
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>s102:2181,s103:2181,s104:2181</value>
</property>
0、zk保持开启,yarn不要启动
1、配置文件,如上
2、分发文件yarn-site.xml
3、在/soft/hadoop/etc/hadoop下添加rm_hosts文件,内容如下
s101
s105
4、修改/soft/hadoop/sbin/start-yarn.sh倒数第五行,改为
"$bin"/yarn-daemons.sh --config $YARN_CONF_DIR --hosts rm_hosts start resourcemanager
修改/soft/hadoop/sbin/stop-yarn.sh倒数第五行,改为
"$bin"/yarn-daemons.sh --config $YARN_CONF_DIR --hosts rm_hosts stop resourcemanager
5、分发以上三个配置文件
6、start-yarn.sh并查看8088端口,可看出一个节点为active模式,另一个为standby
重新格式化HA模式的hadoop集群:
===========================================
1、停止进程:
stop-all.sh //停止hadoop进程
xzk.sh stop //停止zk进程
2、将s101-s105的临时(工作)目录删除
xcall.sh "rm -rf ~/hadoop/*"
3、在s102-s104节点启动journalnode //s101
hadoop-daemons.sh start journalnode
4、格式化s101的namenode
hdfs namenode -format
5、将s101的工作目录分发到s105
rsync -r ~/hadoop centos@s105:~/
6、启动zk
7、启动hadoop
hadoop进程:
slave:s102 s103 s104
s101和s105:
namenode
resourcemanager
DFSZKFailoverController(zkfc)
s102-s104:
datanode
nodemanager
journalnode
zk进程
s102-s104:
QuorumPeerMain