高可用集群搭建:hdfs的HA + yarn的HA
1.HDFS的HA
prototype原型
问题:fsiamge很大,每次都需要传输,性能大幅度下降
改进1
【keepAlived】:解决静态路由的单点故障问题
- Keepalived的作用是检测服务器的状态,如果有一台web服务器宕机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使用其他服务器代替该服务器的工作,当服务器工作正常后Keepalived自动将服务器加入到服务器群中
- 起初专为LVS:配置管理、健康监测、高可用
【VRRP】(virtual router Redundancy Protocol 虚拟路由器冗余协议):
几台路由器联合成一个虚拟路由设备,当网关出现故障,能够选举出一个新的网关保证可靠通信。(master-backup)根据优先级和ip进行选举。
- 问题:如果只是切换ip保证某一个NN和虚拟IP相对应,但是元数据同步是个大问题。Keepalived常见用在web服务器上面,因为两个完全相等,没有数据差异(无状态切换)。
改进2:
补充【RPC】remote procedure call
允许不同机器上的进程相互调用:A调用B的进程,A上面的挂起,B执行
dubbo也是基于rpc的实现
add例子:
一般说来是客户端将调用类的名称传递给服务端
引入第三方目标机器:服务器向其注册服务,客户端向其获取服务列表。
有同步rpc,也有异步rpc(超时重试需要服务幂等性处理)
相同作用还有消息队列可以实现,不要求两端同时运行,性能会高一些
1.每当一次更新操作来了之后,多线程(线程池)同步操作,namenode的edits和editscluster的每一个JournalNode节点。不用保证全部写入成功,只要cluster上面多数台写入成功就可以了
2. Standby通过edits cluster进行读取
3. Active和Standby两者的状态管理:需要一个东西来感知状态,keepalived太low了,是通过脚本的方式感知的。
4. RPC接口调用
5. 如果检测到active节点没有心跳了,将A(表示当前的左边节点)删除,A同时还被右边的zkFC监控,一旦检测到原来的没有了 创建一个属于右边namenode的节点B(见Zookeeper分布式锁)
6. PRC调用,将原来standby(右边的节点)变成active
7. 防止诈尸,强行将原来的namenode杀死:kill -9;如果还不行就调用用户自定义的脚本
2. YARN的HA
挂掉之后没有影响,下次直接接着启动就可以了,没有保存元数据