标签:shell 高可用 arping

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://president.blog.51cto.com/4990508/860765
HA(High Availability)高可用,有如下三种工作模式。
(1)主从方式 (非对称方式)
工作原理:主机工作,备机处于监控准备状况;当主机宕机时,备机接管主机的一切工作,待主机恢复正常后,按使用者的设定以自动或手动方式将服务切换到主机上运行,数据的一致性通过共享存储系统解决。
(2)双机双工方式(互备互援)   
工作原理:两台主机同时运行各自的服务工作且相互监测情况,当任一台主机宕机时,另一台主机立即接管它的一切工作,保证工作实时,应用服务系统的关键数据存放在共享存储系统中。   
(3)集群工作方式(多服务器互备方式)   
工作原理:多台主机一起工作,各自运行一个或几个服务,各为服务定义一个或多个备用主机,当某个主机故障时,运行在其上的服务就可以被其它主机接管。
       Linux下有不少工具可以提供高可用的功能,如vrrp,heartbeat。
       vrrp主机会定期广播自己依然活着“我是master,我还活着,平安无事”,而当备机接受不到“平安无事”的时候,会接管主机的ip地址,也就接管了主机提供的服务,然后开始喊“我成主机了,我活着,平安无事”
       heartbeat不使用广播而使用心跳,也就是在高可用服务器之间建立监控关系,避免了广播对网络的负担,功能也上更为强大,在接管ip的同时,还可以执行脚本。
       vrrp使用双机双工方式,但有些应用场景中并不适用,如mysql的高可用就不能使用vrrp。HA的三种模式中都有“共享存储“目的是解决数据一致性 的问题,mysql的数据文件即data目录如果建立在nfs服务上,启动慢不说,备机即便能起来也是不能使用的,一段时间以后备机上的mysql服务会 自动结束。由于服务器不是那么容易死掉的(在测试的时候为了简单,一般是让机器死掉),更多的时候是应用死掉。所以才有 heartbeat+DRBD+MYSQL的组合,利用的就是heartbeat的脚本执行功能(检测、资源回收)。
        我们在这里用shell脚本实现vrrp的主从方式 (非对称方式)功能。环境如下:
        web(主)             192.168.1.1      http服务
        web(备)             192.168.1.2      http服务
        
        实现思路:首先是状态监控,既然是http服务,我们就监控httpd的状态,使用curl -w %{http_code}获得。 备机上运行脚本,当curl获得的状态码不为200时,即主机已经死掉,我们就让备机接管主机ip。并使用arping命令更新局域网对主机ip的mac记录。

# /bin/bash
while true do
         code=`curl -o /dev/null -w %{http_code} http://192.168.1.1/ 2>/dev/null`
        if ! [ $code -eq 200 ];then
                ifconfig eth0 192.168.1.1
                arping -A -c 1 -I eth0 192.168.1.1
                kill -9 $$ #IP已经切换,脚本已经没有继续运行的必要,把自己杀掉。
        fi
        sleep 5
done

heartbeat实现:

主机运行:
#! /bin/bash
while true do
         code=`curl -o /dev/null -w %{http_code} http://192.168.1.1/ 2>/dev/null`
        if ! [ $code -eq 200 ];then
                /etc/init.d/httpd stop
                ifconfig eth0 down                
                kill -9 $$ #IP已经切换,脚本已经没有继续运行的必要,把自己杀掉。
        fi
        sleep 5
done

备机运行:
#! /bin/bash
while true do
         ping -c1 192.168.1.1 &>/dev/null
        if ! [ $? -eq 0 ];then
                /etc/init.d/httpd start
                ifconfig eth0 192.168.1.1                
                arping -A -c 1 -I eth0 192.168.1.1
                kill -9 $$ #IP已经切换,脚本已经没有继续运行的必要,把自己杀掉。
        fi
        sleep 5
done

本文主要是介绍高可用的模式及实现原理。该脚本只是模拟vrrp、heartbeat的部分功能,有一些假设的前提条件,目的是为了让大家了解其工作原理,不像之前的事例可以用在生产环境。欢迎批评指教。希望对大家理解高可用有所帮助,更希望大家可以完善这个脚本,提出更好的解决方案,多说一句,脚本不是万能的,但没有脚本是万万不能的。

本文出自 “林肯” 博客,请务必保留此出处http://president.blog.51cto.com/4990508/860765

转载于:https://blog.51cto.com/1158497363/1088483

shell解决服务器高可用相关推荐

  1. 用Heartbeat实现web服务器高可用

    用Heartbeat实现web服务器高可用 heartbeat概述: Heartbeat 项目是 Linux-HA 工程的一个组成部分,它实现了一个高可用集群系统.心跳服务和集群通信是高可用集群的两个 ...

  2. 游戏服务器高性能负载均衡,游戏服务器高可用负载均衡

    游戏服务器高可用负载均衡 内容精选 换一换 公有云提供弹性公网IP(EIP).NAT网关.弹性负载均衡(ELB)等方式连接公网.EIPEIP提供独立的公网IP资源,包括公网IP地址与公网出口带宽服务. ...

  3. lvs服务器需要开启web服务么_Nginx+Keepalived实现web服务器高可用

    1.Nginx 业务背景 现公司需求快速搭建web服务器,对外提供给用户web服务. 需求拆分 需要基于http协议的软件,搭建服务实现 介绍 常见用法: 1) web服务器软件 httpd http ...

  4. Hadoop平台关闭THP解决服务器高负载问题

    Ambari和CM管理平台都提示,建议关闭THP,这是为什么?如果不关闭THP,发现Hadoop的系统态CPU使用率很高, 原因是RHEL6优化了内存申请的效率,而且在某些场景下对KVM的性能有明显提 ...

  5. 《构建高可用Linux服务器》互动网首发

    书名:构建高可用Linux服务器 ISBN:9787111359423 作者:余洪春 定价:79.00元 出版时间:2011年10月 出版社:机械工业出版社 订书页面 编辑推荐: 基于实际生产环境,从 ...

  6. 构建高可用linux和鸟哥,构建高可用Linux服务器

    <构建高可用Linux服务器(第3版)>是Linux运维领域公认的经典畅销书,是国内51CTO.IT168等知名网站和多位资深运维专家共同推荐的运维工程师必备的工具书! "酒哥& ...

  7. 如何实现MYSQL高性能,高可用服务器架构

    文章目录 Mysql二进制日志 Mysql二进制日志** binlog二进制日志记录的方式 基于段记录(SQL语句名)的格式(statement-based replication, SBR) 查看二 ...

  8. redis如何解决高可用问题?

    redis如何解决高可用问题? 使用redis集群. 目前解决redis高可用的最佳实践,就是使用redis集群. 架构 一般就是几主几从,就够用了. 比如,3主3从,或者5主5从. 每个主节点,一般 ...

  9. Keepalived+LVS+Nginx负载均衡之高可用

    2019独角兽企业重金招聘Python工程师标准>>> 上一篇写了nginx负载均衡,此篇实现高可用(HA).系统整体设计是采用Nginx做负载均衡,若出现Nginx单机故障,则导致 ...

最新文章

  1. js 区分 safari chrome iso
  2. hdu 1052 Tian Ji -- The Horse Racing
  3. pmp每日三题(2022年3月10日)
  4. (转)更新Java final常量后,请重新编译你的class
  5. python之模块calendar(汇集了日历相关的操作)
  6. 克里斯蒂安贝尔_克里斯蒂安·贝尔近照!蝙蝠侠骑单车买咖啡,动作娴熟似外卖小哥...
  7. FFmpeg源代码简单分析:av_write_trailer()
  8. psd导出jpg太大_【设计】PSD导出JPG文件非常大解决办法
  9. Linux下pip安装教程
  10. opnet之变量类型
  11. armbian编译安装mentohust 认证锐捷客户端
  12. 计算机组装与维护思考问题,计算机组装与维护心得体会
  13. 洛谷P1512 伊甸园日历游戏
  14. “Only fullscreen opaque activities can request orientation “问题分析
  15. 同步011序列检测电路
  16. 拉格朗日插值的优缺点_拉格朗日插值法与牛顿插值法的比较
  17. hardware 中的几个地址问题
  18. 为什么美国程序员不用加班,而中国程序员就只能996?
  19. MATLAB | 如何从热图中提取数据
  20. 【快乐手撕LeetCode题解系列】——消失的数字

热门文章

  1. 在线HTML转JS/JSON工具
  2. timestamp和recycle同时开启,导致连接成功率降低
  3. IQueryable和IEnumerable,IList的区别
  4. 关于onSaveInstanceState的javadoc的渣渣翻译
  5. linux+nginx+php+mysql安装及配置
  6. debian重启ssh服务_VScode链接服务器并配置公钥SSH Keys
  7. mongodb还不会?万字长文解析揉碎了给你讲,收藏这一篇就够了
  8. python idle使用教程_PythonIDLE使用教程
  9. C++类的赋值运算符“=”重载,以及深拷贝和浅拷贝
  10. PDM系统的产品结构管理与版本控制