设为首页 收藏本站
查看: 570|回复: 0

shell解决服务器高可用

[复制链接]

尚未签到

发表于 2018-8-16 13:01:41 | 显示全部楼层 |阅读模式
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的部分功能,有一些假设的前提条件,目的是为了让大家了解其工作原理,不像之前的事例可以用在生产环境。欢迎批评指教。希望对大家理解高可用有所帮助,更希望大家可以完善这个脚本,提出更好的解决方案,多说一句,脚本不是万能的,但没有脚本是万万不能的。


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-552701-1-1.html 上篇帖子: shell之图形进度条 下篇帖子: 说说 WEB SHELL
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表